目录
一、循环迭代任务:
使用循环使得管理员不必编写使用同一模块的多个任务。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