저번 글에서 조건문(when)을 활용해서 조건에 만족하는 경우에만 파일에 내용을 추가하는 기능을 테스트하였다.
https://cwpack0730.tistory.com/12
하지만 단순히 yes or no 말고도 (조건에 만족하면 start, 아니면 stop)
a조건이면 a실행, b조건이면 b실행 등 조건을 나눠서 사용해보고 싶어졌다.
여러 when을 사용할 수 있는 방법을 조사해봤으나,
단순한 When문은 하나의 조건이라도 false이 나온다면 그 뒤에 명령들은 전부넘어가버렸다..
하지만 그래도 When 조건을 중첩해서 사용할 수 있는 방법을 찾았다.
여러 when을 사용할 수 있는 방법을 찾아 해당 게시글로 공유를 해보려고 한다.
기능 구조
테스트는 EC2 3대를 활용하여 진행하겠다. (ansible server1, hosts 2)
hosts는 각각 chan 디렉터리, woo 디렉터리를 가지고 있다. (중복하지 않고 고유하게 지니고있다.)
ansible server에서 chan 디렉터리가 있는 경우에는(if) 각 서버에 있는 local.txt에 a 내용을 추가하고,
woo 디렉터리가 있는 경우에는 b 내용을 추가하는 방향으로 테스트해보겠다.
/tmp/chan 생성한 hosts1
/tmp/woo 생성한 hosts2
즉, 두 hosts server는 home 디렉터리에 동일하게 local 파일을 지니고 있고,
서버에 chan 디렉터리가 존재하면 local에 chan 라인을 추가, woo가 있다면 woo 라인을 추가하는 기능이다.
---
- hosts: all
name: file gogo
gather_facts: false
become: true
tasks:
- name: Check that the unarchive files exists
stat:
path: /tmp/woo/
register: stat_result
- name: chan check
stat:
path: /tmp/chan/
register: stat_chan
- name: woo go
include_tasks: /home/ansible/0727/woo.yaml
when: stat_result.stat.exists == True
- name: chan go
include_tasks: /home/ansible/0727/chan.yaml
when: stat_chan.stat.exists == True
이렇게 트리 형식으로 조건에 맞게 yaml 파일들을 불러오면 매우 효율적이다.
(chan 디렉터리가 존재하면 chan.yaml 진행하는 식.)
---
- name: chan in line
lineinfile:
path: /home/local
line: |
chan directory
---
- name: woo in line
lineinfile:
path: /home/local
line: woo directory
각각 chan.yaml과 woo.yaml의 내용이다. 조건에 해당될때만 진행될것이다.
chan go task와 woo go task가 각각 문제없이 진행되었다.
각 local 파일에 조건에 맞는 라인이 추가된것을 확인할 수 있다.
이렇게 여러 조건문을 tree형식으로 관리하게 된다면 매우 직관적이고 유지보수, 관리 측면에서 매우 큰 도움이 될 거 같다.
여기까지 여러 when 조건문을 활용하는 기능을 테스트하였다.
'IaC > Ansible_앤서블' 카테고리의 다른 글
[Ansible] Inventory 작성방법 (0) | 2023.02.24 |
---|---|
[Ansible] 자주 사용하는 간단한 모듈 활용 (0) | 2023.02.13 |
[Ansible] When 조건문 (0) | 2023.01.25 |
[Ansible] 작업 제어 구현 - 오류처리 (0) | 2023.01.19 |
[Ansible] 앤서블(Ansible) Playbook 만들기 - update, shutdown, 파일 복사하기 (0) | 2023.01.13 |