文中,我们总结了with_items的用法,你肯定还有印象,
我们可以把定义列表的两种语法结合起来使用,结合后可以定义出稍微复杂一些的结构,比如嵌套的列表(序列中的序列),示例如下

[root@server4 ~]# vim xh8.yml
[root@server4 ~]# cat xh8.yml
---
- hosts: testBremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_items:- [ 1, 2, 3 ]- [ a, b ]

上例中我们将之前的两种语法结合,定义出了一个列表[[1,2,3],[a,b]],而这个列表中的每一项都是列表,相当于一个大列表中嵌套了多个小列表,那么,当我们使用with_items遍历上述列表时,会是什么样的效果呢?我们试试,执行后的信息如下

[root@server4 ~]# ansible-playbook xh8.yml


可以看到,debug模块循环的将每个小列表中的值都输出了一遍,这可能与我们想象的不太一样,因为在之前的示例中, 并没有列表嵌套列表的情况,按照之前的思路,with_items会循环的输出列表(最外层大列表)中的每一项,也就是说,按照之前的思路debug模块应该会将每个小列表作为一个小整体输出,而不应该输出小列表中的每个元素,但是事实却是with_items将嵌套在大列表中的每个小列表都”展开”了,并且将小列表中的元素都输出了,如果,我们想要将每个小列表作为一个整体输出,该怎么办呢?

我们可以使用with_list关键字,替换上例playbook中的with_items关键字,示例playbook如下

[root@server4 ~]# vim xh8.yml
[root@server4 ~]# cat xh8.yml
---
- hosts: testBremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_list:- [ 1, 2, 3 ]- [ a, b ]


如上述信息所示,经过with_list处理后,每个嵌套在大列表中的小列表都被当做一个整体存放在item变量中,最终被debug作为一个小整体输出了,而不会像with_items一样将小列表”展开拉平”后一并将小列表中的元素循环输出。

前一篇文章中有很多示例,其实这些示例中的with_items关键字都可以替换成with_list关键字,替换后都可正常执行,这是因为,前一篇文章中的示例中的列表都是简单的单层列表,当处理单层的简单列表时,with_list与with_items没有任何区别,只有在处理上例中的”嵌套列表”时,才会体现出区别,区别就是,with_items会将嵌套在内的小列表”拉平”,拉平后循环处理所有元素,而with_list则不会”拉平”嵌套的列表,with_list只会循环的处理列表(最外层列表)中的每一项。

其实,当处理这种嵌套的列表时,如果想要实现”拉平”的效果,我们还能使用另外一个关键字,它就是with_flattened关键字,示例playbook如下:

[root@server4 ~]# vim xh8.yml
[root@server4 ~]# cat xh8.yml
---
- hosts: testBremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_flattened:- [ 1, 2, 3 ]- [ a, b ]

执行上例playbook以后,你会发现,执行效果与with_items效果完全相同:

此刻,你一定已经明白了with_list、with_items、with_flattened之间的区别了,在处理简单的单层列表时,他们没有区别,但是当处理嵌套的多层列表时,with_items与with_flattened会将嵌套列表”拉平展开”,循环的处理每个元素,而with_list只会处理最外层的列表,将最外层的列表中的每一项循环处理。

话说,我们还能使用如下方法定义嵌套的列表,示例如下:

with_list:
-- 1- 2- 3
-- a- b

上述方法通过缩进对齐的方式,定义出了一个嵌套有列表的列表,与如下定义完全相同

with_list:
- [ 1, 2, 3 ]
- [ a, b ]

目前为止,我们已经了解到了三个关键字可以用于循环操作,它们是with_list、with_items、with_flattened,那么我们再来认识一个新的关键字,它就是”with_together”,with_together可以将两个列表中的元素”对齐合并”,单单用语言来描述,不是特别容易理解,不如来看一个小示例,示例playbook如下:

[root@server4 ~]# vim xh9.yml
[root@server4 ~]# cat xh9.yml
---
- hosts: testBremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_together:- [ 1, 2, 3 ]- [ a, b]


从上述结果可以看出:

第一个小列表中的第1个值与第二个小列表中的第1个值合并在一起输出了,

第一个小列表中的第2个值与第二个小列表中的第2个值合并在一起输出了,

第一个小列表中的第3个值与null合并在一起输出了,

这就是with_together所谓的”对齐合并”功能,聪明如你一定已经明白了。

