조건문 소개
Ansible 의 조건문 (conditionals) 을 사용하면 특정 조건에 따라 작업 실행을 제어할 수 있습니다. 이는 시스템의 상태 또는 특정 변수의 값에 따라 다른 작업을 수행해야 할 때 매우 유용합니다.
조건문의 사용법을 보여주는 간단한 플레이북을 만들어 보겠습니다.
nano conditional_example.yml
이 명령은 conditional_example.yml이라는 새 파일을 만들기 위해 nano 텍스트 편집기를 엽니다. 이제 다음 내용을 추가해 보겠습니다.
---
- name: Conditional Example
hosts: localhost
gather_facts: yes
tasks:
- name: Check OS family
debug:
msg: "This is a Debian-based system"
when: ansible_os_family == "Debian"
- name: Check OS family (alternative)
debug:
msg: "This is not a Debian-based system"
when: ansible_os_family != "Debian"
자세히 살펴보겠습니다.
- 파일 상단의
---는 YAML 문서의 시작을 나타냅니다.
name: Conditional Example은 플레이북에 이름을 지정합니다.
hosts: localhost는 이 플레이북이 로컬 머신에서 실행됨을 지정합니다.
gather_facts: yes는 작업을 실행하기 전에 시스템에 대한 정보를 수집하도록 Ansible 에 지시합니다. 이는 조건에서 이러한 팩트를 사용하기 때문에 중요합니다.
tasks:는 실행할 작업 목록을 시작합니다.
각 작업은 debug 모듈을 사용하여 메시지를 출력하지만, 실행은 when 절에 의해 제어됩니다.
- 첫 번째 작업은 시스템이 Debian 기반인 경우에만 실행됩니다 (
ansible_os_family == "Debian").
- 두 번째 작업은 시스템이 Debian 기반이 아닌 경우에만 실행됩니다 (
ansible_os_family != "Debian").
ansible_os_family는 대상 시스템에 대해 Ansible 이 수집한 팩트입니다. 여기서는 조건문이 어떻게 작동하는지 보여주기 위해 사용됩니다.
nano 편집기를 저장하고 종료합니다 (Ctrl+X, Y, Enter).
이제 플레이북을 실행해 보겠습니다.
ansible-playbook -i ../inventory.ini conditional_example.yml
이 명령은 Ansible 에게 플레이북을 실행하도록 지시합니다. -i ../inventory.ini 옵션은 앞서 생성한 인벤토리 파일을 지정합니다.
시스템이 Debian 기반인지 여부를 나타내는 출력을 볼 수 있습니다. 시스템의 OS 패밀리에 따라 디버그 메시지 중 하나만 표시됩니다.
이 예제는 조건문을 사용하여 플레이북을 다양한 환경에 적응시키는 방법을 보여줍니다. 실제 시나리오에서는 조건문을 사용하여 서로 다른 OS 유형에 서로 다른 패키지를 설치하거나, 파일이 이미 존재하는 경우 특정 작업을 건너뛸 수 있습니다.
기억하세요. 조건문의 강력함은 각 경우에 대해 별도의 플레이북이 필요 없이 플레이북을 유연하게 만들고 다양한 시나리오를 처리할 수 있는 능력에 있습니다.