RedHat9 | Ansible 处理任务失败

环境版本说明

  • RedHat9 [Red Hat Enterprise Linux release 9.0]
  • Ansible [core 2.13.3]
  • Python [3.9.10]
  • jinja [3.1.2]

1. 忽略任务失败

  • Ansible评估各任务的返回代码,从而确定任务是成功还是失败
  • 通常而言,当任务失败时,Ansible将立即在该主机上终止play的其余部分并且跳过所有后续任务
  • 通常洗完遇到任务失败时,仍能继续执行Play
  • 忽略任务失败

在serverb上安装discuz软件包,然后创建目录,因为源中默认不存在discuz软件包,所以会报错

[Step1]:编写playbook

vim ignore_errors.yml # 写入下列内容
---
- name: play1hosts: serverbtasks:- name: Install the latest version of Discuzansible.builtin.yum:name: discuzstate: latest- name: Create Diransible.builtin.shell:cmd: mkdir /discuz

[Step2]:验证playbook语法

ansible-navigator run ignore_errors.yml -m stdout --syntax-check

在这里插入图片描述

[Step3]:运行playbook,没有处理任务失败,在失败后会直接暂停执行

ansible-navigator run ignore_errors.yml -m stdout

在这里插入图片描述

[Step4]:验证:查看serverb上是否新建目录

ssh root@serverb "ls -l / | grep discuz"

在这里插入图片描述

[Step5]:在playbook中添加忽略任务失败语句

vim ignore_errors.yml # 写入下列内容
---
- name: play1hosts: serverbtasks:- name: Install the latest version of Discuzansible.builtin.yum:name: discuzstate: latestignore_errors: yes		# 忽略失败任务- name: Create Diransible.builtin.shell:cmd: mkdir /discuz

在这里插入图片描述

[Step6]:验证:查看serverb上是否新建目录

ssh root@serverb "ls -l / | grep discuz"

在这里插入图片描述

2. 任务失败后强制执行处理程序

在通常情况下,如果任务失败会导致Play中止,如果在Play中的设置 force_handlers: yes关键字,即使Play 因为后续任务失败而中止,也会调用被预先定义的处理程序(handlers中预先定义的模块)。

如果给任务中的Play设置了ignore_errors: yes,则任务失败时,还是会忽略任务失败,就算在后面设置了force_handlers: no,Play和处理程序还是会保持运行,除非有其它任务导致Play失败。

处理程序在任务报告changed结果时获得通知,在任务报告ok或failed结果时不会获得通知。如果在Play上设置了force_handlers: yes,即使后续任务失败导致Play失败,也会运行预定义的处理程序。否则,当Play失败时,处理程序完全不会运行。

在Play上设置force_handlers: yes不会使任务报告 ok 或 failed 而获得通知;而只会使 Play 失败已获得通知的处理程序运行。

[Step1]:编写playbook

vim force_handlers.yml# 写入下列内容
---
- name: play1hosts: serverbforce_handlers: yes		# 在任务是失败时强制执行处理程序tasks:- name: Restart service httpd, in all casesansible.builtin.service:name: httpdstate: restarted- name: Install the latest version of notapkgansible.builtin.dnf:name: notapkgstate: latesthandlers:					# 失败时强制执行- name: Restart service httpd, in all casesansible.builtin.service:name: httpdstate: restarted

[Step2]:验证playbook语法

ansible-navigator run force_handlers.yml -m stdout --syntax-check

在这里插入图片描述

[Step3]:运行playbook

ansible-navigator run force_handlers.yml -m stdout

3. Ansible块和错误处理

  • Block:定义要运行的主要任务
  • Rescue:定义在block子句中定义的任务失败时运行的任务
  • Always:定义始终都在独立运行的任务

在这里插入图片描述

3.1 Block

Block可以理解为是一个区域,多个模块都使用相同的条件语句,可以放置在同一个Block下。

原Playbook:在serverb上新建文件和新用户

---
- name: blcokhosts: alltasks:- name: touch file			# 在serverb上新建block.txt文件ansible.builtin.shell:cmd: touch block.txtwhen: inventory_hostname == "serverb"- name: Add the user 'block'	# 在serverb上新建用户 blockansible.builtin.user:name: blockwhen: inventory_hostname == "serverb"

