Ssoon
[ Part-2 ] 앤서블 기본 사용법 - 조건문 본문
CloudNet@ 가시다님이 진행하는 Ansible 101 Study
"앤서블로 시작하는 인프라 자동화" (한빛미디어) 로 진행
✅ 조건문
- 특정 족건이 충족 ▶ 작업 또는 플레이 실행
💠 조건 작업 구문
- when 문
- 테스트할 조건을 값으로 사용
- 조건 충족 ▶ 작업 실행
- 조건 불충족 ▶ 작업 작업 skip
- run_my_task 가 true 인 경우에만 작업 실행
- hosts: localhost
vars:
run_my_task: true
tasks:
- name: echo messages
ansible.builtin.shell: "echo test"
when: run_my_task
- ansible-playbook 실행
- run_my_task 을 false 로 수정
- hosts: localhost
vars:
run_my_task: false
tasks:
- name: echo messages
ansible.builtin.shell: "echo test"
when: run_my_task
- ansible-playbook 실행
- echo message 태스크가 수행되지 않고 skip
💠 조건 연산자
연산 예시 | 설명 |
ansible_fact['machine'] = "x86_64" | ansible_fact['machine'] 의 값이 x86_64 와 같으면 true |
max_memory == 512 | max_memory 값이 512 와 같다면 true |
max_memory < 512 | max_memory 값이 512 보다 작으면 true |
max_memory > 512 | max_memory 값이 512 보다 크면 true |
max_memory <= 512 | max_memory 값이 512 보다 작거나 같으면 |
max_memory >= 512 | max_memory 값이 512 보다 크거나 같으면 |
max_memory != 512 | max_memory 값이 512 와 같지 않으면 |
max_memory is difined | max_memory 라는 변수가 있으면 true |
max_memory is not defined | max_memory 라는 변수가 없으면 true |
memory_available | memory 값이 true이면 true, 이때 해당 값이 1 이거나 true 또는 yes 면 true |
not memory_available | memory 값이 false이면 true, 이때 해당 값이 0 이거나 false 또는 no 면 true |
ansible_fact['distribution'] in supported_distros | ansible_fact['distribution'] 값이 supported_distros 라는 변수가 있으면 true |
- vars 키워드로 supported_distros 변수를 사전 타입의 값으로 저장
- when 구문에 ansible_facts['distribution'] in supported_distros 조건문 추가
- hosts: all
vars:
supported_distros:
- Rocky
- CentOS
tasks:
- name: print supported os
ansible.builtin.debug:
msg: "this is {{ ansible_facts['distribution'] }} need to use dnf"
when: ansible_facts['distribution'] in supported_distros
- ansible-playbook 실행
- ansible_facts['distribution'] 값이 "Rocky" 나 "CentOS" 면 출력
💠 복수 조건문
- ansible_facts['distribution'] 값이 "CentOS" 이거나 "Ubuntu" 일 경우에만 실행
- hosts: all
tasks:
- name: print os type
ansible.builtin.debug:
msg: "os type: {{ ansible_facts['distribution'] }}"
when: ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution'] == "Ubuntu"
- ansible-playbook 실행
- ansible_facts['distribution'] 값이 "CentOS" 이고 ansible_facts['distribution_version'] 이 '8' 일 경우에만 실행
- hosts: all
tasks:
- name: print os type
ansible.builtin.debug:
msg: >
os type: {{ ansible_facts['distribution'] }}
os version: {{ ansible_facts['distribution_version'] }}
when: ansible_facts['distribution'] == "CentOS" or ansible_facts['distribution_version'] == "8"
- ansible-playbook 실행
- 사전 형태 목록으로 표현
- hosts: all
tasks:
- name: print os type
ansible.builtin.debug:
msg: >
os type: {{ ansible_facts['distribution'] }}
os version: {{ ansible_facts['distribution_version'] }}
when:
- ansible_facts['distribution'] == "CentOS"
- ansible_facts['distribution_version'] == "8"
- ansible-playbook 실행
- and 연산자와 or 연산자 함께 사용
- ansible_facts['distribution'] 의 값이 "CentOS" 이면서 ansible_facts['distribution_version'] 값이 "8" 이거나 ansible_facts['distribution'] 의 값이 "Ubuntu" 이면서 ansible_facts['distribution_version'] 값이 "22.04" 인 경우 실행
- hosts: all
tasks:
- name: print os type
ansible.builtin.debug:
msg: >
os type: {{ ansible_facts['distribution'] }}
os version: {{ ansible_facts['distribution_version'] }}
when: >
( ansible_facts['distribution'] == "CentOS" and
ansible_facts['distribution_version'] == "8" )
or
( ansible_facts['distribution'] == "Ubuntu" and
ansible_facts['distribution_version'] == "22.04" )
- ansible-playbook 실행
💠 반복문과 조건문 사용
- when 문의 item['mount'] 은 loop 문에서 선언한 ansible_facts의 mounts 중 mount 라는 값고 size_available 값 사용
- hosts: db
tasks:
- name: print root directory size
ansible.builtin.debug:
msg: "directory {{ item.mount }} size is {{ item.size_available }}"
loop: "{{ ansible_facts['mounts'] }}"
when: item['mount'] == "/" and item['size_available'] > 300000000
- ansible-playbook 실행
- ansible_fact 에서 mounts 라는 사전 타입 변수값을 반복
- mount 가 '/' 이고 size_available 값이 '300000000" 보다 큰 경우에만 메시지 출력
- register 키워드로 작업 변수 사용
- systemctl 로 rsyslog 가 active 인지 체크 ▶ 결과를 result 변수에 저장 ▶result.stdout 갑이 active 일 경우만 실행
- hosts: all
tasks:
- name: get rsyslog service status
ansible.builtin.command: systemctl is-active rsyslog
register: result
- name: print rsyslog status
ansible.builtin.debug:
msg: "rsyslog status is {{ result.stdout }}"
when: result.stdout == "active"
- ansible-playbook 실행
'Ansible 101 Study' 카테고리의 다른 글
[ Part-2 ] 앤서블 기본 사용법 - Role (0) | 2024.01.20 |
---|---|
[ Part-2 ] 앤서블 기본 사용법 - 핸들러 및 작업 실패 처리 (0) | 2024.01.20 |
[ Part-2 ] 앤서블 기본 사용법 - 반복문 (0) | 2024.01.15 |
[ Part-2 ] 앤서블 기본 사용법 - 팩트 (0) | 2024.01.14 |
[ Part-2 ] 앤서블 기본 사용법 - Ansible Vault (0) | 2024.01.13 |
Comments