소개

이 랩에서는 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"

이 업데이트된 플레이북은 다음과 같은 변경 사항을 적용합니다.

  1. 정의되지 않은 변수 오류를 방지하기 위해 ansible_become에 대한 기본값을 추가했습니다.
  2. 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 의 동작을 사용자 정의하는 방법에 대해 배웠습니다. 다음은 주요 내용입니다.

  1. Ansible 은 설정 파일을 사용하여 동작을 제어합니다. 기본 설정은 ansible-config dump 명령을 사용하여 볼 수 있습니다.

  2. 기본 설정을 재정의하기 위해 사용자 정의 설정 파일을 만들 수 있습니다. 이러한 파일은 일반적으로 ansible.cfg로 명명되며, 서로 다른 위치에, 서로 다른 우선 순위로 배치될 수 있습니다.

  3. 중요한 설정에는 다음이 포함됩니다.

    • inventory: 인벤토리 파일의 경로를 지정합니다.
    • remote_user: 연결에 사용할 기본 SSH 사용자를 설정합니다.
    • host_key_checking: SSH 호스트 키 확인을 제어합니다.
    • become 및 관련 설정: 권한 상승을 제어합니다.
  4. ansible-config dump --only-changed 명령은 기본 설정과 다른 설정만 보는 데 유용합니다.

  5. 구성 정보를 표시하는 플레이북을 생성하고 실행하여 구성 변경 사항을 테스트할 수 있습니다.

  6. --config 옵션을 사용하면 Ansible 명령을 실행할 때 특정 설정 파일을 지정할 수 있습니다. 이는 테스트 또는 서로 다른 시나리오에 대해 서로 다른 구성을 사용해야 할 때 유용할 수 있습니다.

Ansible 의 설정을 이해하고 사용자 정의할 수 있는 능력은 Ansible 을 특정 환경 및 요구 사항에 맞게 조정하는 데 매우 중요합니다. Ansible 을 계속 사용하면서 자동화 워크플로우를 최적화하기 위해 이러한 설정을 조정하게 될 것입니다.

다양한 시나리오에 대해 서로 다른 설정 파일을 생성하여 연습해 보십시오. 예를 들어, 보안 설정이 완화된 테스트 환경용 구성과 보안 설정이 더 엄격한 프로덕션 환경용 구성을 만들 수 있습니다.

host_key_checking 비활성화와 같은 일부 설정은 테스트에 편리할 수 있지만, 보안이 가장 중요한 프로덕션 환경에서는 신중하게 고려해야 합니다. 전체 시스템 보안 전략의 일부로 항상 Ansible 설정을 검토하십시오.

향후 랩에서는 이러한 설정 설정을 더욱 복잡한 시나리오에서 활용하고, 역할, 동적 인벤토리 및 기타 고급 Ansible 기능과 통합하는 방법을 배우게 됩니다.