반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- docker image
- lvcreate
- Kubernetes
- chmod
- M365필터
- yum
- 리다이렉션
- vagrant kubernetes
- ssh
- 날짜변경
- nmcli
- 프로세스
- 엑셀파일명변경
- pvcreate
- permission
- docker network
- tar
- 랜카드인식불량
- docker
- 같은폴더
- swapon
- ansible
- vgcreate
- chatGPT
- mount
- HTTPD
- newbingai
- MSBing
- journalctl
- firewalld
Archives
- Today
- Total
becool
20210803 (화) ansible 작업제어 #2 본문
반응형
9:33 review
작업제어
ignore_errors : true 태스크가 실패해도 다음 태스크를 수행함 (전역, 특정 task 지정 가능)
ignore_unreachable : true 특정 호스트가 응답이 없어도 태스크를 수행함.
force_handlers: true 진행 중 에러 발생시에도 handler를 실행하도록 설정
failed_when CONDITION : task 실패 조건 지정
changed_when CONDITION : changed 조건 지정
[user@ansible-server work]$ cat 0803_task_control.yaml --- - name: task control 1 hosts: all #ignore_errors: true tasks: - name: change hostname command: "hostnamectl set-hostname ansible-node" ignore_errors: true → 권한이 없어서 에러가 나더라도 다음 작업을 수행한다. 해당 설정은 전역적인 설정이 아니므로 세번째 /etc 위치에 디렉터리 생성 권한이 없는경우 4번째 fake.txt 파일 생성 작업은 수행되지 않는다. (전역적인 설정은 주석위치의 설정을 활성화하면 된다.) - name: create a file copy: content: "test file" dest: /tmp/testfile.txt - name: create a directory file: path: /etc/20210803_dir state: directory - name: create a file copy: content: "fake file" dest: /tmp/fake.txt [user@ansible-server work]$ cat 0803_task_control2.yaml --- - name: task control2 → 특정 호스트가 unreachable 상태여도 작업 수행. (skipped) hosts: all ignore_unreachable: true tasks: - name: check OS version command: cat /etc/centos-release register: result_os_ver - name: print OS version debug: msg: "{{ result_os_ver.stdout }}" - name: mark os version copy: content: "{{ result_os_ver.stdout }}" dest: /tmp/os_ver.txt [user@ansible-server work]$ cat 0803_task_control3.yaml --- - name: task control3 → vsf라는 잘못된 패키지이름으로 인해 에러가 발생해도 force_handlers를 통해 handler 수행을 강제함. (이 경우 아래의 ignore_errors로 대신할 수도 있음) hosts: all become: true force_handlers: true tasks: - name: Install package yum: name: tree state: latest notify: - do next task - name: mark play status shell: "echo 'play ended' > /tmp/play_status.txt" - name: cause errors yum: name: vsf state: latest # ignore_errors: true handlers: - name: do next task debug: msg: "Install package success!" [user@ansible-server work]$ [user@ansible-server work]$ cat 0803_task_control5.yaml --- - name: task control 5 → fail처리되는 조건을 변경하여 결과값을 true(성공)으로 반환 hosts: all tasks: - name: task failed command: "/bin/false" → result.rc를 1을 반환하는 명령어로 결과값을 fail로 처리함.(커맨드는 성공했으나 fail로 반환) register: result failed_when: result.changed == false → result.changed가 false이면 fail 처리 result.changed가 true면 결과도 true - name: print task result debug: msg: "{{ result }}" [user@ansible-server work]$ cat 0803_task_control6.yaml --- - name: task control 6 hosts: all → command, shell 모듈 등은 실패해도 change를 true로 반환할 수 있음. rc(return code)가 0이 아니면 실제로 task가 성공했다고 볼 수 없으므로 아래와 같이 작성시, 중복 실행시 changed = false 출력하게 됨. (이미 디렉터리가 만들어져 있는경우) tasks: - name: make a directory command: mkdir /tmp/20210803 register: result_dir changed_when: result_dir.rc == 0 ignore_errors: true - name: print result debug: msg: "{{ result_dir }}" |
플레이북 재사용을 위한 모듈
include 모듈
플레이, 작업, 역할, 변수 등을 포함할 수 있으며 동적으로 플레이북을 추가할 수 있음
이전 작업 내용의 영향을 받을 수 있음
모듈 실행 시 처리
import 모듈
플레이북, 역할, 작업을 가져올 수 있으며 정적으로 플레이북을 추가할 수 있음
이전 작업 내용의 영향을 받지 않음
플레이북 파싱시 전처리가 발생
#### include #1 #### [user@ansible-server 20210803]$ cat reuse.yaml → include_tasks 모듈을 이용하여 순서대로 실행 --- - name: reuse include 1 hosts: all tasks: - name: print task1 debug: msg: task1 - name: include task list in play include_tasks: tasks_include.yaml - name: print task10 debug: msg: task10 [user@ansible-server 20210803]$ cat tasks_include.yaml - name: print task2 debug: msg: task2 - name: print task3 debug: msg: task3 [user@ansible-server 20210803]$ ansible-playbook reuse.yaml PLAY [reuse include 1] ************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************* ok: [192.168.56.11] TASK [print task1] ***************************************************************************************************** ok: [192.168.56.11] => { "msg": "task1" } TASK [include task list in play] *************************************************************************************** included: /home/user/work/20210803/tasks_include.yaml for 192.168.56.11 TASK [print task2] ***************************************************************************************************** ok: [192.168.56.11] => { "msg": "task2" } TASK [print task3] ***************************************************************************************************** ok: [192.168.56.11] => { "msg": "task3" } TASK [print task10] **************************************************************************************************** ok: [192.168.56.11] => { "msg": "task10" } PLAY RECAP ************************************************************************************************************* 192.168.56.11 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
반응형
#### include #2 #### [user@ansible-server 20210803]$ cat reuse_include2.yaml → 설치/서비스 시작 플레이북을 각각 만들어두고 불러와서 실행 --- - name: Setup Hosts hosts: all become: true tasks: # install packages - name: include install include_tasks: tasks/include_packages.yaml # start service - name: include start include_tasks: tasks/include_service.yaml - name: playbook end debug: msg: playbook ended [user@ansible-server 20210803]$ cat tasks/include_packages.yaml - name: package1 yum: name: httpd state: latest - name: package1 yum: name: vsftpd state: latest [user@ansible-server 20210803]$ cat tasks/include_service.yaml - name: start httpd service service: name: httpd state: started enabled: true - name: start vsftp service service: name: vsftpd state: started enabled: true |
728x90
'ansible' 카테고리의 다른 글
20210804 (수) ansible 작업제어 #3 (0) | 2021.08.04 |
---|---|
20210803 (화) ansible-vault (0) | 2021.08.03 |
20210802 (월) ansible 작업제어 #1 (0) | 2021.08.02 |
20210730 (금) playbook 연습장 (0) | 2021.07.30 |
20210730 (금) ansible 조건문, 블록, 핸들러 (0) | 2021.07.30 |
Comments