首页 > 系统相关 >Linux架构29 ansible playbook任务标签, 复用文件, 忽略错误, 错误处理

Linux架构29 ansible playbook任务标签, 复用文件, 忽略错误, 错误处理

时间:2024-04-12 18:15:07浏览次数:13  
标签:name dest 29 nginx ansible playbook 错误处理 root yml

四、playbook任务标签

1.标签的作用

默认情况下,Ansible在执行一个playbook时,会执行playbook中定义的所有任务,Ansible的标签(tag)功能可以给单独任务甚至整个playbook打上标签,
然后利用这些标签来指定要运行playbook中的个别任务,或不执行指定的任务。

2.打标签的方式

1.对一个task打一个标签
2.对一个task打多个标签
3.对多个task打一个标签

3.标签配置

#对一个task打一个标签
- name: Config Nginx Server
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  with_items:
    - { src: "/root/nginx.conf", dest: "/etc/nginx/" }
    - { src: "/root/wordpress.conf", dest: "/etc/nginx/conf.d" }
  notify: restart_nginx        #触发器判断上面的文件是否发生改变
  tags: reload_nginx
  
  
  #对一个task打多个标签
  - name: Config Nginx Server
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  with_items:
    - { src: "/root/nginx.conf", dest: "/etc/nginx/" }
    - { src: "/root/wordpress.conf", dest: "/etc/nginx/conf.d" }
  notify: restart_nginx        #触发器判断上面的文件是否发生改变
  tags: 
    - reload_nginx
    - reconfig_nginx

#对多个name打一个标签
- name: Config Nginx Server
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  with_items:
    - { src: "/root/nginx.conf", dest: "/etc/nginx/" }
    - { src: "/root/wordpress.conf", dest: "/etc/nginx/conf.d" }
  notify: restart_nginx        #触发器判断上面的文件是否发生改变
  tags: 
    - reload_nginx
    - reconfig_nginx
    
- name: Tar PHP and Wordpress Package
  unarchive:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  with_items:
    - { src: "/root/php.tar.gz", dest: "/tmp/" }
    - { src: "/root/blog.tar.gz", dest: "/" }
  notify: restart_nginx
  tags: reload_nginx

4.标签使用方式

#查看所有的标签
[root@m01 web]# ansible-playbook lnmp.yml --list-tags
playbook: lnmp.yml
  play #1 (all): all    TAGS: []
      TASK TAGS: []
  play #2 (web01): web_01    TAGS: []
      TASK TAGS: [reload_nginx]
  play #3 (db01): db01    TAGS: []
      TASK TAGS: []
      
#指定标签执行name的内容
[root@m01 web]# ansible-playbook lnmp.yml -t reload_nginx

#指定多个标签执行name的内容
[root@m01 web]# ansible-playbook lnmp.yml -t reload_nginx

#指定多个标签执行name的内容
[root@m01 web]# ansible-playbook lnmp.yml -t reload_nginx,reconfig_nginx

#排除标签执行其他name (跳过标签名字为chown_dir)
[root@m01 web]# ansible-playbook lnmp.yml --skip-tags chown_dir

 

五、playbook复用

在之前写playbook的过程中,我们发现,写多个playbook没有办法一键执行,这样我们还要单个playbook挨个去执行,很鸡肋。
所以在playbook中有一个功能,叫做include用来动态调用task任务列表。

1.只调用task内容

[root@m01 web]# vim install_nginx.yml
- name: Install Nginx Server
  yum:
    name: nginx
    state: present
    
[root@m01 web]# vim config_nginx.yml
- name: Config Nginx
  copy:
    src: /root/wordpress.conf
    dest: /etc/nginx/conf.d/
  notify: reload_nginx
    
[root@m01 web]# vim main.yml
- hosts: web01
  tasks:    # 从上到下执行
    - include_tasks: ./install_nginx.yml
    - include_tasks: ./config_nginx.yml
    
  handlers:
    - name: reload_nginx
      systemed:
        name: nginx
        state: restarted

#执行
[root@m01 web]# ansible-playbook main.yml

2.直接调用写好的yml文件

[root@m01 web]# vim main.yml
- import_playbook: ./lnp.yml
- import_playbook: ./mariadb.yml

#执行
[root@m01 web]# ansible-playbook main.yml

 

六、playbook忽略错误

    - name: Get PHP Install Status
      shell: "rpm -qa | grep php"
      ignore_errors: yes    #获取状态,加上忽略错误(否则非0报错,不往下执行)
      register: get_php_install_status

    #调用变量结果,rc值不等于0时执行安装命令
    - name: Install PHP Server
      shell: "yum localinstall -y /tmp/*.rpm"
      when: get_php_install_status.rc != 0    #rc就是$?返回

 

七、playbook 错误处理

