Ansible(8)——循环与条件任务

目录

一、循环迭代任务:

1、简单循环:

2、循环字典列表:

3、Ansible 2.5 之前的循环关键字:

4、在循环中使用 register 变量:

二、条件任务:

1、使用条件句的常见场景:

2、条件任务语法:

(1)when 语句:

(2)常见条件运算:

3、测试多个条件:

三、组合使用循环与条件任务:


一、循环迭代任务:

        使用循环使得管理员不必编写使用同一模块的多个任务。Ansible 支持使用 loop 关键字在一组项目上迭代任务

1、简单循环:

        一个简单循环一个项目( items )列表上迭代一个任务。task 中添加 loop 关键字,并将 items 列表进行迭代,其中循环变量 item 保存每次迭代期间使用的值。

        此外,loop 列表也可以使用变量表示。例如,下图中的 mail_services 变量包含了需运行服务的列表。

注:有关变量的内容在 Ansible(6)——管理变量中有详细说明,转跳链接如下:https://blog.csdn.net/m0_68756914/article/details/147026308

2、循环字典列表:

        循环列表不一定是简单值列表

        以下图中内容为例,当列表的每个项是字典时,任务的结果是 jane 用户存在且为组 wheel 的成员,joe 用户也存在且为组 root 的成员。

注:上图中的每个字典均有两个键: name 与 groups ,这两个键的值可以分别通过 item['name'] 与 item['groups'] 变量进行检索。

3、Ansible 2.5 之前的循环关键字:

        在 Ansible 2.5 之前,playbook 使用前缀为 with_ 的不同 loop 关键字,这可能在将来的某个时间节点被取消。

注:Ansible 2.5 以前的任何表示方法,均可以用 loop 替代

 循环关键字    描述
with_items

 其行为与简单列表的 loop 关键字相同,但其提供的列表将被扁平化为单极列表

(注:item 循环变量会保存每次迭代过程中使用的列表项)

with_file

 需要控制节点文件名列表

(注:item 循环变量会在每次迭代过程中保存文件列表内相应文件的内容)

with_sequence

 需要参数以根据数字序列生成值列表

(注:item 循环变量在每次迭代过程中都会保留生成序列中某个生成项的值)

4、在循环中使用 register 变量:

        register 关键字可用于输出循环任务结果

二、条件任务:

        Ansible 可以利用条件语句在符合特定条件时执行任务,管理员可利用条件语句来区分不同的受管主机,并根据它们所符合的条件来分配功能角色 。此外,Playbook 变量、注册的变量和 Ansible 事实也都可通过条件语句来进行测试,可以使用字符串比较、数学运算符和布尔运算等各种运算符。

1、使用条件语句的常见场景:

(1)在变量中定义硬限制(如 min_memory )并将它受管主机上的可用内存进行比较

(2)Ansible 捕获命令输出,以确定某一任务在执行进一步操作前是否已经完成。例如,若某一程序运行失败,则需要跳过批处理;

(3)利用 Ansible 事实来确定受管主机的网络配置,并且决定要发送的模板文件(例如,网络绑定或中继等);

(4)评估 CPU 数量,来确定如何调节某一 Web 服务器;

(5)将注册的变量与定义的变量进行比较,以检查服务的变化。例如,可以以此来验证文件的 MD5 。

2、条件任务语法:

(1)when 语句:

        when 语句可用于有条件的运行任务,将以要测试的条件作为值,若条件满足则运行任务,若条件不满足则跳过该任务。

注:1)最简单的条件判断是布尔变量 true / false 、True / False 、yes / no 、1 / 0 ;

       2)when 表达式不属于模块,因此必须放在模块外部;

       3)从 Ansible Core 2.12 起,when 条件语句会始终将字符串视为 true 布尔值。

(2)常见条件运算:

     运算     示例
  等于(值为字符串)  ansible_facts['machine'] == "x86_64"
  等于(值为数字)  max_memory == 512
  小于  max_memory < 512
  大于  max_memory > 512
  小于等于  max_memory <= 512
  大于等于  max_memory >= 512
  不等于  max_memory != 512
  变量存在  min_memory is defined
  变量不存在  min_memory is not defined
  布尔值为 true( 1 、True 、yes 、true )  memory_available
  布尔值为 false( 0 、False 、no 、false )  not memory_available
  第一个变量值存在,且作为第二个变量列表中的值  ansible_facts['distribution'] in supported_distros

3、测试多个条件:

        一个 when 语句可用于评估多个值,用户可以通过使用 and or 关键字组合条件,或使用括号分组条件。

(1)任意条件为真时满足条件语句,使用 or 关键字(上图红色方框处);

