본문 바로가기

클라우드/앤서블(Ansible)

앤서블 Ansible 작업 제어 1 / 반복문

# 반복문

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 소스 다운로드 비동기 방식 설정