Ansible playbook 编程( 五 )

 
playbook 执行
1 ## 单个标签执行 2 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml -t httpd_install3 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml -t httpd_server 4 ## 多个标签执行 5 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml -t httpd_install,httpd_config,httpd_start 6 ## 跳过哪些标签不执行「标签作用于 task 上,即使该 task 还有其他标签,这个 task 也不会被执行」 7 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml --skip-tags httpd_server 8 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml --skip-tags httpd_install,create_dir 9 ## 执行整个 playbook 10 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_tags.yml 
文件引用/复用-include与import在实际应用中,是不可能将所有 task 写在一个 playbook 中的,需要进行拆分,方便后期重复使用 。这样后面写其他 playbook 的时候,如果有重复的,那么直接引用之前写的即可 。
Includes 与 Imports
1、include 和 import 虽然功能相近,但是 ansible 执行引擎对他们的处理却截然不同 。
2、所有 import* 语句都会在解析 playbook 时进行预处理 。「提前准备好工具」
3、所有 include* 语句都是在执行 playbook 时遇到再处理 。「需要什么工具,再拿什么工具」
PS:include 模块:这个模块还将支持一段时间,但在不久的将来可能会弃用「最好不要使用这个模块」 。
示例
1 [yun@ansi-manager object05]$ pwd 2 /app/ansible_info/object05 3 [yun@ansi-manager object05]$ ll 4 total 32 5 drwxrwxr-x 2 yun yun103 Aug 24 19:51 file_yml 6 -rw-rw-r-- 1 yun yun518 Aug 24 19:56 test_include.yml 7 [yun@ansi-manager object05]$ ll file_yml/ 8 total 16 9 -rw-rw-r-- 1 yun yun 136 Aug 24 19:51 httpd_config.yml10 -rw-rw-r-- 1 yun yun 133 Aug 24 19:41 httpd_install.yml11 -rw-rw-r-- 1 yun yun80 Aug 24 19:42 httpd_restart.yml12 -rw-rw-r-- 1 yun yun93 Aug 24 19:41 httpd_start.yml13 ## 每个小 yml 文件的具体内容14 [yun@ansi-manager object05]$ cat file_yml/httpd_install.yml 15 - name: "Install httpd"16yum:17name: "{{ packages }}"18state: present19vars:20packages:21- httpd22- httpd-tools23 24 [yun@ansi-manager object05]$ cat file_yml/httpd_config.yml 25 - name: "Httpd config"26template:27src: ./file/httpd.conf.j228dest: /etc/httpd/conf/httpd.conf29notify: "Restart httpd server"30 31 [yun@ansi-manager object05]$ cat file_yml/httpd_start.yml 32 - name: "Start httpd server"33systemd:34name: httpd35state: started36enabled: yes37 38 [yun@ansi-manager object05]$ cat file_yml/httpd_restart.yml 39 - name: "Restart httpd server"40systemd:41name: httpd42state: restarted43 44 ###### 主调用 yml 文件内容 ######45 [yun@ansi-manager object05]$ cat test_include.yml 46 ---47 # 调用其他 yml 文件48 - hosts: proxyservers49# 这里为了演示方便,因此变量直接就写在了该文件中50vars:51- httpd_port: 808352 53tasks:54- include_tasks: ./file_yml/httpd_install.yml55- include_tasks: ./file_yml/httpd_config.yml56- include_tasks: ./file_yml/httpd_start.yml57 58handlers:59# 使用 import 进行预处理,这样防止 notify 时,在 handlers 找不到对应的信息60- import_tasks: ./file_yml/httpd_restart.yml61 62 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key --syntax-check test_include.yml# 语法检测63 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key -C test_include.yml# 预执行,测试执行64 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_include.yml# 执行 
忽略错误-ignore_errors在 playbook 执行过程中,默认情况下如果有错误发生,那么后面的 task 就不执行,并且退出当前的 playbook 。
如果我们对某些 task 执行结果不关心,不管执行是否成功,后面的 task 也要继续执行 。那就需要通过 ignore_errors 来忽略当前 task 的错误结果,让后面的 task 继续往下执行 。
1 [yun@ansi-manager object05]$ pwd 2 /app/ansible_info/object05 3 [yun@ansi-manager object05]$ ll 4 total 36 5 -rw-rw-r-- 1 yun yun479 Aug 26 09:24 test_ignore_errors.yml 6 [yun@ansi-manager object05]$ cat test_ignore_errors.yml7 --- 8 # ignore_errors 测试 9 - hosts: proxyservers10 11tasks:12- name: "Install httpd"13yum:14name: "{{ packages }}"15state: present16vars:17packages:18- httpd19- httpd-tools20 21- name: "Shell false"22shell: /bin/false23# 是否忽略该 task 的错误 「打开或关闭注释,对比」24ignore_errors: True25 26- name: "Create dir"27file:28path: /tmp/with_items_testdir29state: directory30 31 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key --syntax-check test_ignore_errors.yml# 语法检测32 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key -C test_ignore_errors.yml# 预执行,测试执行33 [yun@ansi-manager object05]$ ansible-playbook -b -i ../hosts_key test_ignore_errors.yml# 执行


推荐阅读