# 반복문
task를 반복하는것
예를들어 사용자를 10명을 만들어야한고 가정해보자. 사용자는 user라는 모듈로 생성을 할 수 있는데, 반복문을 사용하지 않으면 user라는 모듈을 가지고 task를 10개 만들어야한다.
반복문을 이용해 반복하는 작업을 효율적으로 줄일 수 있다.
모듈의 키워드를 사용한다. Ansible 2.4 까지는 with_* 키워드를 사용하여 작업 하였는데, Ansible 2.5 부터는 조금더 명확한 loop 키워드를 사용한다. with_* 키워드에 대한 여러가지 반복문을 완전히 대체하는 것은 아니지만, 거의 대부분 loop에서도 유효하다.
패키지 관련된 모듈은 반복문을 쓰지 않을것을 권장한다.
# 단순 반복
반목문에서 제공되는 목록을 참조하는 변수명은 항상 item이다.
debug 모듈 - 테스트할때 많이 사용
# 사전 목록 반복
목록이 두개가 있고 안에는 사전이 들어가있는 형태
반복이 두번일어난다 . 참조해야하는 값이 두가지 이상 있는경우 사전목록반복을 사용한다.
# 중첩 목록 반복
목록안에 목록이 들어가 있는 형태 (list 안에 list)
데카르트의 곱 ( x,y,z ) (1,2,3 )= (x,1),(x,2),(x,3),(y,1),(y,2),(y,3),(z,1),(z,2),(z,3)
users , dbs 라는 변수를 선언해 놓고 변수 필터 사용하여 users와 dbs의 product 를 데카르트 곱을 하고 리스트 목록으로 제공하라
- name: Install MySQL Package
apt:
update_cache: true
name: mysql-server, python3-pymysql
state: present
when: ansible_facts['os_family'] == "Debian"
- name: Install MariabDB Package
yum:
name: mariadb-server, mariadb-client
state: present
when: ansible_facts['os_family'] == "RedHat"
- hosts: 192.168.200.101
tasks:
- name: block1
block:
- name: block - task1
debug:
msg: hello world
- name: block - task2
command: ls -w
- name: block - task3
debug:
msg: after failuer
rescue:
- name: rescue - task1
debug:
msg: rescue block
- name: rescue - task2
command: ls -w
- name: rescue - task3
debug:
msg: after fauluer
always:
- name: always - task1
debug:
msg: always run
- hosts: 192.168.200.101
tasks:
- name: long task
command: sleep 100
async: 120
poll: 0
register: comm_result
- name: 2nd task
debug:
msg: "hello world"
- name: 3rd task
debug:
msg: "{{ comm_result }}"
- name: sync
async_status:
jid: "{{ comm_result.ansible_job_id }}"
register: job_result
until: job_result.finished
retries: 100
delay: 5
- name: 4th task
debug:
msg: "{{ job_result }}"
- hosts: 192.168.200.101
tasks:
- debug:
tags:
- prod
- web
- debug:
tags:
- dev
- web
- debug:
tags:
- prod
- db
- debug:
tags:
- dev
- db
- debug:
- name: Install MySQL Package
apt:
update_cache: true
name: mysql-server, python3-pymysql
state: present
when: ansible_facts['os_family'] == "Debian"
- name: Install MariabDB Package
yum:
name: mariadb-server, mariadb-client
state: present
when: ansible_facts['os_family'] == "RedHat"
- hosts: 192.168.200.101
tasks:
- name: block1
block:
- name: block - task1
debug:
msg: hello world
- name: block - task2
command: ls -w
- name: block - task3
debug:
msg: after failuer
rescue:
- name: rescue - task1
debug:
msg: rescue block
- name: rescue - task2
command: ls -w
- name: rescue - task3
debug:
msg: after fauluer
always:
- name: always - task1
debug:
msg: always run
- hosts: 192.168.200.101
tasks:
- name: long task
command: sleep 100
async: 120
poll: 0
register: comm_result
- name: 2nd task
debug:
msg: "hello world"
- name: 3rd task
debug:
msg: "{{ comm_result }}"
- name: sync
async_status:
jid: "{{ comm_result.ansible_job_id }}"
register: job_result
until: job_result.finished
retries: 100
delay: 5
- name: 4th task
debug:
msg: "{{ job_result }}"
- hosts: 192.168.200.101
tasks:
- debug:
tags:
- prod
- web
- debug:
tags:
- dev
- web
- debug:
tags:
- prod
- db
- debug:
tags:
- dev
- db
- debug:
1. Web(Wordpress), DB 플레이 분리
2. 아파치 포트 변경
/etc/apache/ports.conf
handlers
3. Debian 계열 및 RedHat 계열 작업 분리
조건문 사용
4. wordpress 소스 다운로드 비동기 방식 설정
'클라우드 > 앤서블(Ansible)' 카테고리의 다른 글
앤서블 Ansible 작업 제어 3 / 핸들러 (0) | 2021.08.03 |
---|---|
앤서블 Ansible 작업 제어 2 / 조건문 (0) | 2021.08.03 |
앤서블 Ansible 변수 (0) | 2021.07.29 |
앤서블 Ansible 플레이북 ( playbook ) / wordpress 삭제 구성하기 (0) | 2021.07.29 |
앤서블 Ansible 플레이북 ( playbook ) / wordpress 구성하기 2 (0) | 2021.07.29 |