嵌套的列表(序列中的序列),示例如下:

---
- hosts: 192.168.10.2
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items:
- [1,2,3]
- [a,b]

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

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

我们可以使用with_list关键字,替换上例playbook中的with_items关键字,那么with_list关键字与with_items关键字有什么区别呢?将上例的with_items替换成with_list以后又能不能实现我们想要的效果呢?我们一起来试试,示例playbook如下:

---
- hosts: 192.168.10.2
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_list:
- [1,2,3]
- [a,b]

如上例所示,上例playbook中的列表与之前示例playbook中的列表完全相同,都是嵌套的列表,只是将原来的with_items关键字替换为了with_list关键字,那么我们来看一下执行效果,上例playbook执行后debug模块的输出结果如下:把列表单独输出。

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

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

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

---
- hosts: 192.168.10.2
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_flattened: #效果和with_items等效
- [1,2,3]
- [a,b]

学习一个新的关键字:with_together,可以将两个列表中的元素“对齐合并”,示例如下:

---
- hosts: 192.168.10.2
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_together:
- [1,2,3]
- [a,b,c]

如上例所示,我们定义了一个嵌套的列表,大列表内一共有两个小列表,每个小列表内有三个值,然后使用with_together关键字处理这个嵌套列表,上例playbook执行结果如下:

从上述结果可以看出: 
 第一个小列表中的第1个值与第二个小列表中的第1个值合并在一起输出了, 
 第一个小列表中的第2个值与第二个小列表中的第2个值合并在一起输出了, 
 第一个小列表中的第3个值与第二个小列表中的第3个值合并在一起输出了, 
 这就是with_together所谓的 对齐合并 功能,聪明如你一定已经明白了。 
 不过上例中,两个小列表中的元素数量相同,如果元素数量不同的小列表使用with_together对齐合并,会是什么效果呢? 
 这里就不进行示例了,快动手试试吧。

  

  

  

ansible笔记(15):循环(二)with_items/with_list/with_together/with_flattened的更多相关文章

  1. ng-深度学习-课程笔记-15: 循环序列模型(Week1)

    1 数学符号(Notation) $ x^{<1>}, x^{<2>}, ..., x^{<t>}, ..., x^{<q>} $ 表示一段输入序列x, ...

  2. ansible笔记(11):初识ansible playbook(二)

    ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...

  3. ansible笔记(8):常用模块之系统类模块(二)

    ansible笔记():常用模块之系统类模块(二) user模块 user模块可以帮助我们管理远程主机上的用户,比如创建用户.修改用户.删除用户.为用户创建密钥对等操作. 此处我们介绍一些user模块 ...

  4. ansible笔记(5):常用模块之文件操作(二)

    ansible笔记():常用模块之文件操作(二) 文件操作类模块 find模块 find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样. 此处我们介绍一些find模块的常用参数, ...

  5. ansible中的常用循环模块with_items

    ansible中的循环模块有很多,不过with_items最为常用,且较为简单,循环模块最多的功能就是将重复性的任务简单化,如下例子所示: - hosts: all remote_user: root ...

  6. ansible playbooks loop循环

    在一个task中循环某个操作 1.标准循环 - name: add several users user: name: "{{ item }}" state: present gr ...

  7. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  8. ansible使用指北(二)

    前言在上一篇文章里我们了解了ansible的常用模块,今天我们来了解下ansible-playbook,ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,an ...

  9. ansible笔记(1)在centos中安装ansible

    ansible笔记():ansible的基本概念 一些基础概念 ansible是什么? 它是一个"配置管理工具",它是一个"自动化运维工具",如果你没有使用过任 ...

随机推荐

  1. StackExchange.Redis 之 String 类型示例

    String类型很简单,就不做示例演示了,这里只贴出Helper类 /// <summary> /// 判断key是否存在 /// </summary> /// <par ...

  2. 正则表达式验证IP地址(绝对正确)

    正则验证合法_有效的IP地址(ipv4/ipv6) 不墨迹直接上代码: 正则表达式: /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[ ...

  3. ACP知识总结

    由于ACP是一个敏捷开发的系统性知识,下面只针对我自身学习的知识总结,若需要完整的考试学习资料,可评论区或私聊我拿.   敏捷估计与规划.png   ACP知识点锦集.png   敏捷项目软件总结.p ...

  4. Hash存储模型、B-Tree存储模型、LSM存储模型介绍

    每一种数据存储系统,对应有一种存储模型,或者叫存储引擎.我们今天要介绍的是三种比较流行的存储模型,分别是: Hash存储模型 B-Tree存储模型 LSM存储模型 不同存储模型的应用情况 1.Hash ...

  5. JAVA 线程池原理

    如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率.这就是线程池的目的了.线程池为线程生命周期的开销和资源不足问题提供了解决方案.通过对多个 ...

  6. day16 匿名函数

    # 匿名函数# 函数名 = lambda 参数1,(参数2,....) : 返回值 [注意:匿名函数不允许换行]# 匿名函数返回值和正常函数一样可以是任意数据类型# def add(x,y):# re ...

  7. Kubernetes CI/CD(1)

    本文通过在kubernetes上启动Jenkins服务,并将宿主机上的docker.docker.sock挂载到Jenkins容器中,实现在Jenkins容器中直接打镜像的形式实现CI功能. Kube ...

  8. Treap总结

    \(Treap = Tree + Heap\) 树堆(Treap),在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树.其基本操作的期望时 ...

  9. Elasticsearch配置集群环境

    环境选择:            1.方案一:准备三台机器   每一台机器一个节点            2.方案二:准备一台机器   启动三个节点,用端口号区分即可            3.ES启 ...

  10. 【终端命令】组管理 和 Ubuntu中的"sudo"命令

    一.超级用户root 1.超级用户和标准用户 Linux系统中的root账户通常 用于系统的维护和管理,对操作系统的 所有资源 具有所有访问权限. 在大多数版本的Linux系统中,都 不推荐 直接使用 ...