一篇文章带你学会Anisble中的如何处理失败任务

news2024/11/15 19:54:25

目录

一、循环

1、简单循环

2、循环散列或字典列表

3、练习

二、条件

三、触发器

四、处理失败任务

1、ignore_errors

2、force_handlers

3、changed_when

4、failed_when

5、block

练习


一、循环

作用:循环迭代任务

1、简单循环

loop: ##赋值列表
- value1
- value2
- ...
{{item}} ##迭代变量名称

现在吧建立的东西删掉

2、循环散列或字典列表

如果现在建立的有文件有目录,就会涉及到字典或者是循环散列

loop:

  - ...

  - ...

创建成功

以上就是单层和使用字典方式书写多层 

3、练习

安装并在火墙中设定 开启vsftpd  apache  dns

1 安装服务 

2 开启服务

3 设置火墙

- name: setup vsftpd apache dns
  hosts: all
  vars:
    services:
      - name: vsftpd
        service: vsftpd
        firewall_name: ftp
      - name: httpd
        service: httpd
        firewall_name: http
      - name: bind
        service: named
        firewall_name: dns  
  tasks:
    - name: install service
      dnf:
        name: "{{item['name']}}"
        state: present
      loop:
        "{{services}}"  
      
    - name: start service
      service:
        name: "{{item['service']}}"
        state: started
        enabled: yes
      loop:
        "{{services}}"
    
    - name: setup firewalld
      firewalld: 
        service: "{{item['firewall_name']}}"
        state: enabled
        permanent: yes
        immediate: yes
      loop:
        "{{services}}"

二、条件

when:
     - 条件1
     - 条件2


#条件判断#
=                                         value == "字符串",value == 数字
<                                         value < 数字
>                                         value > 数字
<=                                       value <= 数字
>=                                       value >= 数字
!=                                        value != 数字
is defined                            value value is defined                 变量存在
is not defined                      value is not defined                     变量不存在
in                                         value is in value                          变量为
not in                                   value is not in value                    变量不为
bool变量 为true                   value                                           value的值为true
bool变量 false                     not value                                     value的值为false
                                            value in value2                            value的值在value2列表中

多条条件组合
when:
    条件1 and 条件2
    - 条件1
    - 条件2


when:条件1 or 条件2


when: >
    条件1
     or
     条件2

现在就是报错就终止运行 

当一个play出现问题其他全部终止
解决方法 :ignore_errors: yes即使出错也向下运行

即使报错依旧向下执行

现在判定文件是否存在 

正常执行了 

值设定了还是没设定 

刚才部署服务的实验

需求有些需要开启火墙有些不需要

变量值为 xxx

开启服务的我只想在20上运行

30成功被跳过 

如果是多个条件,使用列表

反选,就是not in 

是否为ture

或者的话就用条件1 or 条件2 

三、触发器

notify: 触发器当遇到更改是触发handlers
handlers: 触发器触发后执行的动作

使用超级用户来做

再次启动,配置什么都没有改变,但是会重启服务,这样不合理

配置文件没发生改变时不应该重启服务 ,触发器handlers和tasks一个级别

运行 

因为配置文件没有改变

触发器就没有触发

这回触发器就触发了 

handlers表示设定动作,notify表示如果哪个paly更改了服务器,就立即触发触发器中的指定动作,handlers下面也可以写很多动作

四、处理失败任务

1、ignore_errors

作用:
当play遇到任务失败是会终止
ignore_errors: yes 将会忽略任务失败使下面的任务继续运行

vim test.yml

2、force_handlers

作用:
当任务失败后play被终止也会调用触发器进程

更改states的状态保证下次配置文件一定更新 

3、changed_when

作用:
控制任务在何时报告它已进行更改 

changed_when: true强制play为更改状态

触发器每次都会触发 

强制不更改

4、failed_when

当符合条件时强制任务失败

ailed_when:ture 强制某个play为执行失败状态

不管上面成不成功,他都视为执行失败

yes这个值会默认取到true 

所以改为westos,为westos时执行失败

不会报错 

5、block

block:                 ##定义要运行的任务
rescue:               ##定义当block句子中出现失败任务后运行的任务
always:            ##定义最终独立运行的任务 

改成正常的 

正常运行rescue中的动作就被忽略了 

练习

1、

把/dev/cdrom挂载到/mnt/isodir

检测/mnt/isodir是否存在

如果不存在 not exist 输出:/mnt/isodir is not exist

创建 create isodir

如果存在就直接挂载