(2)若两个条件都必须为真才满足条件语句,则使用 and 关键字(上图黄色方框处)。

注:除上图示例中的表示方法外,使用 and 关键字组合多个条件语句的另一表示方法如下图:

(3)使用括号可以对条件进行分组,以表达更复杂的条件语句(上图蓝色方框处);

三、组合使用循环与条件任务:

        循环与条件任务可以组合使用,组合使用 when 和 loop 时,when 语句将对每一个项目都进行处理

        上图中的 ansible.builtin.dnf 模块在满足根目录( / )上挂载的文件系统超过 300000 时,安装 mariadb-server 软件包。其中 ansible_facts['mounts'] 事实是一组字典,各代表一个已挂载文件系统的相关事实。上述命令执行时将循环迭代列表中的每一个字典,直到找到两个条件都为真的已挂载文件系统的字典时,才满足条件语句。

注:有关事实的内容在 Ansible(7)——管理机密与事实中有详细说明,转跳链接如下:https://blog.csdn.net/m0_68756914/article/details/147076080

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

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

相关文章

adb|scrcpy的安装和配置方法|手机投屏电脑|手机声音投电脑|adb连接模拟器或手机

adb|scrcpy的安装和配置方法手机投屏电脑|手机声音投电脑|adb连接模拟器或手机或电视 引言 在数字设备交织的现代生活中&#xff0c;adb&#xff08;Android Debug Bridge&#xff09;与 scrcpy 宛如隐匿的强大工具&#xff0c;极大地拓展了我们操控手机、模拟器乃至智能电视等…

vue3项目集成electron