使用block后Playbook:减少when条件语句

---
- name: blcokhosts: alltasks:- block:			# 概念类似组,when条件针对block组内用户生效- name: touch fileansible.builtin.shell: touch block.txt- name: Add the user 'block'ansible.builtin.user:name: blockwhen: inventory_hostname == "serverb"

在这里插入图片描述

验证:查看文件和创建的用户

ssh root@serverb "ls -l;tail -n 1 /etc/passwd"

在这里插入图片描述

3.2 rescue和always

可以将Block理解为IF语句,然后rescue理解为else语句,当Block满足则运行Block,不满足则运行rescue。不管是否满足Block还是rescue,都执行always。

如果在serverc上可以安装http软件包则安装,否则安装httpd软件包,无论软件包是否安装都关闭serverc防火墙

在这里插入图片描述

[Step1]:编写playbook

vim always.yml# 写入下列内容
---
- name: play1hosts: alltasks:- block:- name: Install the latest version of httpansible.builtin.dnf:		# 安装http软件包name: httpstate: latestrescue:- name: Install the latest version of httpdansible.builtin.dnf:		# 安装httpd软件包name: httpdstate: latestwhen: inventory_hostname == "serverc"	# 限定主机为servercalways:		# always的对象是上面的when条件语句- name: Stop service firewalld, if startedansible.builtin.service:				# 关闭防火墙name: firewalldstate: stopped

[Step2]:验证playbook语法

ansible-navigator run always.yml -m stdout --syntax-check

在这里插入图片描述

[Step3]:运行playbook

ansible-navigator run always.yml -m stdout

在这里插入图片描述

[Step4]:验证:查看serverc上的防火墙和软件包安装情况

ansible serverc -m shell -a 'rpm -qa | grep httpd'
ansible serverc -m shell -a 'systemctl status h'

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可以免费合并pdf的软件 合并pdf文件的软件免费 合并pdf的软件免费

在数字化办公的今天,pdf格式因其稳定性和跨平台兼容性被广泛使用。然而,当我们需要将多个 pdf 文件合并为一个时,却往往感到力不从心。本文将为你介绍几款强大的pdf文件合并软件,让你轻松管理文档。 方法一、使用pdf转换器 步骤1…

爬虫 APP 逆向 ---> 粉笔考研

环境: 粉笔考研 v6.3.15:https://www.wandoujia.com/apps/1220941/history_v6031500雷电9 模拟器:https://www.ldmnq.com/安装 magisk:https://blog.csdn.net/Ruaki/article/details/135580772安装 Dia 插件 (作用:禁…

后端开发刷题 | 笔试

Linux 中,下面哪个选项不是 inode 中记录的数据() A 最后一次读取时间 B 最近修改的时间 C 该文件的实际内容 D 该文件的容量 正确答案:C 解析:储存文件的元信息,比如文件的创建者、文件的创建日期、文件的…

MySQL-视图、存储过程和触发器

一、视图的定义和使用 视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表,视图只能用来查询。不能做增删改查(虚拟的表) 1.视图的作用 简化查询重写格式化数据频繁访问数据库过滤数据 2.创建视图 -- 创建视图 -- 语法…

【MATLAB APP】建立独立桌面APP

背景:已有MATLAB APP的.mlapp文件,但客户提出需要可以直接使用的exe文件。 要求:点开即用,无需下载MATLAB。使用者无法修改APP的代码。 一、环境配置 APP创建者:安装MATLAB R2023a,配置Application Compile…

【开源库编译 | zlib】 zlib库最新版本(zlib-1.3.1)在Ubuntu(Linux)系统下的 编译 、交叉编译(移植)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

通信原理-实验六:实验测验

实验六 实验测验 一:测验内容和要求 测试需要完成以下几个步骤: 配置好以下网络图;占总分10%(缺少一个扣一分)根据下面图配置好对应的IP和网关以及路由等相关配置,保证设备之间连通正常;占总…

【学一点儿前端】本地或jenkins打包报错:getaddrinfo ENOTFOUND registry.nlark.com.

问题 今天jenkins打包一个项目,发现报错了 error An unexpected error occurred: "https://registry.nlark.com/xxxxxxxxxx.tgz: getaddrinfo ENOTFOUND registry.nlark.com". 先写解决方案 把yarn.lock文件里面的registry.nlark.com替换为registry.npmmi…

