ansible:handlers、meta、listen


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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值