RHCE8 资料整理(十一)

RHCE8 资料整理

    • 第 32 章 控制语句
      • 32.1 判断语句 when
        • 32.1.1 when 判断中>、<、!=和==的使用
        • 32.1.2 when 判断中 in的用法
        • 32.1.3 when 判断中 is的用法
      • 32.2 判断语句 block-rescue
      • 32.3 循环语句

第 32 章 控制语句

一个play中可以包含多个task,如果不想所有的task全部执行,可以设置只有满足某个条件才执行这个task。本章主要介绍whenblock-rescue两种判断语句。

32.1 判断语句 when

when作为一个判断语句,出现在某个task下,格式,

tasks:
- name: xxx模块when: 条件

如果条件成立,则执行模块,否则不执行。

在when中引用变量时是不用加{{}}的

32.1.1 when 判断中>、<、!=和==的使用

when后面可以有多个判断条件,使用orand作为连接符

常见的判断符包括:

符号说明
==等于
!=不等于
>大于
=>大于等于
<小于
<=小于等于
[root@node-137 ansible]# cat when-1.yml
---
- hosts: db1tasks:- name: when testdebug: msg="1<2"when: 1<2- name: when test2debug: msg="1>2"when: 1>2- debug: msg="1>2 or 2<3"when: 1>2 or 2<3- debug: msg="2>1 and 3>2"when: 2>1 and 3>2- debug: msg="centos:7"when: ansible_distribution_major_version=="7"
[root@node-137 ansible]# ansible-playbook when-1.ymlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [when test] **********************************************************************************************************************
ok: [node-138] => {"msg": "1<2"
}TASK [when test2] *********************************************************************************************************************
skipping: [node-138]TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "1>2 or 2<3"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "2>1 and 3>2"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "centos:7"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=5    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

当判断条件不成立,则会提示skipping

32.1.2 when 判断中 in的用法

在when语句中,除可以使用上面的大于、小于等判断方法外,还可以使用in,如下

value [not] in 列表

如果此值在这个列表中,则判断成立,否则不成立

[root@node-137 ansible]# cat when-3.yml
---
- hosts: db1gather_facts: falsevars:list1: [1,2,3,4,5]tasks:- debug: msg="123"when: 1 in list1- debug: msg="not in"when: 6 not in list1
[root@node-137 ansible]# ansible-playbook when-3.ymlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "not in"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
32.1.3 when 判断中 is的用法

is可以用于判断变量是否被定义,常见的判断包括以下3种:

  1. is defined,变量被定义
  2. is undefined,变量未被定义,等同于is not defined
  3. is noe,变量被定义了,但值为空
[root@node-137 ansible]# cat when-4.yml
---
- hosts: db1gather_facts: truevars:aa: 123dd:tasks:- debug: msg={{aa}}when: aa is defined- debug: msg="bb"when: bb is not defined- debug: msg="cc"when: cc is undefined- debug: msg="dd"when: dd is none
[root@node-137 ansible]# ansible-playbook when-4.ymlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": 123
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "bb"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "cc"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "dd"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=5    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

判断文件的小练习

[root@node-137 ansible]# cat when-5.yml
---
- hosts: db1tasks:- name: run syscmdshell: "ls /aa.txt"register: aaignore_errors: true- name: task2fail: msg="命令执行错误"when: aa.rc != 0- name: task3debug: msg="OK123"
[root@node-137 ansible]# ansible-playbook when-5.ymlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [run syscmd] *********************************************************************************************************************
fatal: [node-138]: FAILED! => {"changed": true, "cmd": "ls /aa.txt", "delta": "0:00:00.037543", "end": "2023-12-20 21:02:05.426760", "msg": "non-zero return code", "rc": 2, "start": "2023-12-20 21:02:05.389217", "stderr": "ls: cannot access /aa.txt: No such file or directory", "stderr_lines": ["ls: cannot access /aa.txt: No such file or directory"], "stdout": "", "stdout_lines": []}
...ignoringTASK [task2] **************************************************************************************************************************
fatal: [node-138]: FAILED! => {"changed": false, "msg": "命令执行错误"}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=2    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=1

32.2 判断语句 block-rescue

对于when来说,只能做一个判断,成立就执行,不成立就不执行。blockrescue一般同用,类似于shell判断语句中的if-else,在block下面可以包含多个模块,来判断这多个模块是否执行成功。用法,

block:
- 模块1
- 模块2
- 模块3
rescue:
- 模块4
- 模块5

