Ansible playbook 编程( 四 )

 
该方法不一定适用于其他模块
 

Ansible playbook 编程

文章插图
 
 
触发器-handlers当我们修改了服务的配置文件时,这时我们需要去重启服务,那么 handlers 就可以派上用场了 。
注意事项:
1、无论多少个 task 通知了相同的 handlers,handlers 仅会在所有 tasks 结束后运行一次 。
2、只有 task 发生改变了才会通知 handlers,没有改变则不会通知和触发 handlers 。
3、不能用 handlers 替代 task。
1 [yun@ansi-manager object05]$ pwd 2 /app/ansible_info/object05 3 [yun@ansi-manager object05]$ ll 4 total 24 5 drwxrwxr-x 2 yun yun129 Aug 24 11:41 file 6 -rw-rw-r-- 1 yun yun 1029 Aug 24 11:57 test_handlers.yml 7 [yun@ansi-manager object05]$ ll file/# 涉及配置文件 8 total 20 9 -rw-r--r-- 1 yun yun 11767 Aug 24 11:41 httpd.conf.j210 [yun@ansi-manager object05]$ vim file/httpd.conf.j2# 配置文件修改的地方11 …………12 # Change this to Listen on specific IP addresses as shown below to 13 # prevent Apache from glomming onto all bound IP addresses.14 #15 #Listen 12.34.56.78:8016 ###### 端口改为变量17 Listen {{ httpd_port }}18 19 …………20 [yun@ansi-manager object05]$ cat test_handlers.yml# yml 文件21 ---22 # 比如安装配置启动 httpd 。当我们修改配置文件,重启 httpd 服务23 # 要求:修改配置,重启一个或多个服务24 - hosts: proxyservers25# 这里为了演示方便,因此变量直接就写在了该文件中26vars:27- httpd_port: 808128 29tasks:30- name: "Install httpd"31yum:32name: "{{ packages }}"33state: present34vars:35packages:36- httpd37- httpd-tools38 39- name: "Httpd config"40template:41src: ./file/httpd.conf.j242dest: /etc/httpd/conf/httpd.conf43# 一个通知44# notify: "Restart httpd server"45# 多个通知46notify:47- "Restart httpd server"48- "Restart crond server"49 50- name: "Start httpd server"51systemd:52name: httpd53state: started54enabled: yes55 56handlers:57- name: "Restart httpd server"58systemd:59name: httpd60state: restarted61 62- name: "Restart crond server"63systemd:64name: crond65state: restarted66 67 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key --syntax-check test_handlers.yml# 语法检测68 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key -C test_handlers.yml# 预执行,测试执行69 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_handlers.yml# 执行 
任务标签-tags默认情况下,当我们执行一个 playbook 时,会执行该 playbook 中所有的任务 。如果只想执行一个 task 或者部分 task 用于调试或者需求就是执行部分 task 。那么可以使用 ansible 的标签(tags)功能给单独 task 或者全部 task 打上标签 。之后利用这些标签来指定要运行哪些 playbook 任务,或不运行哪些 playbook 任务 。
打标签方式
对一个 task 打一个标签;
对一个 task 打多个标签;
对多个 task 打一个标签
标签如何运用
-t TAGS, --tags=TAGS:执行指定的 tag 标签任务;多个标签使用逗号分开
--skip-tags=SKIP_TAGS:跳过指定标签不执行,执行指定外的 task「标签作用于 task 上,即使该task还有其他标签,这个 task 也不会被执行」;多个标签使用逗号分开
1 [yun@ansi-manager object05]$ pwd 2 /app/ansible_info/object05 3 [yun@ansi-manager object05]$ ll 4 total 8 5 drwxrwxr-x 2 yun yun27 Oct 26 18:07 file 6 -rw-rw-r-- 1 yun yun 1004 Oct 26 19:21 test_tags.yml 7 [yun@ansi-manager object05]$ cat test_tags.yml8 --- 9 # tags 标签测试10 - hosts: proxyservers11# 这里为了演示方便,因此变量直接就写在了该文件中12vars:13- httpd_port: 808114 15tasks:16- name: "Install httpd"17yum:18name: "{{ packages }}"19state: present20vars:21packages:22- httpd23- httpd-tools24tags: 25- httpd_server26- httpd_install27 28- name: "Httpd config"29template:30src: ./file/httpd.conf.j231dest: /etc/httpd/conf/httpd.conf32notify: "Restart httpd server"33tags:34- httpd_server35- httpd_config36 37- name: "Start httpd server"38systemd:39name: httpd40state: started41enabled: yes42tags: 43- httpd_server44- httpd_start45 46- name: "Create dir"47file:48path: /tmp/with_items_testdir49state: directory50tags: create_dir51 52handlers:53- name: "Restart httpd server"54systemd:55name: httpd56state: restarted 
playbook 标签查看
1 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key --syntax-check test_tags.yml# 语法检测 2 ## 查看 playbook 中的任务和标签 3 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml --list-tasks45 playbook: test_tags.yml 67play #1 (proxyservers): proxyserversTAGS: [] 8tasks: 9Install httpdTAGS: [httpd_install, httpd_server]10Httpd configTAGS: [httpd_config, httpd_server]11Start httpd serverTAGS: [httpd_server, httpd_start]12Create dirTAGS: [create_dir]13 ## 查看 playbook 中的标签14 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml --list-tags15 16 playbook: test_tags.yml17 18play #1 (proxyservers): proxyserversTAGS: []19TASK TAGS: [create_dir, httpd_config, httpd_install, httpd_server, httpd_start]


推荐阅读