Ansible-05-Tags和Handlers
Posted shark_西瓜甜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible-05-Tags和Handlers相关的知识,希望对你有一定的参考价值。
一、Tags 标签
在一个 playbook 中可以给一部分 task(任务) 打标签,之后执行的时候使用 -t
选项并且指定具体的 tags 的名字,可以实现仅执行这部分 task。
- name: 测试变量
hosts: slb
gather_facts: no
tasks:
- name: 任务1
debug:
msg: "task 1"
tags: qf
- name: 任务2
debug:
msg: "task 2"
tags: qf
- name: 任务3
debug:
msg: "task 3"
不指定 Tags
[root@master ~]# ansible-playbook t.yml
PLAY [测试变量] ********************************************************************
TASK [任务1] *********************************************************************
ok: [192.168.122.26] => {
"msg": "task 1"
}
TASK [任务2] *********************************************************************
ok: [192.168.122.26] => {
"msg": "task 2"
}
TASK [任务3] *********************************************************************
ok: [192.168.122.26] => {
"msg": "task 3"
}
PLAY RECAP *********************************************************************
192.168.122.26 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@master ~]#
指定 Tags
[root@master ~]# ansible-playbook t.yml -t qf
PLAY [测试变量] ********************************************************************
TASK [任务1] *********************************************************************
ok: [192.168.122.26] => {
"msg": "task 1"
}
TASK [任务2] *********************************************************************
ok: [192.168.122.26] => {
"msg": "task 2"
}
PLAY RECAP *********************************************************************
192.168.122.26 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@master ~]#
二、 Handlers
在部署一个应用的时候,当应用的配置文件更新的时候,我们应该重启这个应用,以便让新的配置文件生效。
在 Ansisble 中可以使用 tasks.notify
和 handlers
属性进行组合,来实现当配置文件有更新,就自动触发另外一个任务的执行。
比如下面的示例就是当 a.conf
文件更新的时候,触发任务 echo hello
- name: 测试变量
hosts: slb
gather_facts: no
tasks:
- name: 复制文件到远程主机
copy: src=a.conf dest=/tmp/a.conf
notify: get hostname
handlers:
- name: get hostname
debug:
msg: "hello"
[root@master ~]# ansible-playbook t.yml
PLAY [测试变量] ********************************************************************
TASK [复制文件到远程主机] ***************************************************************
changed: [192.168.122.26]
RUNNING HANDLER [get hostname] *************************************************
ok: [192.168.122.26] => {
"msg": "hello"
}
PLAY RECAP *********************************************************************
192.168.122.26 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@master ~]# ansible-playbook t.yml
PLAY [测试变量] ********************************************************************
TASK [复制文件到远程主机] ***************************************************************
ok: [192.168.122.26]
PLAY RECAP *********************************************************************
192.168.122.26 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
接着在 Ansible 机器上修改 a.conf 文件的内容
echo 2 > a.conf
再次执行任务,可以看到触发了任务 get hostname
[root@master ~]# ansible-playbook t.yml
PLAY [测试变量] ********************************************************************
TASK [复制文件到远程主机] ***************************************************************
changed: [192.168.122.26]
RUNNING HANDLER [get hostname] *************************************************
ok: [192.168.122.26] => {
"msg": "hello"
}
PLAY RECAP *********************************************************************
192.168.122.26 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
以上是关于Ansible-05-Tags和Handlers的主要内容,如果未能解决你的问题,请参考以下文章
ansible-playbook 之handlers和notify
logging.handlers.SMTPHandler 引发 smtplib.SMTPAuthenticationError
AttributeError:“_UnixSelectorEventLoop”对象没有属性“_signal_handlers”