1.处理任务失败,用ignore_errors忽略,使任务继续执行
[root@afei weixin]# vim playbook.yml
---
- hosts: all
tasks:
- name: feige
yum:
name: feige
state: present
- name: feige
command: echo "nihao"
注:上述命令行任务中第一个是错误的,第二个是正确的,但不会执行第二个任务
[root@afei weixin]# ansible-playbook playbook.yml
PLAY [all] ****************************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.240.134]
TASK [feige] **************************************************************************
fatal: [192.168.240.134]: FAILED! => {"changed": false, "failures": ["No package feige available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []}
PLAY RECAP ****************************************************************************
192.168.240.134 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
注:此时想要执行第二个任务就必须跳过第一个错误任务
[root@afei weixin]# vim playbook.yml
---
- hosts: all
tasks:
- name: feige
yum:
name: feige
state: present
ignore_errors: yes
- name: feige
command: echo "nihao"
[root@afei weixin]# ansible-playbook playbook.yml
PLAY [all] ****************************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.240.134]
TASK [feige] **************************************************************************
fatal: [192.168.240.134]: FAILED! => {"changed": false, "failures": ["No package feige available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []}
...ignoring
TASK [feige] **************************************************************************
changed: [192.168.240.134]
PLAY RECAP ****************************************************************************
192.168.240.134 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
2.任务失败后强制执行处理程序force_handlers:yes
[root@afei weixin]# vim playbook.yml
---
- hosts: all
tasks:
- name: install
yum:
name: httpd
state: present
- name: config
template:
src: files/httpd.conf
dest: /etc/httpd/conf/httpd.conf
notify:
- restart apache
- name: service
service:
name: httpd
state: started
handlers:
- name: restart apache
service:
name: httpd
state: restarted
[root@afei weixin]# echo '#' >> files/httpd.conf
[root@afei weixin]# ansible-playbook playbook.yml
PLAY [all] ****************************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.240.134]
TASK [install] ************************************************************************
ok: [192.168.240.134]
TASK [config] *************************************************************************
changed: [192.168.240.134]
TASK [service] ************************************************************************
fatal: [192.168.240.134]: FAILED! => {"changed": false, "msg": "Unable to start service httpd: Job for httpd.service failed because the control process exited with error code.\nSee \"systemctl status httpd.service\" and \"journalctl -xe\" for details.\n"}
RUNNING HANDLER [restart apache] ******************************************************
PLAY RECAP ****************************************************************************
192.168.240.134 : ok=3 changed=1 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
注:只有当配置文件发生改变了才会执行handlers
3.关于是否需要报告changed,用changed_when False or True
[root@afei weixin]# vim playbook.yml
---
- hosts: all
tasks:
- name: feige
template:
src: files/abc
dest: /tmp/abc
changed_when: False
~
4.1.block:定义要运行的主要任务
4.2.rescue:当block中任务失败后定义需要运行的任务
4.3.always:定义始终都要独立运行的任务,不论block或者rescue成功还是失败
[root@afei weixin]# vim playbook.yml
---
- hosts: all
tasks:
- name: test
block:
- name: block
command: echo "block"
- name: failed feige
command: ls feige
rescue:
- name: rescue
command: echo "rescue"
always:
- name: always
command: echo "always"
[root@afei weixin]# ansible-playbook playbook.yml
PLAY [all] ****************************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.240.134]
TASK [block] **************************************************************************
changed: [192.168.240.134]
TASK [failed feige] *******************************************************************
fatal: [192.168.240.134]: FAILED! => {"changed": true, "cmd": ["ls", "feige"], "delta": "0:00:01.027637", "end": "2020-09-11 11:58:13.110908", "msg": "non-zero return code", "rc": 2, "start": "2020-09-11 11:58:12.083271", "stderr": "ls: cannot access 'feige': No such file or directory", "stderr_lines": ["ls: cannot access 'feige': No such file or directory"], "stdout": "", "stdout_lines": []}
TASK [rescue] *************************************************************************
changed: [192.168.240.134]
TASK [always] *************************************************************************
changed: [192.168.240.134]
PLAY RECAP ****************************************************************************
192.168.240.134 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=1 ignored=0
5.在被控制节点上创建文件或者目录
---
- hosts: all
tasks:
- name: feige
blockinfile:
path: /tmp/anaconda.log
block: |
first line.
second line.
[root@afei weixin]# ansible-playbook playbook.yml
PLAY [all] ****************************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.240.134]
TASK [feige] **************************************************************************
changed: [192.168.240.134]
PLAY RECAP ****************************************************************************
192.168.240.134 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@localhost ~]# cat /tmp/anaconda.log
00:31:20,611 WRN addons: Addon ADDON_placeholder doesn't have execute method!
# BEGIN ANSIBLE MANAGED BLOCK
first line.
second line.
# END ANSIBLE MANAGED BLOCK
5.1.copy和fetch的使用,copy是把主控制机上的文件复制到受管主机上,fetch则刚好相反