1. 修改httpd的80端口并重起httpd
实验一:
[root@server4 ~]# cat httpd.yml
---
- hosts: testB
remote_user: root
tasks:
- name: modify the configuration
lineinfile: # 修改端口号
path=/etc/httpd/conf/httpd.conf
regexp="Listen 80"
line="Listen 8088"
backrefs=yes
backup=yes
- name: restart httpd # 重起httpd
service:
name=httpd
state=restarted
[root@server4 ~]# ansible-playbook httpd.yml # 执行
lineinfile模块的backrefs参数:
backrefs参数:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes。backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,可以参考后面的示例命令理解。backrefs=yes除了能够开启向后引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变。
测试:
[root@server3 conf]# netstat -antlpe|grep httpd
tcp6 0 0 :::8088 :::* LISTEN 0 36709 1393/httpd
2. handlers
实验二:改进—当httpd.conf修改之后重起httpd,但是如果httpd.conf没有修改就不重起httpd
handlers关键字:当tasks中的任务执行之后handlers中的内容才会执行,handlers被tasks中的notify调用
[root@server4 ~]# cat httpd.yml
---
- hosts: testB
remote_user: root
tasks:
- name: modify the configuration
lineinfile:
path=/etc/httpd/conf/httpd.conf
regexp="Listen 80"
line="Listen 8088"
backrefs=yes
backup=yes
notify:
restart httpd
handlers:
- name: restart httpd
service:
name=httpd
state=restarted
测试:
[root@server4 ~]# ansible-playbook httpd.yml
PLAY [testB] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server3]
TASK [modify the configuration] ************************************************
ok: [server3]
PLAY RECAP *********************************************************************
server3 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
执行顺序:执行完tasks中的所有内容才会执行handlers中的内容,并且在执行handlers时,与notify的调用顺序无关,按照handlers的顺序执行
[root@server4 ~]# cat mkdir.yml
---
- hosts: testB
remote_user: root
tasks:
- name: make testfile1
file: path=/testdir/testfile1
state=directory
notify: ht1
- name: make testfile2
file: path=/testdir/testfile2
state=directory
notify: ht2
handlers:
- name: ht1
file: path=/testdir/ht1
state=touch
- name: ht2
file: path=/testdir/ht2
state=touch
# 测试:
[root@server4 ~]# ansible-playbook mkdir.yml
PLAY [testB] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server3]
TASK [make testfile1] **********************************************************
changed: [server3]
TASK [make testfile2] **********************************************************
changed: [server3]
RUNNING HANDLER [ht1] **********************************************************
changed: [server3]
RUNNING HANDLER [ht2] **********************************************************
changed: [server3]
PLAY RECAP *********************************************************************
server3 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@server4 ~]# cat mkdir.yml
---
- hosts: testB
remote_user: root
tasks:
- name: make testfile1
file: path=/testdir/testfile1
state=directory
notify: ht1
- name: make testfile2
file: path=/testdir/testfile2
state=directory
notify: ht2
handlers:
- name: ht2
file: path=/testdir/ht1
state=touch
- name: ht1
file: path=/testdir/ht2
state=touch
# 测试:
[root@server4 ~]# ansible-playbook mkdir.yml
PLAY [testB] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server3]
TASK [make testfile1] **********************************************************
changed: [server3]
TASK [make testfile2] **********************************************************
changed: [server3]
RUNNING HANDLER [ht2] **********************************************************
changed: [server3]
RUNNING HANDLER [ht1] **********************************************************
changed: [server3]
PLAY RECAP *********************************************************************
server3 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3. meta
meta:作用执行完一个task,接着执行位置对应的handlers1
[root@server4 ~]# cat mkdir.yml
---
- hosts: testB
remote_user: root
tasks:
- name: task1
file: path=/testdir/task1
state=touch
notify: ht1
- meta: flush_handlers
- name: task2
file: path=/testdir/task2
state=touch
notify: ht2
- meta: flush_handlers
handlers:
- name: ht2
file: path=/testdir/ht1
state=touch
- name: ht1
file: path=/testdir/ht2
state=touch
# 测试:
[root@server4 ~]# ansible-playbook mkdir.yml
PLAY [testB] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server3]
TASK [task1] *******************************************************************
changed: [server3]
RUNNING HANDLER [ht1] **********************************************************
changed: [server3]
TASK [task2] *******************************************************************
changed: [server3]
RUNNING HANDLER [ht2] **********************************************************
changed: [server3]
PLAY RECAP *********************************************************************
server3 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4. listen
执行完task1后执行多个handlers,引入listen对handlers分组
[root@server4 ~]# cat mkdir.yml
---
- hosts: testB
remote_user: root
tasks:
- name: task1
file: path=/testdir/task1
state=touch
notify: handler1
- meta: flush_handlers
- name: task2
file: path=/testdir/task2
state=touch
handlers:
- name: ht2
listen: handler1
file: path=/testdir/ht1
state=touch
- name: ht1
listen: handler1
file: path=/testdir/ht2
state=touch
[root@server4 ~]# ansible-playbook mkdir.yml
PLAY [testB] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server3]
TASK [task1] *******************************************************************
changed: [server3]
RUNNING HANDLER [ht2] **********************************************************
changed: [server3]
RUNNING HANDLER [ht1] **********************************************************
changed: [server3]
TASK [task2] *******************************************************************
changed: [server3]
PLAY RECAP *********************************************************************
server3 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0