当task执行失败时,playbook将不再继续执行,包括如果在task中设置了handler也不会被执行。
但是我们可以采取强制措施...

1.强制调用handlers

如果在主机上的执行的任务失败时,则此任务对应的处理程序不再运行
此时可以通过force_handlers: yes实现,即使notify对应的响应任务执行失败,仍继续执行noftify对应的处理程序(即使任务失败了也要调用notify触发handlers)
force_handlers与tasks同层级
- name: httpd
  hosts: web
  force_handlers: yes
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
      notify:
        - start httpd
  handlers:
    - name: start httpd
      service:
        name: httpd
        state: started

 

2.一直change

#当被控端没有发生实际改变时,可以使用changed_when将状态强行变绿
- hosts: web01
  tasks:
    - name: Get PHP Install Status
      shell: "rpm -qa | grep php"
      ignore_errors: yes
      register: get_php_install_status
      changed_when: false    # 把状态黄色变为绿色

 

标签:name,dest,29,nginx,ansible,playbook,错误处理,root,yml
From: https://www.cnblogs.com/ludingchao/p/18131849

相关文章

  • PAN3029与SX1276接收灵敏度的测试对比
       2023年9月磐启微第二代ChirpIoT™系列芯片PAN3029发布至今已有半年了,不少企业都拿到了PAN3029的测试板。但由于缺乏充分的仪器,或测试方法问题无法准确的获得芯片在不同扩频因子下的灵敏度。因此由行业专家甘泉老师操刀测试PAN3029这款芯片性能后并录制成视频,供行业的企业......
  • ansible 添加用户
    hosts[centos-root]192.168.174.129ansible_ssh_port=22192.168.174.130ansible_ssh_port=22192.168.174.131ansible_ssh_port=22AnsibleVault文件创建AnsibleVault文件#ansible-vaultcreatepasswords.ymlNewVaultpassword:#12345......
  • ansible 通过密码登录主机
    hosts[centos-root]192.168.174.129ansible_ssh_port=22ansible_ssh_user=rootansible_ssh_pass=host1192.168.174.130ansible_ssh_port=22ansible_ssh_user=root192.168.174.131ansible_ssh_port=22ansible_ssh_user=rootAnsibleVault文件创建AnsibleVault......
  • Python中的错误处理 - 使用try、except、else和finally进行解释,并附带代码示例
    最近,我的经理委派我创建一个自动报告。我设计的报告非常简单。它包括一些来自数据库的数字和一些基本的数学运算。我很兴奋最终可以向公司展示我的惊人的Python技能。我完成并交付了产品。一切都很顺利。至少,直到大约两周后。我的报告由于除以零错误而随机失败了。来了个笑声轨道......
  • Robocopy是Windows操作系统中的一个命令行实用工具,用于在文件和目录之间进行复制。它
    robocopy/?-------------------------------------------------------------------------------  ROBOCOPY  ::  Windows的可靠文件复制------------------------------------------------------------------------------- 开始时间:2024年4月11日16:33:......
  • 洛谷题单指南-数学基础问题-P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
    原题链接:https://www.luogu.com.cn/problem/P1029题意解读:已知x,y,求有多少对p、q,使得p、q的最大公约数为x,最小公倍数为y。解题思路:枚举法即可。枚举的对象:枚举p,且p必须是x的倍数,还有p<=yq的计算:q=x*y/p,q要存在,必须x*y%p==0,且gcd(p,q)==x100分代码:#include......
  • ansible python API
    version:v2.9官方示例如下:点击查看代码#!/usr/bin/envpythonfrom__future__import(absolute_import,division,print_function)__metaclass__=typeimportjsonimportshutilimportansible.constantsasCfromansible.executor.task_queue_managerimportT......
  • pycharm安装ansible模块
    在pycharm中通过pipinstallansible==2.9时遇到报错:error:can'tcopy'lib\ansible\module_utils\ansible_release.py':doesn'texistornotaregularfile解决方法:Downloadthelatestzipreleaseversionfromgithub(e.g.https://github.com/ansib......
  • 自动化运维(十五)Ansible 实战之批量创建WEB服务器
        前面我们学习了一些Ansible模块的知识,从这一块篇开始我们进入到 Ansible实战内容的学习,我们会根据实际应用中的一些案例来演示这些模块的综合应用。现在我们有这么一个需求:在esxi虚拟机192.168.110.2上创建5台web服务器,web服务器配置为2核4G,50G硬盘,安装nginx服务......
  • 自动化运维工具Ansible
    ansible主要的意义在于可以提高运维工作效率,降低成本提高准确度资料 Ansible中文权威指南离线安装wgethttps://github.com/ansible/ansible/archive/refs/tags/v2.16.5.tar.gztar-zxvfv2.16.5.tar.gzcdansible-v2.16.5pythonsetup.pyinstall主要配置ansibl......