执行流程:

  • 首先执行task1block中的模块1,如果成功,则继续执行block中的模块2,如果block中所有模块均执行成功,则跳过rescue中的模块,进而执行task2中的模块
  • 当执行task1block中的某个模块失败,则执行rescue中的模块4,如果rescue中的所有模块均执行成功,则继续执行task2中的模块,如果rescue中的某个模块失败,则退出playbook
  • 如果blockrescue的模块中,有ignore_errors: yes选项,则会忽略该报错模块

在这里插入图片描述
示例1,参考图1

[root@node-137 ansible]# cat block-1.yml
---
- hosts: db1tasks:- name: task1block:- debug: msg="block1"- shell: "ls /"- debug: msg="block2"rescue:- debug: msg="rescue1"- debug: msg="rescue2"- name: task2debug: msg="task2"[root@node-137 ansible]# ansible-playbook block-1.ymlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "block1"
}TASK [shell] **************************************************************************************************************************
changed: [node-138]TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "block2"
}TASK [task2] **************************************************************************************************************************
ok: [node-138] => {"msg": "task2"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=5    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

示例2,参考图2

[root@node-137 ansible]# cat block-1.yml
---
- hosts: db1tasks:- name: task1block:- debug: msg="block1"- shell: "ls /aa.txt"- debug: msg="block2"rescue:- debug: msg="rescue1"- debug: msg="rescue2"- name: task2debug: msg="task2"
[root@node-137 ansible]# ansible-playbook block-1.ymlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "block1"
}TASK [shell] **************************************************************************************************************************
fatal: [node-138]: FAILED! => {"changed": true, "cmd": "ls /aa.txt", "delta": "0:00:00.032879", "end": "2023-12-20 21:52:57.557622", "msg": "non-zero return code", "rc": 2, "start": "2023-12-20 21:52:57.524743", "stderr": "ls: cannot access /aa.txt: No such file or directory", "stderr_lines": ["ls: cannot access /aa.txt: No such file or directory"], "stdout": "", "stdout_lines": []}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "rescue1"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "rescue2"
}TASK [task2] **************************************************************************************************************************
ok: [node-138] => {"msg": "task2"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=5    changed=0    unreachable=0    failed=0    skipped=0    rescued=1    ignored=0

示例3,参考图3

[root@node-137 ansible]# cat block-1.yml
---
- hosts: db1tasks:- name: task1block:- debug: msg="block1"- shell: "ls /aa.txt"ignore_errors: true- debug: msg="block2"rescue:- debug: msg="rescue1"- debug: msg="rescue2"- name: task2debug: msg="task2"
[root@node-137 ansible]# ansible-playbook block-1.ymlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "block1"
}TASK [shell] **************************************************************************************************************************
fatal: [node-138]: FAILED! => {"changed": true, "cmd": "ls /aa.txt", "delta": "0:00:00.035454", "end": "2023-12-20 21:56:08.510199", "msg": "non-zero return code", "rc": 2, "start": "2023-12-20 21:56:08.474745", "stderr": "ls: cannot access /aa.txt: No such file or directory", "stderr_lines": ["ls: cannot access /aa.txt: No such file or directory"], "stdout": "", "stdout_lines": []}
...ignoringTASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "block2"
}TASK [task2] **************************************************************************************************************************
ok: [node-138] => {"msg": "task2"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=5    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=1

32.3 循环语句

在playbook中用loop来循环列表中的元素,在loop中,使用一个固定的变量item,然后把每个元素赋值给item。格式,

list1: [a,b,c]
...
debug: msg={{item}}
loop: "{{list1}}"
#或 
#with_items: "{{list1}}"
  • 这里关键字loop可以替换为with_items,含义相同
  • loopwith_items后面的{{}}需要使用""双引号或''单引号引起来
[root@node-137 ansible]# cat loop-1.yml
---
- hosts: db1gather_facts: falsevars:users:- uname: "tom"age: 18- uname: "jerry"age: 19- uname: "jacky"age: 18tasks:- debug: msg={{ item }}with_items: "{{users}}"- debug: msg={{item.uname}}loop: '{{users}}'- debug: msg={{item}}when: item.age == 18loop: "{{users}}"
[root@node-137 ansible]# ansible-playbook loop-1.ymlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => (item={u'uname': u'tom', u'age': 18}) => {"msg": {"age": 18,"uname": "tom"}
}
ok: [node-138] => (item={u'uname': u'jerry', u'age': 19}) => {"msg": {"age": 19,"uname": "jerry"}
}
ok: [node-138] => (item={u'uname': u'jacky', u'age': 18}) => {"msg": {"age": 18,"uname": "jacky"}
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => (item={u'uname': u'tom', u'age': 18}) => {"msg": "tom"
}
ok: [node-138] => (item={u'uname': u'jerry', u'age': 19}) => {"msg": "jerry"
}
ok: [node-138] => (item={u'uname': u'jacky', u'age': 18}) => {"msg": "jacky"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => (item={u'uname': u'tom', u'age': 18}) => {"msg": {"age": 18,"uname": "tom"}
}
skipping: [node-138] => (item={u'uname': u'jerry', u'age': 19})
ok: [node-138] => (item={u'uname': u'jacky', u'age': 18}) => {"msg": {"age": 18,"uname": "jacky"}
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

在最后一个task中,加入判断语句when,使age等于18的user进行打印

with_items还能够迭代字典,而loop不行

[root@node-137 ansible]# cat loop-1.yml
---
- hosts: db1gather_facts: falsevars:userdict:users:uname: "tom"age: 18age1: 18users2:uname: "jea"age: 19age1: 20tasks:- debug: msg={{ item }}ignore_errors: truewith_items: "{{userdict.users}}"- debug: msg={{ item }}loop: "{{userdict}}"
[root@node-137 ansible]# ansible-playbook loop-1.ymlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => (item=uname) => {"msg": "uname"
}
ok: [node-138] => (item=age) => {"msg": "age"
}
ok: [node-138] => (item=age1) => {"msg": "age1"
}TASK [debug] **************************************************************************************************************************
fatal: [node-138]: FAILED! => {"msg": "Invalid data passed to 'loop', it requires a list, got this instead: {u'users2': {u'uname': u'jea', u'age': 19, u'age1': 20}, u'users': {u'uname': u'tom', u'age': 18, u'age1': 18}}. Hint: If you passed a list/dict of just one element, try adding wantlist=True to your lookup invocation or use q/query instead of lookup."}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

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

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

相关文章

DriveWorks Solo捕获参数(三)

捕获参数 - 木门和矩形窗 木质门 下一个组件是木门本身。除了尺寸之外&#xff0c;门还具有需要控制的功能。 让我们首先捕获尺寸。 通过单击“捕获资源管理器”中的标题来激活“捕获的模型”部分。 双击任务窗格树中的模型木门以在 SOLIDWORKS 中将其打开。捕获以下尺寸。…

多维时序 | MATLAB实现WOA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现WOA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现WOA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-CNN-LST…

零基础也能制作家装预约咨询小程序

近年来&#xff0c;随着互联网的快速发展&#xff0c;越来越多的消费者倾向于使用手机进行购物和咨询。然而&#xff0c;许多家装实体店却发现自己的客流量越来越少&#xff0c;急需一种新的方式来吸引顾客。而开发家装预约咨询小程序则成为了一种利用互联网技术来解决这一问题…

【设计模式--结构型--适配器模式】

设计模式--结构型--适配器模式 适配器模式概述结构案例类适配器模式对象适配器模式 应用场景 适配器模式 概述 将一个类的接口转换成客户希望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式…

Java解决不同路径问题2

Java解决不同路径问题2 01题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中…

RUST与RUSTful简介

RUST与RUSTful 1、背景2、RUST的起源3、RUST与RUSTful4、总结 1、背景 随着互联网&#xff08;Internet&#xff09;的发展&#xff0c;越来越多的人开始意识到&#xff0c;网站即软件&#xff0c;而且是一种新型的软件。这种"互联网软件"采用客户端/服务器&#xff…

服务器数据恢复-raid5故障导致上层分区无法访问的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器上3块硬盘组建了一组raid5磁盘阵列。服务器运行过程中有一块硬盘的指示灯变为红色&#xff0c;raid5磁盘阵列出现故障&#xff0c;服务器上层操作系统的分区无法识别。 服务器数据恢复过程&#xff1a; 1、将故障服务器上磁…

机器学习算法--朴素贝叶斯(Naive Bayes)

实验环境 1. python3.7 2. numpy > 1.16.4 3. sklearn > 0.23.1 朴素贝叶斯的介绍 朴素贝叶斯算法&#xff08;Naive Bayes, NB) 是应用最为广泛的分类算法之一。它是基于贝叶斯定义和特征条件独立假设的分类器方法。NB模型所需估计的参数很少&#xff0c;对缺失数据不…

基于YOLOv8的草莓病害检测,加入EMA注意力和GPFN提升病害检测能力

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的草莓病害检测&#xff0c;加入EMA注意力和GPFN性能分别从mAP0.5从原始的0.815提升至0.818和0.831 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。Y…

Swift 周报 第四十期

文章目录 前言新闻和社区53.5亿美元&#xff01;传苹果今明两年或将采购 2.3 万台 AI 服务器&#xff01;TestFlight 让管理测试员变得更加简单推送通知控制面板现已推出新交付指标Apple Vision Pro 开发者实验室现已扩展到纽约市和悉尼 提案正在审查的提案 Swift论坛推荐博文话…

关于B+树的总结

B树(B-tree) B树属于多叉树又名平衡多路查找树&#xff08;查找路径不只两个&#xff09;&#xff0c;数据库索引技术里大量使用着B树和B树的数据结构 规则&#xff1a; &#xff08;1&#xff09;排序方式&#xff1a;所有节点关键字是按递增次序排列&#xff0c;并遵循左小…

Nginx快速入门:安装目录结构详解及核心配置解读(二)

0. 引言 上节我们讲解了nginx的应用场景和安装&#xff0c;本节继续针对nginx的各个目录文件进行讲解&#xff0c;让大家更加深入的认识nginx。并通过一个实操案例&#xff0c;带大家来实际认知nginx的核心配置 1. nginx安装目录结构 首先nginx的默认安装目录为&#xff1a;…

SQL注入绕过正则及无列名注入

渗透测试 一、select\b[\s\S]*\bfrom正则二、科学计数法绕过三、过滤information四、无列名注入1、利用 join-using 注列名。2、无列名查询 五、报错注入7大常用函数1.ST_LatFromGeoHash()&#xff08;mysql>5.7.x&#xff09;payload 2.ST_LongFromGeoHash&#xff08;mysq…

vcomp140.dll丢失怎么办,vcomp140.dll丢失解决方法详解

在我多年的电脑使用经历中&#xff0c;我曾经遇到过一个非常棘手的问题&#xff0c;那就是vcomp140.dll丢失。这个问题让我苦恼了很久&#xff0c;但最终我还是找到了解决方法。今天&#xff0c;我想和大家分享一下我的经历&#xff0c;以及vcomp140.dll是什么&#xff0c;它丢…

基于博弈树的开源五子棋AI教程[1 位棋盘]

0 引子 常见的五子棋棋盘大小为15x15&#xff0c;最直观的表示就是一个二维数据。本文为了易于拓展一开始使用的是QVector<QVector>的数据&#xff0c;但是在分支因子为10的情况下只能搜索到4层左右&#xff0c;后面深度加深&#xff0c;搜索时间呈指数倍数增长。这种实…

Python中的复数

复数一般表示为abi(a、b为有理数)&#xff0c;在python中i被挪着它用&#xff0c;虚数单位是不区分大小写的J。 (笔记模板由python脚本于2023年12月19日 18:58:39创建&#xff0c;本篇笔记适合认识复数的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https:/…

Just Laws -- 中华人民共和国法律文库,简单便捷的打开方式

链接&#xff1a;JustLaws | Home 一个简洁便捷的中华人民共和国法律文库&#xff0c;而且收录比较完善&#xff0c;都是平常网民可能用到比较多的法律知识&#xff0c;目前包括宪法及宪法相关法、民商法、行政法、经济法、社会法、刑法和程序法等等 页面以文档的风格展示每一…

vue打包内存问题解决办法<--- Last few GCs ---><--- JS stacktrace --->

**<— Last few GCs —> [18484:0000026763669610] 106760 ms: Mark-sweep 4016.0 <— JS stacktrace —> FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory** 解决办法&#xff1a; set NODE_OPTION…

设计模式(三)-结构型模式(3)-装饰模式

一、为何需要装饰模式&#xff08;Decorator&#xff09;? 在软件设计中&#xff0c;某个对象会组合很多不同的功能&#xff0c;如果把所有功能都写在这个对象所在的类里&#xff0c;该类会包含很多复杂的代码逻辑&#xff0c;导致代码不美观且难以维护。于是就有了再定义一些…

Pytest自动化测试 - 必知必会的一些插件

Pytest拥有丰富的插件架构&#xff0c;超过800个以上的外部插件和活跃的社区&#xff0c;在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址&#xff1a;http://plugincompat.herokuapp.com/ 1、pytest-html&#xff1…