소개
이 랩에서는 Ansible 설정 파일과 Ansible 의 동작을 사용자 정의하는 방법에 대해 배우게 됩니다. Ansible 은 동작을 제어하는 다양한 설정을 정의하기 위해 설정 파일을 사용합니다. 기본 설정을 살펴보고, 사용자 정의 설정 파일을 생성하며, 다양한 설정 옵션이 Ansible 의 동작에 어떤 영향을 미치는지 이해할 것입니다. 이 랩을 마치면, 다양한 시나리오에 맞게 Ansible 을 구성하는 실질적인 경험을 얻게 될 것입니다. 이는 특정 요구 사항과 환경에 맞게 Ansible 을 조정하는 데 매우 중요합니다.
기본 Ansible 설정 이해
Ansible 의 기본 설정을 살펴보는 것으로 시작해 보겠습니다. Ansible 은 여러 위치에서 설정 파일을 찾으며, 각 위치는 서로 다른 우선 순위를 갖습니다.
먼저, 시스템 전체의 Ansible 설정 파일이 있는지 확인해 보겠습니다.
cat /etc/ansible/ansible.cfg
이 파일이 존재하지 않으면 오류 메시지가 표시될 수 있는데, 이는 많은 환경에서 정상입니다.
이제 Ansible 의 기본 설정 값을 살펴보겠습니다. 다음 명령을 실행하여 확인할 수 있습니다.
ansible-config dump
이 명령은 현재 Ansible 설정 설정을 모두 표시합니다. 목록이 길기 때문에 몇 가지 중요한 설정을 자세히 살펴보겠습니다.
DEFAULT_HOST_LIST: 기본 인벤토리 파일 경로입니다.DEFAULT_REMOTE_USER: Ansible 이 원격 호스트에 연결하는 데 사용할 기본 SSH 사용자입니다.DEFAULT_BECOME_METHOD: Ansible 이 권한 상승 (예: sudo) 에 사용할 기본 방법입니다.
이러한 설정을 아직 모두 이해하지 못하더라도 걱정하지 마십시오. Ansible 을 더 많이 사용하면서 필요에 가장 적합한 설정을 익숙하게 될 것입니다.
출력을 종료하려면 Q를 누르십시오.
이제 다음 단계에서 사용할 간단한 인벤토리 파일을 만들어 보겠습니다.
echo "localhost ansible_connection=local" > /home/labex/project/inventory
이 명령은 localhost 만 정의된 최소 인벤토리 파일을 생성합니다.
사용자 정의 Ansible 설정 파일 생성
이제 기본 설정을 이해했으므로 사용자 정의 Ansible 설정 파일을 만들어 보겠습니다. 이를 통해 기본 설정을 재정의하고 Ansible 의 동작을 필요에 맞게 조정할 수 있습니다.
/home/labex/project 디렉토리에 ansible.cfg라는 새 파일을 만듭니다.
nano /home/labex/project/ansible.cfg
다음 내용을 파일에 추가합니다.
[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
이러한 설정을 자세히 살펴보겠습니다.
inventory: 인벤토리 파일의 경로를 지정합니다.remote_user: 연결에 사용할 기본 SSH 사용자를 설정합니다.host_key_checking: SSH 호스트 키 확인을 비활성화합니다. 이는 테스트 환경에서 유용할 수 있습니다 (하지만 보안을 위해 프로덕션 환경에서는 활성화해야 합니다).stdout_callback: 출력 형식을 YAML 로 변경하여 가독성을 높입니다.become: 기본적으로 권한 상승을 활성화합니다.become_method: 권한 상승 방법으로 sudo 를 설정합니다.become_user: 권한을 상승할 때 사용할 사용자를 지정합니다.become_ask_pass: sudo 암호 입력을 비활성화합니다.
편집기를 저장하고 종료합니다. nano 에서는 Ctrl+X를 누른 다음 Y를 눌러 확인하고 Enter를 눌러 저장할 수 있습니다.
이제 Ansible 이 새 설정 파일을 사용하고 있는지 확인해 보겠습니다. 다음을 실행합니다.
ansible-config dump --only-changed
DEFAULT_BECOME(/home/labex/project/ansible.cfg) = True
DEFAULT_BECOME_ASK_PASS(/home/labex/project/ansible.cfg) = False
DEFAULT_BECOME_METHOD(/home/labex/project/ansible.cfg) = sudo
DEFAULT_BECOME_USER(/home/labex/project/ansible.cfg) = root
DEFAULT_HOST_LIST(/home/labex/project/ansible.cfg) = ['/home/labex/project/inventory']
DEFAULT_REMOTE_USER(/home/labex/project/ansible.cfg) = labex
DEFAULT_STDOUT_CALLBACK(/home/labex/project/ansible.cfg) = yaml
HOST_KEY_CHECKING(/home/labex/project/ansible.cfg) = False
이 명령은 기본 설정과 다른 설정만 표시합니다. 사용자 정의 ansible.cfg 파일에서 변경한 사항을 확인할 수 있습니다.
사용자 정의 설정 테스트
이제 사용자 정의 설정이 완료되었으므로 이를 테스트하기 위한 간단한 플레이북을 만들어 보겠습니다. 이를 통해 구성 변경 사항이 Ansible 의 동작에 어떤 영향을 미치는지 이해할 수 있습니다.
/home/labex/project 디렉토리에 test_config.yml이라는 새 파일을 만듭니다.
nano /home/labex/project/test_config.yml
다음과 같이 내용을 업데이트합니다.
---
- name: Test Custom Configuration
hosts: all
tasks:
- name: Display remote user
debug:
msg: "Connected as user: {{ ansible_user }}"
- name: Display privilege escalation info
debug:
msg: "Privilege escalation is {{ 'enabled' if ansible_become | default(false) else 'disabled' }}"
- name: Show Ansible configuration
debug:
msg: "Inventory file: {{ lookup('config', 'DEFAULT_HOST_LIST') }}"
- name: Check if become is enabled in ansible.cfg
command: grep "become = True" /home/labex/project/ansible.cfg
register: become_check
changed_when: false
failed_when: false
- name: Display become setting from ansible.cfg
debug:
msg: "Become is {{ 'enabled' if become_check.rc == 0 else 'disabled' }} in ansible.cfg"
이 업데이트된 플레이북은 다음과 같은 변경 사항을 적용합니다.
- 정의되지 않은 변수 오류를 방지하기 위해
ansible_become에 대한 기본값을 추가했습니다. become설정을 위해ansible.cfg파일을 직접 확인하는 두 개의 새로운 작업을 추가하여 구성에 대한 보다 정확한 표현을 제공합니다.
이제 업데이트된 플레이북을 실행해 보겠습니다.
ansible-playbook /home/labex/project/test_config.yml
이것은 오류 없이 실행되어 Ansible 구성에 대한 정보를 제공해야 합니다.
또한, ansible.cfg 파일을 업데이트하여 사용 중단 경고를 해결해 보겠습니다.
nano /home/labex/project/ansible.cfg
[defaults] 섹션 아래에 다음 줄을 추가합니다.
interpreter_python = /usr/bin/python3
이제 ansible.cfg 파일은 다음과 같이 표시됩니다.
[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml
interpreter_python = /usr/bin/python3
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
편집기를 저장하고 종료합니다.
이제 플레이북을 다시 실행하면 다음과 같습니다.
ansible-playbook /home/labex/project/test_config.yml
사용 중단 경고 없이 출력을 볼 수 있으며 구성 설정을 올바르게 표시해야 합니다.
요약
이 랩에서는 Ansible 설정 파일과 Ansible 의 동작을 사용자 정의하는 방법에 대해 배웠습니다. 다음은 주요 내용입니다.
Ansible 은 설정 파일을 사용하여 동작을 제어합니다. 기본 설정은
ansible-config dump명령을 사용하여 볼 수 있습니다.기본 설정을 재정의하기 위해 사용자 정의 설정 파일을 만들 수 있습니다. 이러한 파일은 일반적으로
ansible.cfg로 명명되며, 서로 다른 위치에, 서로 다른 우선 순위로 배치될 수 있습니다.중요한 설정에는 다음이 포함됩니다.
inventory: 인벤토리 파일의 경로를 지정합니다.remote_user: 연결에 사용할 기본 SSH 사용자를 설정합니다.host_key_checking: SSH 호스트 키 확인을 제어합니다.become및 관련 설정: 권한 상승을 제어합니다.
ansible-config dump --only-changed명령은 기본 설정과 다른 설정만 보는 데 유용합니다.구성 정보를 표시하는 플레이북을 생성하고 실행하여 구성 변경 사항을 테스트할 수 있습니다.
--config옵션을 사용하면 Ansible 명령을 실행할 때 특정 설정 파일을 지정할 수 있습니다. 이는 테스트 또는 서로 다른 시나리오에 대해 서로 다른 구성을 사용해야 할 때 유용할 수 있습니다.
Ansible 의 설정을 이해하고 사용자 정의할 수 있는 능력은 Ansible 을 특정 환경 및 요구 사항에 맞게 조정하는 데 매우 중요합니다. Ansible 을 계속 사용하면서 자동화 워크플로우를 최적화하기 위해 이러한 설정을 조정하게 될 것입니다.
다양한 시나리오에 대해 서로 다른 설정 파일을 생성하여 연습해 보십시오. 예를 들어, 보안 설정이 완화된 테스트 환경용 구성과 보안 설정이 더 엄격한 프로덕션 환경용 구성을 만들 수 있습니다.
host_key_checking 비활성화와 같은 일부 설정은 테스트에 편리할 수 있지만, 보안이 가장 중요한 프로덕션 환경에서는 신중하게 고려해야 합니다. 전체 시스템 보안 전략의 일부로 항상 Ansible 설정을 검토하십시오.
향후 랩에서는 이러한 설정 설정을 더욱 복잡한 시나리오에서 활용하고, 역할, 동적 인벤토리 및 기타 고급 Ansible 기능과 통합하는 방법을 배우게 됩니다.


