10.Ansible Loops介绍

news/2025/4/1 6:35:41/
  1. Ansible Loops是什么?以及实际例子
    就是循环语句。让我们看看这个创建Playbook的示例。要使用用户模块在系统中创建用户,在本例中, 我们只创建一个用户。但是如果我们有多个用户呢?

    name: Create users
    hosts: localhost
    tasks:- user: name= george state=present
    

    一种方法是根据需要多次复制这些行

    name: Create users
    hosts: localhost
    tasks:- user: name= george state=present-	user: name= ravi state=present-	user: name= mani state=present-	user: name= kiran state=present-	user: name= jazlan state=present-	user: name= emaan state=present-	user: name= mazin state=present-	user: name= izaan state=present-	user: name=mike state=present-	user: name= menaal state=present-	user: name= shoeb state=present-	user: name=rani state=present
    

    但这并不是很优雅,因为有很多重复。一个更好的方法是在所有用户上建立一个任务循环。这就是我们使用循环的地方。Loop是一个循环指令,它多次执行相同的任务。每次运行时, 它都会将循环中每个项的值存储在名为“item”的变量中。因此, 可以简单地替换用户名,如下所示。这会使行动手册更有条理,并减少重复。
    在这里插入图片描述
    上面的写法,可以转换成下面的写法,方便理解looploop相当于创建了多个task,然后每个task都第一了变量item,如下。执行行动手册时, 它将以这种方式运行。这里只是方便理解loop,不建议这么写。
    在这里插入图片描述
    所以任何时候你遇到一本可能是别人写的Playbook,而loop部分很混乱, 我会建议你像这样可视化它。
    在上面的例子中, 循环是一个字符串值数组,只有用户名。但是如果我也想指定用户id呢?这意味着循环中的每一项都必须有两个值;用户名和用户ID。但是如何在一个数组中传递两个值,而不是通过循环传递一个字符串数组。
    传入一个字典数组。每个字典将有两个键值对。键是name是每个用户的id在这里插入图片描述
    循环中每个任务内的item变量都是一个字典,因此, 在每个任务中, 要获取用户名,我可以执行item.name。要获取用户ID, 我可以执行item.uid
    对于字典数组, 可以简单地使用字典中的item.属性名来获取列表中每个字典中的一个项。
    上面的例子可以可视化为如下,没一个task都有一个item字典变量,里面包含nameuid两个属性。使用的时候可以使用item.属性名的方式
    在这里插入图片描述
    还要注意, 字典数组也可以用json格式表示,如上上图所示。

  2. With_*
    我们刚才看到的loop指令用于创建简单的循环,这些循环迭代许多项。在Playbook中创建循环还有另一种方法。这就是使用带下划线的指令。
    我们开发的这个Playbook也可以像下面这样使用with_items指令来编写。
    在这里插入图片描述
    实际上, loop指令是Ansible中新添加的。在过去, 我们只有with_items指令。在这种情况下, 两个Playbook产生相同的结果,两者之间没有太大的区别。对于像我们正在处理的那些简单循环,建议使用loop指令本身。然而, 在一些较旧的剧本中,可能会遇到with_items指令, 因此当您看到它时, 您应该理解它的含义。

    现在, 让我们看看with指示词的优点。With_items只是遍历一个项目列表。我们还有其他的指令, 比如, with_files可以遍历多个文件, with_url可以连接多个url,with_mongodb可以连接多个mongodb数据库。这些只是其中的一部分。
    在这里插入图片描述
    with_*指令有很多。类型属于查找插件(lookup)
    在这里插入图片描述

  3. 例子:下面的例子只会输出一个Apple,请使用with_items让它输出所有的fruits

    -  name: 'Print list of fruits'hosts: localhostvars:fruits:- Apple- Banana- Grapes- Orangetasks:- command: 'echo "{{ item }}"'
    

    答案:

    -  name: 'Print list of fruits'hosts: localhostvars:fruits:- Apple- Banana- Grapes- Orangetasks:- command: 'echo "{{ item }}"'with_items: '{{ fruits }}'
    

    还可以不使用变量,如下:

    	-  name: 'Print list of fruits'hosts: localhosttasks:- command: 'echo "{{ item }}"'with_items:- Apple- Banana- Grapes- Orange
    

    下面的例子,只会安装一个package,改写它,让它能安装所有的

    package:
    - name: 'Install required packages'hosts: localhostbecome: yesvars:packages:- httpd- make- vimtasks:- yum:name: vimstate: present
    

    答案:

    - name: 'Install required packages'hosts: localhostbecome: yesvars:packages:- httpd- make- vimtasks:- yum:name: '{{ item }}'state: presentwith_items: '{{ packages }}'
    

    更多关于Ansible的文章,请参考我的Ansible专栏:https://blog.csdn.net/u011069294/category_12331290.html

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

相关文章

启用Windows防火墙后,FTP传输非常慢

我们有一个计划任务,该任务使用Windows命令行FTP程序在两个Windows服务器之间传输大文件(〜130 MB)。速度很慢(大约需要30分钟),有时会在传输完成之前终止。服务器是2003年(发送)和2…

瑞云科技CTO赵志杰出席广州广告数字创意峰会并发表演讲

3月23日下午,广州广告数字创意峰会暨穗广协企业家大讲堂年度巡礼活动在广州图书馆圆满举行。本次峰会由广州市人民政府统筹,中共广州市委宣传部、广州市文化广电旅游局、中共广州市天河区委、广州市天河区人民政府主办。作为第六届“文创产业大会天河峰会…

Pycharm 安装PyQt5

第一步: 新建项目文件夹 新建项目 新建一个 Pyqt5Tools 的文件夹 这里放到了 D盘 安装成功 第二步: 安装相关包 安装PyQt5 pip3 install -i https://pypi.douban.com/simple PyQt5,PyQt5-tools时间根据网速 更新下pip python.exe -m pip install --upgrade pip -i https:…

数据库隔离级别

1. 数据库隔离级别 1.1 事务 事务只是一个改变,是一些操作的集合;用专业的术语讲,他就是一个程序的执行单元;事务本身其实并不包含这4个特性,只是我们需要通过某些手段,尽可能的让这个执行单元满足这四个特…

Techwiz LCD 1D应用:OLED反射颜色模拟

建模任务 在环境光(D65)的反射下,模拟偏光片不同厚度的补偿膜所引起的不同视角下的颜色变化。 结果 d9.53um d46.76um

pytorch 1D卷积与1D深度可分离卷积

1.传统一维卷积: 2.改变groups: 将Input的通道分成groups个独立的通道,分别进行卷积。相应的卷积核的通道数也会减小,如下图所示。 下图将64个通道分成32个groups,每个组由两个通道构成,时间维保持不变。一…

Atcode120E 1D Party

题面 题目链接 解题思路 我们能够观察出如下性质: 1.每个人要么一开始往左,再一直往右,要么一开始往右再一直往左。 2.每个人都是在不停的运动。 我们可以二分一个时间t,考虑在t时间内相邻的两个人是否都能够碰面一次。 我们发现…

Hydrus 1D

Hydrus 1D中土壤分类及默认土壤水力参数 序号Soil Catalog中文θrθsαnKsL1Sand砂2Loamy Sand壤砂土3Sand Loam砂壤土4Loam壤土5Silt粉砂6Silt Loam粉砂壤土7Sandy Clay Loam砂质黏壤土8Clay Loam粘壤土9Silty Clay Loam粉(砂)质黏壤土10Sandy Clay砂质…