- name: mount /dev/cdom play
  hosts: all
  tasks:
    - block:
        - name: check mount point
          shell: test -e "/mnt/isodir"
      rescue:
        - name: show message
          debug:
            msg: /mnt/isodir is not exist
        - name: create mount point
          file:
            path: /mnt/isodir
            state: diretctory
      always:
        - name: mount cdrom
          mount: 
            path: /mnt/isodir
            src: /dev/cdrom
            fstype: iso9660
            state: mounted

2、

建立playbook ~/westos.yml要求如下:
建立大小为1500M名为/dev/vdb1的设备
如果/dev/vdb不存在请输入:
/dev/vdb is not exist
如果/dev/vdb大小不足2G请输出:
/dev/vdb is less then 2G
并建立800M大小的/dev/vdb1
此设备挂载到/westos上

首先需要先添加一块硬盘,大小1G,存在nodea地址,这一台主机就有两块硬盘了

  1 - name: setup storage
  2   hosts: all
  3   tasks:
  4     - name: create storage device
  5       block:
  6         - name: chreate 1500M device
  7           parted:
  8             device: /dev/sdb
  9             number: 1
 10             state: present
 11             part_end: 1500MiB
 12           when: ansible_facts['devices']['sdb'] is defined
 13       rescue:
 14         - name: create 800M device
 15           parted:
 16             device: /dev/sdb
 17             number: 1
 18             state: present
 19             part_end: 800MiB
 20           when: ansible_facts['devices']['sdb'] is defined
 21 
 22         - name: show 800M device messages
 23           debug:
 24             msg: /dev/sdb is less then 2G
 25           when: ansible_facts['devices']['sdb'] is defined
 26       always:
 27         - name: create westos dir
 28           file:
 29             name: /westos
 30             state: directory
 31           when: ansbile_facts['devices']['sdb'] is defined
 32         - name: create filesystem for device
 33           filesystem:
 34             fstype: xfs
 35             dev: /dev/sdb1
 36           when: ansbile_facts['devices']['sdb'] is defined
 37         - name: mount device
 38           mount:
 39             path: /westos
 40             src: /dev/sdb1
 41             fstype: xfs
 42             state: mounted
 43           when: ansbile_facts['devices']['sdb'] is defined
 44     - name: then /dev/sdb is not found
 45       debug:
 46         msg: /dev/sdb is not exist
 47       when: ansbile_facts['devices']['sdb'] is defined

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[软件工程导论(第六版)]第4章 形式化说明技术(复习笔记)

文章目录4.1 概述4.2 有穷状态机4.3 Petri网4.4 Z语言按照形式化程度&#xff0c;可以把软件工程使用的方法划分成非形式化、半形式化、形式化三类非形式化方法&#xff1a;使用自然语言描述需求规格说明半形式化方法&#xff1a;使用数据流图或实体-联系图建立模型形式化方法&…

P2P视频聊天技术分析

整个P2P视频过程需要知道双方的媒体类型、流和候选者&#xff0c;所以这里就会用到一下技术&#xff1a; ​ 信令服务器socket.io ​ 状态机 ​ ICE服务器 ​ WebRTC框架 ​ 媒体协商 信令服务器Socket.io 信令服务器说白了作用就是发消息的中转站&#xff0c;A把msg发到…

网络流与图(二)

上一节我们讲到了退化圈方向搜索算法&#xff0c;它能得到全局最优解。然而算法运行过程中需要选择一个可行改进圈方向&#xff0c;对于一个大型网络流来说&#xff0c;这并非容易的。我们需要找到在每次循环中确认可行改进圈方向或者证明不存在的方法。我们现在就来探讨这个问…

Andriod入门级开发

这学期有个课设&#xff0c;我们组我负责一个手机APP的开发&#xff0c;虽然刚开始说要实现什么智能导航&#xff0c;类似高德地图那种&#xff0c;但最后阉割的只剩一个Socket通信了&#xff0c;因为之前没有接触过&#xff08;可能之后也不会再接触&#xff09;&#xff0c;记…

【数据管理】谈谈哈希原理和散列表

一、说明 提起哈希&#xff0c;有人要说&#xff1a;不就是一个稀疏表格么&#xff0c;谈的上什么原理&#xff1f;我说&#xff1a;非也&#xff0c;哈希是是那种看似无物&#xff0c;其实解决大问题的东西。如何提高数据管理效率&#xff1f;这是个问题&#xff0c;随着这个问…

测试2:编写测试用例的方法

2.编写测试用例的方法 7种 测试常用的方法&#xff1a;code review 代码静态分析、CI/CD CI–持续集成–开发成员经常集成它们的工作&#xff0c;尽快发现集成错误 CD–持续部署–将集成后的代码部署到更贴近真实运行的环境 2.1 测试用例的描述&#xff1a; 用例编号 用例…

