Ansible触发器-tag标签-忽略错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Ansible触发器-tag标签-忽略错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7600字,纯文字阅读大概需要11分钟。
内容图文
![Ansible触发器-tag标签-忽略错误](/upload/InfoBanner/zyjiaocheng/1008/0087f9b2a26d407184c40196df89c075.jpg)
触发器 playbook handlers handler`用来执行某些条件下的任务,比如当配置文件发生变化的时候,通过notify触发handler去重启服务。 在saltstack中也有类似的触发器,写法相对Ansible简单,只需要watch,配置文件即可。 **大白话:**监控某一个步骤,
触发器
playbook handlers
handler`用来执行某些条件下的任务,比如当配置文件发生变化的时候,通过notify触发handler去重启服务。
在saltstack中也有类似的触发器,写法相对Ansible简单,只需要watch,配置文件即可。
大白话:监控某一个步骤,一旦该步骤发生了变化,则立马触发该步骤的触发器,执行对应的步骤
注意: 1.无论多少个task通知了相同的handlers,handlers仅会在所有tasks结束后运行一次。 2.Handlers只有在其所在的任务被执行时,才会被运行;如果一个任务中定义了notify调用Handlers,但是由于条件判断等原因,该任务未被执行,那么Handlers同样不会被执行。 3.Handlers只会在每一个play的末尾运行一次;如果想在一个playbook中间运行Handlers,则需要使用meta模块来实现。例如: -meta: flush_handlers。(不要强制执行) 4.如果一个play在运行到调用Handlers的语句之前失败了,那么这个Handlers将不会被执行。我们可以使用meta模块的--force-handlers选项来强制执行Handlers,即使Handlers所在的play中途运行失败也能执行。(不要强制执行) 5.不能使用handlers替代tasks
触发器的写法
- hosts: web01 task: - name: Push Nginx PHP Conf copy: src: "{{ item.src }}" dest: "{{ item.dest }}" with_items: - { src: "/ansible/web/nginx.conf",dest: "/etc/nginx/nginx.conf" } - { src: "/ansible/web/www.zls.com.conf",dest: "/etc/nginx/conf.d/www.zls.com.conf" } - { src: "/ansible/web/www.conf",dest: "/etc/php-fpm.d/www.conf" } when: ansible_fqdn is match 'web*' notify: Restart Nginx And PHP # 通过名字的方式来关联触发器,当配置文件有变化的时候,就会引发触发器 handlers: - name: Restart Nginx And PHP service: name: "{{ item }}" state: restarted with_items: - nginx - php-fpm 注意:tasks中的notify名字必须和handlers中的- name名字对应上,否则触发器和任务没有做任何关联
tag标签
默认情况下,Ansible在执行一个playbook时,会执行playbook中定义的所有任务,Ansible的标签(tag)功能可以给单独任务甚至整个playbook打上标签,然后利用这些标签来指定要运行playbook中的个别任务,或不执行指定的任务。
打标签的方式
1.对一个task打一个标签
我只想推送nginx的配置文件
- name: Push Nginx PHP Conf copy: src: "{{ item.src }}" dest: "{{ item.dest }}" with_items: - { src: "/ansible/web/nginx.conf",dest: "/etc/nginx/nginx.conf" } - { src: "/ansible/web/www.zls.com.conf",dest: "/etc/nginx/conf.d/www.zls.com.conf" } - { src: "/ansible/web/www.conf",dest: "/etc/php-fpm.d/www.conf" } when: ansible_fqdn is match 'web*' notify: Restart Nginx And PHP tags: config_nginx ## 运行: [root@m01 ansible]# ansible-playbook lnmp.yml -t config_nginx -t:运行指定的tag --skip-tags:跳过指定的tag
2.对一个task打多个标签
有一个功能任务,我安装nginx的时候需要创建www用户,安装nfs的时候,需要创建www用户,安装rsync的时候需要创建www用户
创建www用户这个功能,有多个任务都需要使用
tag: install_nginx
tag: install_nfs
tag: install_rsync
- name: Create {{ web_user_group }} Group group: name: "{{ web_user_group }}" gid: 666 state: present tags: - install_nginx - install_nfs - install_rsync [root@m01 ansible]# ansible-playbook lnmp.yml -t install_nginx - name: Push Nginx PHP Conf copy: src: "{{ item.src }}" dest: "{{ item.dest }}" with_items: - { src: "/ansible/web/nginx.conf",dest: "/etc/nginx/nginx.conf" } - { src: "/ansible/web/www.zls.com.conf",dest: "/etc/nginx/conf.d/www.zls.com.conf" } - { src: "/ansible/web/www.conf",dest: "/etc/php-fpm.d/www.conf" } when: ansible_fqdn is match 'web*' notify: Restart Nginx And PHP tags: - congfig_nginx - install_nginx
比如在只运行部署代码的步骤,需要创建www用户,只运行部署rsync的时候也需要创建www用户,这个时候就需要把创建www用户这个tasks加上多个标签。
3.对多个task打一个标签
我只想重新安装nginx
1.安装nginx
tag: install_nginx
2.配置nginx打一个标签
tag: install_nginx
- name: Unarchive Nginx and PHP unarchive: src: /ansible/web/nginx_php.tgz dest: /root when: ansible_fqdn is match 'web*' tags: install_nginx - name: Install Nginx and PHP yum: name: /root/nginx_php/{{ item }} state: present with_items: "{{ nginx_php_packages }}" when: ansible_fqdn is match 'web*' tags: install_nginx - name: Push Nginx PHP Conf copy: src: "{{ item.src }}" dest: "{{ item.dest }}" with_items: - { src: "/ansible/web/nginx.conf",dest: "/etc/nginx/nginx.conf" } - { src: "/ansible/web/www.zls.com.conf",dest: "/etc/nginx/conf.d/www.zls.com.conf" } - { src: "/ansible/web/www.conf",dest: "/etc/php-fpm.d/www.conf" } when: ansible_fqdn is match 'web*' notify: Restart Nginx And PHP tags: - congfig_nginx - install_nginx - name: Create HTML Dir file: path: /code owner: "{{ web_user_group }}" group: "{{ web_user_group }}" state: directory when: ansible_fqdn is match 'web*' tags: install_nginx - name: Unarchive WordPress Package unarchive: src: /ansible/web/wordpress.tgz dest: /code owner: "{{ web_user_group }}" group: "{{ web_user_group }}" when: ansible_fqdn is match 'web*' tags: install_nginx - name: Start Nginx Server service: name: "{{ item }}" state: started enabled: true with_items: - nginx - php-fpm when: ansible_fqdn is match 'web*' tags: install_nginx - name: Mount NFS Share Directory mount: path: /code/wordpress/wp-content/uploads src: 172.16.1.31:/{{ nfs_dir }} fstype: nfs state: mounted when: ansible_fqdn is match 'web*' tags: install_nginx ## 运行: [root@m01 ansible]# ansible-playbook lnmp.yml -t install_nginx -t:运行指定的tag --skip-tags:跳过指定的tag
比如我只想执行安装nginx的步骤,需要创建www用户、创建站点目录、加入防火墙规则等,把这些步骤打上统一标签,然后调用执行这样就可以只运行指定的相应的步骤及就可以了。
playbook的复用
只调用task:include_tasks
调用整个task文件:include
(新版本:import_playbook)
在saltstack中,叫做top file
入口文件。
示例一:
[root@m01 m01]# cat task.yml - hosts: web_group vars: - http_port: 8080 tasks: - include_tasks: task_install.yml - include_tasks: task_configure.yml - include_tasks: task_start.yml handlers: - name: Restart Httpd Server systemd: name: httpd state: restarted [root@m01 m01]# cat task_install.yml - name: Install Http Server yum: name: httpd state: present [root@m01 m01]# cat task_configure.yml - name: configure httpd server template: src: ./httpd.j2 dest: /etc/httpd/conf/httpd.conf notify: Restart Httpd Server [root@m01 m01]# cat task_start.yml - name: start httpd server service: name: httpd state: started enabled: yes
示例二
- include: httpd.yml - include: nfs.yml - include: rsync.yml
示例三
- import_playbook: httpd.yml - import_playbook: nfs.yml - import_playbook: rsync.yml
忽略错误
默认playbook会检测task执行的返回状态,如果遇到错误则会立即终止playbook的后续task执行,然而有些时候playbook即使执行错误了也要让其继续执行。
加入参数:ignore_errors:yes 忽略错误
[root@m01 ~]# cat ignore.yml - hosts: web_group tasks: - name: Ignore False command: /bin/false ignore_errors: yes - name: touch new file file: path: /tmp/zls.txt state: touch
内容总结
以上是互联网集市为您收集整理的Ansible触发器-tag标签-忽略错误全部内容,希望文章能够帮你解决Ansible触发器-tag标签-忽略错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。