【计算机网络】期末实验答辩

注意事项: 1)每位同学要在下面做过的实验列表中选取三个实验进行答辩准备,并将自己的姓名,学号以及三个实验序号填入共享文档"1(2)班答辩名单"中。 2)在答辩当日每位同学由老师在表…

【React】事件绑定:深入解析高效处理用户交互的最佳实践

文章目录 一、什么是事件绑定?二、基本事件绑定三、绑定 this 上下文四、传递参数五、事件对象六、事件委托七、常见事件处理八、优化事件处理 React 是现代前端开发中最受欢迎的框架之一,其组件化和高效的状态管理能力使得构建复杂的用户界面变得更加容…

**卷积神经网络典型CNN**

SeNet SeNet(Squeeze-and-Excitation Networks)是ImageNet 2017年分类任务冠军,核心思想是:Squeeze(挤压、压缩)和Excitation(激励)两个操作,其主要目的是通过显示的构建特征通道之间的相互依赖关系,采用特征重定向的策略&#x…

光明乳业:以科技赋能品质,引领乳业绿色新未来

近日,光明乳业再次成为行业焦点,其在科技创新与绿色发展方面的卓越表现赢得了广泛赞誉。作为中国乳制品行业的领军企业,光明乳业始终坚守品质至上的原则,不断探索科技创新之路,致力于为消费者提供更高品质、更健康的乳…

webStorm 实时模板笔记

文章目录 1、单斜杠效果 2、双斜杠效果 3、控制台打印效果 1、单斜杠 /** $END$ */效果 2、双斜杠 /*** $END$* author Ikun* since $DATE$ $TIME$ */DATE date() ✔ TIME time() ✔效果 3、控制台打印 console.log("███████$EXPR_COPY$>>>>&a…

Internxt:适用于Linux开源安全云存储平台

有无数的云存储平台为您的文件提供安全可靠的存储空间。可在 Linux 上安装的热门云存储应用程序包括Dropbox、Nextcloud和Google Drive,遗憾的是,后者迄今为止不提供 Linux 客户端。 其他自托管选项包括OwnCloud、Pydio Cells、Seafile、Resilio和Synct…

暑期C++ printf和scanf的平替

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 C中也有专门的输入和输出的方法 首先我们需要一个头文件&#xff0c;也就是#include<iostream> 然后根据我们命名空间的知识可知这个地方如果我们要使用必须先展开 可以全部展开比如using namespa…

Godot入门 04平台设计

新建创景&#xff0c;添加AnimatableBody2D节点。 添加Sprite2D节点 拖动图片 剪裁图片&#xff0c;吸附模式&#xff1a;像素吸附 添加CollisionShape2D&#xff0c;设置实际形状为矩形 重命名AnimatableBody2D节点为Platform&#xff0c;保存场景&#xff0c;拖动platform场景…

pikachu靶场之目录遍历、敏感信息泄露

一、目录遍历 漏洞概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称)传递到后台&#xff0c;后台再执行其对应的文件。 在这个过…

VSCode切换默认终端

我的VSCode默认终端为PowerShell&#xff0c;每次新建都会自动打开PowerShell。但是我想让每次都变为cmd&#xff0c;也就是Command Prompt 更改默认终端的操作方法如下&#xff1a; 键盘调出命令面板&#xff08;CtrlShiftP&#xff09;中,输入Terminal: Select Default Prof…

C++程序的UI界面闪烁问题的解决办法总结

Windows C++程序复杂的UI界面要使用多种绘图技术(使用GDI、GDI+、ddraw、D3D等绘图),并要贴图去美化,在窗口移动或者改变大小的时候可能会出现闪烁。下面罗列一下UI界面产生闪烁的几种可能的原因,并给出相应的解决办法。 1、原因一 如果熟悉显卡原理的话,调用GDI函数向屏…

重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景

7月24日&#xff0c;“智动新生&#xff0c;尽在掌控”2024萤石夏季新品发布会在杭州举办。来自全国各地的萤石合作伙伴、行业从业者及相关媒体&#xff0c;共聚杭州&#xff0c;共同见证拥抱AI的萤石&#xff0c;将如何全新升级&#xff0c;AI加持下的智慧生活又有何不同。 发…