[Ansible] 조건문(Conditionals)DevOps/Ansible2022. 4. 19. 23:48
Table of Contents
728x90
✔️ 조건문
- 조건문은 Jinja(템플릿에 사용하는 포맷) 구문이다.
- 작업에서
when
키워드를 사용하며 조건을 정의하고test
,filter
키워드를 사용한다. - 조건 정의시
{{ }}
를 사용하지 않는다.
✔️ when
- task 레벨의 조건문에서 사용하며 언제 실행하는가?를 정의할 때 사용한다.
- 변수를 참조할 때
{{ }}
을 사용하지 않는다.
예시
- hosts: 192.168.100.11
vars:
switch: "on"
tasks:
- debug:
msg: "hello switch"
when: switch == "on"
- debug:
msg: "hello switch off"
when: switch == "off"
스위치라는 값이 "on" 이면 실행하라는 뜻이다.
조건문을 사용하는 주된 이유 중 하나는 RedHat 계열의 Debian 계열의 리눅스가 혼재할 때 조건을 걸어 각 OS에 맞게 인프라를 세팅할 때 사용하기 위해서이다.
tasks:
- name: Shut down Debian flavored systems
ansible.builtin.command: /sbin/shutdown -t now
when: ansible_facts['os_family'] == "Debian"
✔️ 조건문에 많이 사용하는 팩트 변수
ansible_facts["distribution"]
ansible_distribution list
Alpine
Altlinux
Amazon
Archlinux
ClearLinux
Coreos
CentOS
Debian
Fedora
Gentoo
Mandriva
NA
OpenWrt
OracleLinux
RedHat
Slackware
SLES
SMGL
SUSE
Ubuntu
VMwareESX
다음 예제는 fact 변수를 이용해 OS 별로 출력문을 다르게 하는 playbook 실행 결과이다.
test.yaml
- hosts: wp
tasks:
- debug:
msg: "hello CentOS"
when: ansible_facts["distribution"] == "CentOS"
- debug:
msg: "hello Ubuntu"
when: ansible_facts["distribution"] == "Ubuntu"
inventory.ini
[vagrant@controller ~]$ cat inventory.ini
192.168.100.11
192.168.100.12
[wp]
192.168.100.11
192.168.100.12
192.168.100.13
[vagrant@controller 03_condition]$ ansible-playbook test.yaml
PLAY [wp] ***********************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************************************
ok: [192.168.100.13]
ok: [192.168.100.11]
ok: [192.168.100.12]
TASK [debug] ********************************************************************************************************************************************************************************************************************************************************
ok: [192.168.100.11] => {
"msg": "hello CentOS"
}
skipping: [192.168.100.13]
ok: [192.168.100.12] => {
"msg": "hello CentOS"
}
TASK [debug] ********************************************************************************************************************************************************************************************************************************************************
skipping: [192.168.100.11]
ok: [192.168.100.13] => {
"msg": "hello Ubuntu"
}
skipping: [192.168.100.12]
PLAY RECAP **********************************************************************************************************************************************************************************************************************************************************
192.168.100.11 : ok=2 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.100.12 : ok=2 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.100.13 : ok=2 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
ubuntu 계열인 192.168.100.13 호스트는 "hello Ubuntu"가 출력되었음을 확인할 수 있다.
✔️ 테스트문
테스트문에 when을 많이 사용한다.
vars:
url: "https://example.com/users/foo/resources/bar"
tasks:
- debug:
msg: "matched pattern 1" # when - task 레벨에서 사용하는 조건문
when: url is match("https://example.com/users/.*/resources")
- debug:
msg: "matched pattern 2"
when: url is search("users/.*/resources/.*")
- debug:
msg: "matched pattern 3"
when: url is search("users")
- debug:
msg: "matched pattern 4"
when: url is regex("example\.com/\w+/foo")
728x90
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] 블록 (Block) (0) | 2022.04.20 |
---|---|
[Ansible] 핸들러 (Handler) (0) | 2022.04.20 |
[Ansible] 반복문(Loops) (0) | 2022.04.19 |
[Ansible] 변수(Variables) (0) | 2022.04.19 |
[Ansible] Playbook 실행 (0) | 2022.04.16 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!