권한 문제를 피하기 위한 모범 사례
chmod 및 become을 사용하여 권한 문제를 해결하는 방법을 이해했으므로, 처음부터 권한 문제가 발생하지 않도록 하기 위한 몇 가지 모범 사례를 살펴보겠습니다.
1. 스크립트를 사용하기 전에 항상 실행 가능하게 만들기
Ansible 에서 스크립트를 사용하기 전에 항상 실행 권한이 있는지 확인하십시오.
chmod +x path/to/script.sh
스크립트 생성 프로세스의 일부로 이 작업을 수행하는 것이 좋습니다.
2. 적절한 파일 모드와 함께 버전 관리 사용
Git 또는 다른 버전 관리 시스템을 사용하는 경우 파일 모드 (권한) 를 유지하는지 확인하십시오. Git 에서는 다음과 같이 구성할 수 있습니다.
git config core.fileMode true
기존 저장소의 경우 파일 모드를 업데이트해야 할 수 있습니다.
git update-index --chmod=+x path/to/script.sh
3. 권한을 확인하고 수정하는 스크립트 만들기
프로젝트의 모든 스크립트에 대한 권한을 확인하고 수정하는 유틸리티 스크립트를 만들어 보겠습니다.
cd ~/project/ansible-lab
touch fix_permissions.sh
fix_permissions.sh 파일에 다음 내용을 추가합니다.
#!/bin/bash
echo "Fixing permissions for scripts in ansible-lab"
## Find all .sh files and make them executable
find ~/project/ansible-lab -name "*.sh" -type f -exec chmod +x {} \;
echo "Done. All script files now have execute permissions."
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/ansible-lab/fix_permissions.sh
프로젝트의 모든 스크립트에 실행 권한이 있는지 확인하려면 스크립트를 실행하십시오.
./fix_permissions.sh
4. Ansible 의 File 모듈을 사용하여 권한 설정
Ansible 의 file 모듈을 사용하여 스크립트 파일에 올바른 권한이 있는지 확인할 수도 있습니다. 이를 수행하는 플레이북을 만들어 보겠습니다.
cd ~/project/ansible-lab/playbooks
touch set_permissions.yml
set_permissions.yml 파일에 다음 내용을 추가합니다.
---
- name: Set correct permissions for scripts
hosts: local
tasks:
- name: Find all script files
find:
paths: /home/labex/project/ansible-lab
patterns: "*.sh"
recurse: yes
register: script_files
- name: Make script files executable
file:
path: "{{ item.path }}"
mode: "0755"
loop: "{{ script_files.files }}"
모든 스크립트에 올바른 권한이 있는지 확인하려면 이 플레이북을 실행하십시오.
cd ~/project/ansible-lab
ansible-playbook -i inventory.ini playbooks/set_permissions.yml
5. 사전 검사 플레이북 만들기
마지막으로, 주요 플레이북을 실행하기 전에 모든 것이 올바르게 설정되었는지 확인하기 위해 실행되는 사전 검사 플레이북을 만들어 보겠습니다.
cd ~/project/ansible-lab/playbooks
touch preflight_check.yml
preflight_check.yml 파일에 다음 내용을 추가합니다.
---
- name: Pre-flight checks
hosts: local
tasks:
- name: Check if scripts are executable
find:
paths: /home/labex/project/ansible-lab
patterns: "*.sh"
recurse: yes
register: script_files
- name: Verify script permissions
stat:
path: "{{ item.path }}"
register: stat_results
loop: "{{ script_files.files }}"
failed_when: not stat_results.stat.executable
ignore_errors: yes
이 플레이북은 모든 .sh 파일이 실행 가능한지 확인하고 실행 가능하지 않은 파일을 보고합니다.
사전 검사를 실행해 보겠습니다.
cd ~/project/ansible-lab
ansible-playbook -i inventory.ini playbooks/preflight_check.yml
모든 스크립트에 올바른 권한이 있으면 플레이북이 오류 없이 완료되어야 합니다. 실행 권한이 없는 스크립트가 있으면 알림이 표시됩니다.
이러한 모범 사례를 따르면 Ansible 스크립트에서 'permission denied' 오류를 방지하고 자동화가 원활하게 실행되도록 할 수 있습니다.