Python纯Numpy手撕SGD

文章目录简介问题建模数据加载和预处理数据加载预处理分batch损失函数训练运行简介 本博客用多元线性回归展示如何从零实现一个随机梯度下降SGD, 不使用torch等AI框架 问题建模 给定一个数据集X∈RN(D1)\large X \in \R^{N \times (D1)}X∈RN(D1)和对应标签向量Y∈RN\large …

centos7防火墙工具firewall-cmd使用

centos7防火墙工具firewall-cmd使用防火墙概述centos7防火墙工具firewall-cmd使用介绍firewalld的基本使用服务管理工具相关指令配置firewalld-cmd防火墙概述 防火墙是可以帮助计算机在内部网络和外部网络之间构建一道相对隔绝的保护屏障&#xff0c;从而保护数据信息的一种技…

Vulnhub 渗透练习(七)—— FRISTILEAKS: 1.3

环境搭建 下载链接 virtualbox 打开靶机设置为 host-only&#xff0c;攻击机同样。 具体可点此处 信息收集 开了个 80 端口。 用的是 apache 2.2.15 &#xff0c;这个版本有个解析漏洞。 目录 根据首页的图片猜测 /fristi/ 目录&#xff08;不过我没想到 -_-&#x…

由浅入深掌握各种 Python multiprocessing 进程间通信方式

由浅入深掌握各种 Python 多进程间通信方式1、为什么要掌握进程间通信2、进程间各类通信方式简介3、消息机制通信1) 管道 Pipe 通信方式2) 消息队列Queue 通信方式4、同步机制通信(1) 进程间同步锁 – Lock(2) 子进程间协调机制 -- Event5、共享内存方式通信(1) 共享变量(2) 共…

【Python】控制自己的手机摄像头拍照,并自动发送到邮箱

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 今天这个案例&#xff0c;就是控制自己的摄像头拍照&#xff0c; 并且把拍下来的照片&#xff0c;通过邮件发到自己的邮箱里。 想完成今天的这个案例&#xff0c;只要记住一个重点&#xff1a;你需要一个摄像头 思路…

Android 7.0 OTA升级(高通)

文章目录1. Full OTA 方式升级介绍1.1 Full OTA 制作第一步&#xff1a;生成 msm89xx-target_files-eng.XXX.zip1.2 Full OTA 制作第二步&#xff1a;Modem 等非 HLOS 加入升级包的方法1.3 Full OTA 制作第三步&#xff1a;生成 update.zip 升级包2. Incremental OTA 方式升级介…

Android 基础知识4-2.6LinearLayout(线性布局)

一、LinearLayout的概述 线性布局&#xff08;LinearLayout&#xff09;主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中&#xff0c;如果水平排列&#xff0c;垂直方向上只能放一个控件&#xff0c;如果垂直排列&#xff0c;水平方向上也只能…

Java基础-xml

1.xml 1.1概述 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为止&#…

python基础语法【自用】

✨始发站&#x1f6a9;Python的基础语法&#xff0c;冲冲冲&#xff01; &#x1f6a9;注&#xff1a;本篇为python基础语法篇&#xff0c;因博主之前使用java&#xff0c;所以本基础语法篇实为自用丐版&#xff01; &#x1f332; 你好&#xff0c;世界&#xff01; 安装环境…

虚拟机快照

1. 快照有什么作用&#xff1f; 通俗理解&#xff1a;快照就是备份。 2. VMware Workstation 和 VMware Fusion 都支持制作快照去使用 一、快照 保存当前虚拟机状态。可以恢复 二、 在VMware Workstation Pro中制作并还原快照 三、在VMware Fusion Pro中制作并还原快照 快照制…

210天从外包踏进华为跳动那一刻,我泪目了

前言 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2021年4月&#xff0c;我有幸成为了华为的一名高级测试工程师&#xff0c;正如标题所…

【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 接口测试&#xff0…

美团前端一面手写面试题

实现斐波那契数列 // 递归 function fn (n){if(n0) return 0if(n1) return 1return fn(n-2)fn(n-1) } // 优化 function fibonacci2(n) {const arr [1, 1, 2];const arrLen arr.length;if (n < arrLen) {return arr[n];}for (let i arrLen; i < n; i) {arr.push(arr[…

vulnhub Kioptrix4

总结&#xff1a;sql注入&#xff0c;受限shell绕过&#xff0c;mysql提权 目录 下载地址 漏洞分析 信息收集 sql注入 ssh登录绕过受限shell 提权 下载地址 Kioptrix4_Hyper_v.rar (Size: 210 MB)Download: http://www.kioptrix.com/dlvm/Kioptrix4_Hyper_v.rarDownload …