一、环境准备 1. 确保已安装 Node.js (建议版本 16.x 或更高) 2. 创建或进入现有 Vue 项目目录 cd your-vue-project 二、添加 Electron 支持 在项目根目录执行: vue add electron-builder 执行后会在 `src` 目录下生成 `background.js` 主进程文件。 三、主进程配置 (ba…

循环神经网络 - 参数学习之随时间反向传播算法

本文中&#xff0c;我们以同步的序列到序列模式为例来介绍循环神经网络的参数学习。 循环神经网络中存在一个递归调用的函数 &#x1d453;(⋅)&#xff0c;因此其计算参数梯度的方式和前馈神经网络不太相同。在循环神经网络中主要有两种计算梯度的方式&#xff1a;随时间反向…

体验OceanBase的 并行导入功能

在数据库的日常使用中&#xff0c;会经常遇到以下场景&#xff1a; ‌数据复制‌&#xff1a;将一个或多个表中的数据复制到目标表中&#xff0c;可能是复制全部数据&#xff0c;也可能仅复制部分数据。数据合并&#xff1a;将数据从一个表转移到另一个表&#xff0c;或者将多…

Kafka和RocketMQ相比有什么区别?那个更好用?

Kafka和RocketMQ相比有什么区别?那个更好用? Kafka 和 RocketMQ 都是广泛使用的消息队列系统&#xff0c;它们有很多相似之处&#xff0c;但也有一些关键的区别。具体选择哪个更好用&#xff0c;要根据你的应用场景和需求来决定。以下是它们之间的主要区别&#xff1a; 1. …

UniApp 实现兼容 H5 和小程序的拖拽排序组件

如何使用 UniApp 实现一个兼容 H5 和小程序的 九宫格拖拽排序组件&#xff0c;实现思路和关键步骤。 一、实现目标 支持拖动菜单项改变顺序拖拽过程实时预览移动位置拖拽松开后自动吸附回网格兼容 H5 和小程序平台 二、功能结构拆解以及完整代码 完整代码&#xff1a; <…

[raspberrypi 0w and respeaker 2mic]实时音频波形

0. 环境 ubuntu22主机&#xff0c; 192.168.8.162&#xff0c; raspberry 0w&#xff0c; 192.168.8.220 路由器 1. 树莓派 # rpi - send.py # 或者命令行&#xff1a;arecord -D plughw:1,0 -t wav -f cd -r 16000 -c 2 | nc 192.168.8.162 12345import socket imp…

公司内部建立apt源

有一篇建立pypi源的在这里需要的可以查看&#xff1a;公司内部建立pypi源-CSDN博客 背景&#xff0c;公司内部有很多工具仅供内部使用&#xff0c;如果用apt的方式就比较方便&#xff0c;只需要修改sources.list将源添加进去就可以了。我们接下来的操作就是为了实现这个需求。…

UE5中如何修复后处理动画蓝图带来的自然状态下的metablriger身体绑定形变(如耸肩)问题

【[metablriger] UE5中如何修复后处理动画蓝图带来的自然状态下的metablriger身体绑定形变(如耸肩)问题】 UE5中如何修复后处理动画蓝图带来的自然状态下的metablriger身体绑定形变(如耸肩)问题

AWS Bedrock生成视频详解:AI视频创作新时代已来临

💡 TL;DR: AWS Bedrock现已支持AI视频生成功能,让企业无需深厚AI专业知识即可创建高质量视频内容。本文详解Bedrock视频生成能力的工作原理、应用场景和实操指南,助你快速掌握这一革命性技术。 🎬 AWS Bedrock视频生成:改变内容创作的游戏规则 还记得几年前,制作一个专…

1.2 测试设计阶段:打造高质量的测试用例

测试设计阶段&#xff1a;打造高质量的测试用例 摘要 本文详细介绍了软件测试流程中的测试设计阶段&#xff0c;包括测试用例设计、测试数据准备、测试环境搭建和测试方案设计等内容。通过本文&#xff0c;读者可以系统性地了解测试设计的方法和技巧&#xff0c;掌握如何高效…

jQueryHTML与插件

1.jQuery 事件机制 1.1 注册事件 bind()、on()方法向被选元素添加一个或多个事件处理程序&#xff0c;以及当事件发生时运行的函数 $("p").on({"click": function () {alert("点击了")},"mouseenter": function () {…

MySQL 触发器与存储过程:数据库的自动化工厂

在数据世界的工业区&#xff0c;有一座运转高效的自动化工厂&#xff0c;那里的机器人日夜不停地处理数据…这就是 MySQL 的触发器与存储过程系统&#xff0c;它让数据库从"手工作坊"变成了"现代化工厂"… 什么是 MySQL 触发器与存储过程&#xff1f;&…

PostgreSQL-中文字段排序-修改字段的排序规则

最新版本更新 https://code.jiangjiesheng.cn/article/365?fromcsdn 推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》 -- 修改字段的排序规则 ALTER TABLE "public"."your_table_name" ALTER COLUMN "name" TYPE varcha…

GitHub优秀项目:数据湖的管理系统LakeFS

lakeFS 是一个开源工具&#xff0c;它将用户的对象存储转换为类似Git的存储库。使用户可以像管理代码一样管理数据湖。借助 lakeFS&#xff0c;可以构建可重复、原子化和版本化的数据湖操作--从复杂的ETL作业到数据科学和分析。 Stars 数11090Forks 数3157 主要特点 强大的数据…

页面编辑器CodeMirror初始化不显示行号或文本内容

延迟刷新 本来想延迟100毫秒的&#xff0c;但是会出现样式向左偏移的情况&#xff0c;于是试了试500毫秒&#xff0c;发现就没有问题了&#xff0c;可能是样式什么是需要一个加载过程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…

使用 Spring Boot 和 Uniapp 搭建 NFC 读取系统

目录 一、NFC 技术原理大揭秘1.1 NFC 简介1.2 NFC 工作原理1.3 NFC 应用场景 二、Spring Boot 开发环境搭建2.1 创建 Spring Boot 项目2.2 项目基本配置 三、Spring Boot 读取 NFC 数据3.1 NFC 设备连接与初始化3.2 数据读取逻辑实现3.3 数据处理与存储 四、Uniapp 前端界面开发…

台式电脑插入耳机没有声音或麦克风不管用

目录 一、如何确定插孔对应功能1.常见音频插孔颜色及功能2.如何确认电脑插孔?3.常见问题二、 解决方案1. 检查耳机连接和设备选择2. 检查音量设置和静音状态3. 更新或重新安装声卡驱动4. 检查默认音频格式5. 禁用音频增强功能6. 排查硬件问题7. 检查系统服务8. BIOS设置(可选…

Gerrit的安装与使用说明(Ubuntu)

#本页面按192.168.60.148服务器举例进行安装配置 1.权限配置 ## 使用root或者有sudo权限用户执行 # 创建gerrit用户 sudo useradd gerrit # 设置gerrit用户的密码 sudo passwd gerrit # 增加sudo权限 sudo visudo 在root ALL(ALL:ALL) ALL行下添加如下内容 gerrit ALL(ALL:…

Visual Studio 2019 配置VTK9.3.1

文章目录 参考博客1、 VTK下载和编译2、vs2019配置vtk9.3.1参考博客 Visual Studio 2022 配置VTK9.3.0 1、 VTK下载和编译 见博客 CMake编译VTK 2、vs2019配置vtk9.3.1 新建一个项目 写入以下代码 #include <vtkActor.h> #include <vtkAssembly.h> #include…