ansible中的循环(二)-----(with_items with_list with_flattened with_together介绍)相关推荐

  1. Ansible(十七)-- ansible 中的循环(二) with_items with_list with_flattened with_together之间的区别和联系

    前文中,我们总结了with_items的用法,你肯定还有印象,前文中有如下两个示例,它们的执行效果是相同的 示例一 --- - hosts: testBremote_user: rootgather_ ...

  2. 【循序渐进学Python】Python中的循环(二)——while循环与嵌套

    [循序渐进学Python]Python中的循环--while循环与嵌套 while循环(在给定的判断条件为 True 时执行循环体,False退出循环体) 当满足一定条件的时候才循环,具体循环多少次没 ...

  3. 【帖子收藏】ansible 中的循环:with_file 和 with_fileglob

    ansible 中的with_file 和 with_fileglob: https://blog.csdn.net/qq_35887546/article/details/105224928

  4. python使用循环结构计算10_十二、 python中的循环结构

    我们要计算1+2+3的时候,可以直接写出来,但是计算1+2+3+···+100的时候,就不能写了.如果计算1到1亿的和,全写出来就有点不现实了.为了让计算机能计算出1到1亿的和,这时候就需要循环结构了 ...

  5. Ansible详解(二)

    Ansible系列命令 Ansible系列命令有如下: ansible:这个命令是日常工作中使用率非常高的命令之一,主要用于临时一次性操作: ansible-doc:是Ansible模块文档说明,针对 ...

  6. 5.Ansible中的任务执行控制

    Ansible中的任务执行控制 实验环境 一.循环 1.循环 2.循环散列或字典列表 3.实验: 二.条件 1.条件判断 判断实验 2.多条条件组合 实验多条条件组合 测试题 三.触发器 1.触发器 ...

  7. 【ansible4】Ansible中的变量及加密(jinjia模板使用等,图文详解)

    Ansible中的变量及加密 一.变量的设定 一.变量命名规则 二.变量级别 三.变量设定和使用方式 二.JINJIA2模板 一.简介 二.使用方法 三.jinjia2模板的for循环,if用法 一. ...

  8. PyTorch中的循环神经网络RNN函数及词嵌入函数介绍

    一.pytroch中的RNN相关函数介绍 1.对于简单的RNN结构,有两种方式进行调用: 1.1 torch.nn.RNN():可以接收一个序列的输入,默认会传入全0的隐藏状态,也可以自己定义初始的隐 ...

  9. Shell中的循环语句for、while、until实例讲解

     在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外,再把以前自己写过的相关内容整理一下吧. 这里包括for/while/until循环,以及变量自增的语法实例. ...

最新文章

  1. fcm算法的MATLAB实现,FCM算法的matlab程序(初步)
  2. 三年从前端小工到架构-知乎 Live 学习整理
  3. matlab dtft的函数,DTFT的Matlab矩阵计算的理解
  4. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法及注意事项 - 全文
  5. [面试] 算法 —— 数组(有序二维数组的查找)
  6. 20171130C语言知识点梳理
  7. UI Framework-1: Ash Color Chooser
  8. PostMan居然要被干掉了!IDEA这款插件太实用了…
  9. JS双引号替换单引号
  10. LNMP架构数据迁移到NFS存储
  11. stata面板数据gmm回归_12短动态面板数据模型1-差分GMM估计-Stata软件操作教程
  12. 阵列win不识别linux识别,解决Raid模式下重装系统无法识别固态硬盘的问题
  13. 免费谷歌学术、知网、维普、scihub镜像
  14. 管中窥豹SPDK RBD bdev模块
  15. 【随笔】Linux主机简单判断CC攻击的命令
  16. 脊髓空洞症先知先觉早期症状
  17. mysql查询周数_MySQL如何获取一个指定日期所对应本年度的周数(WEEK函数)呢?
  18. 【全开源+免费更新】doodoo.js创建项目教程
  19. 淡墨写韵,不守起承转合
  20. android back键不退出程序,Android按back键不退出当前Activity

热门文章

  1. 成为高新技术企业有哪些好处?
  2. stm32滴答计时器_STM32——系统滴答定时器
  3. 海天注塑机弘讯T/A系列采集方案
  4. 以2008年为基期,各省份2008-2018年的名义GDP、实际GDP、GDP平减指数
  5. 如何看懂MITRE安全评测报告
  6. 最详细小白入门Python22-死循环
  7. Ensemble Learning常见方法总结(Bagging、Boosting、Stacking、Blending)
  8. excel能不能用python编程_用Python让Excel飞起来
  9. hbase merge regions
  10. Python3.7中time模块的time()、perf_counter()和process_time()的区别