简而言之, handlers 是特殊任务,只有在通过通知
指令启动时才能执行。
在 Ansible 中,处理器通常用于启动、重新加载、重新启动和停止服务. 如果播放簿涉及更改配置文件,则有可能需要重新启动服务,以便更改生效。
在 本系列的上一部分,您已经看到如何使用模板来替换默认的Nginx页面以自定义的HTML定位页面。在实践中,在设置您的Nginx网络服务器时,您最有可能将新服务器封锁文件添加到您的网站可用
目录中,创建象征链接,或更改需要重新加载或重新启动服务器的设置。
考虑到这样的场景,这就是重新启动 Nginx 服务的处理器的样子:
1...
2 handlers:
3 - name: Restart Nginx
4 service:
5 name: nginx
6 state: restarted
要触发此处理器,您需要在任何需要在 Nginx 服务器上重新启动的任务中包含一个通知
指令。
以下播放本使用内置的 Ansible 模块替换来替换 Nginx 配置文件中的默认文档根. 本模块基于 regexp
定义的正则表达式在文件中寻找模式,然后用 替换
定义的内容替换发现的任何匹配 。 然后,任务向`重新启动Nginx ' 处理者发出通知,以便尽快重新启动。 也就是说,你触发重启的次数并不重要, 只有当所有任务都已完成并且处理者开始运行时, 此外,当找不到匹配时,系统没有变化,因此没有触发处理器.
在您的ansible-practice
目录中创建一个名为playbook-12.yml
的新文件:
1nano ~/ansible-practice/playbook-12.yml
将下列行添加到新播放簿文件中:
1[label ansible-practice/playbook-12.yml]
2---
3- hosts: all
4 become: yes
5 vars:
6 page_title: My Second Landing Page
7 page_description: This is my second landing page description.
8 doc_root: /var/www/mypage
9
10 tasks:
11 - name: Install Nginx
12 apt:
13 name: nginx
14 state: latest
15
16 - name: Make sure new doc root exists
17 file:
18 path: "{{ doc_root }}"
19 state: directory
20 mode: '0755'
21
22 - name: Apply Page Template
23 template:
24 src: files/landing-page.html.j2
25 dest: "{{ doc_root }}/index.html"
26
27 - name: Replace document root on default Nginx configuration
28 replace:
29 path: /etc/nginx/sites-available/default
30 regexp: '(\s+)root /var/www/html;(\s+.*)?$'
31 replace: \g<1>root {{ doc_root }};\g<2>
32 notify: Restart Nginx
33
34 - name: Allow all access to tcp port 80
35 ufw:
36 rule: allow
37 port: '80'
38 proto: tcp
39
40 handlers:
41 - name: Restart Nginx
42 service:
43 name: nginx
44 state: restarted
保存并关闭文件,当你完成。
使用处理器时要记住的一件重要事情是,当定义通知
触发器的任务导致服务器发生变化时,它们才会触发。考虑到本图书,第一次运行更换
任务时,它会改变 Nginx 配置文件,从而重新启动。
请记住,如果运行此播放簿,请提供-K
选项,因为它需要sudo
权限:
1ansible-playbook -i inventory playbook-12.yml -u sammy -K
1[secondary_label Output]
2BECOME password:
3
4PLAY [all] **********************************************************************************************
5
6TASK [Gathering Facts] **********************************************************************************
7ok: [203.0.113.10]
8
9TASK [Install Nginx] ************************************************************************************
10ok: [203.0.113.10]
11
12TASK [Make sure new doc root exists] ********************************************************************
13changed: [203.0.113.10]
14
15TASK [Apply Page Template] ******************************************************************************
16changed: [203.0.113.10]
17
18TASK [Replace document root on default Nginx configuration] *********************************************
19changed: [203.0.113.10]
20
21TASK [Allow all access to tcp port 80] ******************************************************************
22ok: [203.0.113.10]
23
24RUNNING HANDLER [Restart Nginx] *************************************************************************
25changed: [203.0.113.10]
26
27PLAY RECAP **********************************************************************************************
28203.0.113.10 : ok=7 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
如果你看看输出,你会看到重新启动 Nginx
处理器在播放结束之前被执行. 如果你现在进入你的浏览器并访问服务器的IP地址,你会看到下面的页面:
在本系列的下一部分和最后一部分中,我们将连接所有点,并组建一个游戏簿,自动设置远程 Nginx 服务器来托管静态 HTML 网站。