1、标准Loops

标准loops可以直接减少task的次数,如下:
[root@zero01 playbook]# vi loops.yaml
---
- hosts: all
gather_facts: False
tasks:
- name: debug loops
debug: msg="name ------> {{ item }}"
with_items:
- one
- two

  

运行 loops.yaml 如下:

[root@zero01 playbook]# ansible-playbook loops.yaml -l 192.168.79.129

PLAY [all] ***********************************************************************************************

TASK [debug loops] ***************************************************************************************
"changed": false,
"item": "one",
"msg": "name ------> one"
}
ok: [192.168.79.129] => (item=two) => {
"changed": false,
"item": "two",
"msg": "name ------> two"
} PLAY RECAP ***********************************************************************************************
192.168.79.129 : ok=1 changed=0 unreachable=0 failed=0

  

其中with_items的值是python list数据结构,每个task会循环读取list里面的值。with_items后也可以跟python字典,如下:

[root@zero01 playbook]# vi loops.yaml
---
- hosts: all
gather_facts: False
tasks:
- name: debug loops
debug: msg="name ------> {{ item.key }}
value -----> {{ item.value }}"
with_items:
- {key: "one", value: "VALUE1"}
- {key: "one", value: "VALUE2"}

运行 loops.yaml 如下:

[root@zero01 playbook]# ansible-playbook loops.yaml -l 192.168.79.129

PLAY [all] ***********************************************************************************************

TASK [debug loops] ***************************************************************************************
ok: [192.168.79.129] => (item={u'key': u'one', u'value': u'VALUE1'}) => {
"changed": false,
"item": {
"key": "one",
"value": "VALUE1"
},
"msg": "name ------> one value -----> VALUE1"
}
ok: [192.168.79.129] => (item={u'key': u'one', u'value': u'VALUE2'}) => {
"changed": false,
"item": {
"key": "one",
"value": "VALUE2"
},
"msg": "name ------> one value -----> VALUE2"
} PLAY RECAP ***********************************************************************************************
192.168.79.129 : ok=1 changed=0 unreachable=0 failed=0

2、嵌套 Loops

嵌套 Loops 也是常见的循环,主要实现一对多或者多对多的合并,如下:
[root@zero01 playbook]# vi loops.yaml
---
- hosts: all
gather_facts: False
tasks:
- name: debug loops
debug: msg="name ------> {{ item[0] }}
value ------> {{ item[1] }}"
with_nested:
- ['A']
- ['a','b','c']

运行如下:

[root@zero01 playbook]# ansible-playbook loops.yaml -l 192.168.79.129

PLAY [all] ********************************************************************************

TASK [debug loops] ************************************************************************
ok: [192.168.79.129] => (item=[u'A', u'a']) => {
"changed": false,
"item": [
"A",
"a"
],
"msg": "name ------> A value ------> a"
}
ok: [192.168.79.129] => (item=[u'A', u'b']) => {
"changed": false,
"item": [
"A",
"b"
],
"msg": "name ------> A value ------> b"
}
ok: [192.168.79.129] => (item=[u'A', u'c']) => {
"changed": false,
"item": [
"A",
"c"
],
"msg": "name ------> A value ------> c"
} PLAY RECAP ********************************************************************************
192.168.79.129 : ok=1 changed=0 unreachable=0 failed=0

类似:

one=['A']
two=['a','b','c']
[i + y for i in one for y in two]
['Aa', 'Ab', 'Ac']

Ansible playbook循环实践总结<一>的更多相关文章

  1. ansible playbook最佳实践

    本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...

  2. Ansible Playbook 循环

    Standard Loops 为了节省一些打字,重复的任务可以写成如下: - name: add several users user: name: "{{ item }}" st ...

  3. ansible playbook详解

    ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法 语法 描述 缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键 ...

  4. ansible playbook实践(四)-如何调试写好的playbook文件

    有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...

  5. Ansible PlayBook语法

    PlayBook语法实例 playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过Ansible中的tasks定义好的角色(play的内容被称为ta ...

  6. ansible 学习与实践

    title: ansible 学习与实践 date: 2016-05-06 16:17:28 tags: --- ansible 学习与实践 一 介绍 ansible是新出现的运维工具是基于Pytho ...

  7. Ansible Playbook 详解

    一.playbook 的简单使用 1.创建文件实例 (1)编辑配置文件 [root@tiejiangSRC1 ~]# cd /etc/ansible/ [root@tiejiangSRC1 ansib ...

  8. ansible playbook基本操作

    一.ansible playbook简单使用 相当于是把模块写入到配置文件里面 vim /etc/ansible/test.yml //写入如下内容: --- - hosts: 127.0.0.1 r ...

  9. ansible playbook模式及语法

    一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...

随机推荐

  1. VS code注释快捷键

    注释:        先CTRL+K,然后CTRL+C 取消注释: 先CTRL+K,然后CTRL+U

  2. mybatis属性详解

    前言 MyBatis是基于"数据库结构不可控"的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转 ...

  3. Spring学习之路二——概念上理解Spring

    一.概念. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Develop ...

  4. P1251 餐巾计划问题

    P1251 餐巾计划问题 题目描述 一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同.假设第 iii 天需要 rir_iri​块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费 ...

  5. python 操作python

    #!/usr/bin/env python#_*_ coding:utf-8 _*_ import MySQLdb # 打开门conn = MySQLdb.connect(host='192.168. ...

  6. scrapy_items

    为什么要items? 当数据量多的时候,没有统一的数据管理,统一格式化麻烦 items中除了能添加字段,还能做什么? 1. 进行预先处理 2. 对从items出去的数据进行处理 3. 写上sql语句逻 ...

  7. 新awk整理

    总感觉上一篇awk的总结几乎是照着man翻译过来的,惨不忍睹 无意间在互联网上有找到了宝贵的资料 感觉整理的很好,想着照着这个来重新写下,对照新的man更新下吧,只是总是在改变的 一.awk简介二.a ...

  8. flask----flask-session

    一.flask-session flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方 ...

  9. Java对List进行分页

    Java对组装的List分页 以前一直是在DAO层直接从数据库里分页,但是今天因为有些数据,需要混合展示,就是根据条件取出了多个对象的集合,然后把这些多个List放到一个List里,然后在从这个Lis ...

  10. Django中模板的用法简介

    1. 模板系统的介绍 Django作为一个Web框架,其模板所需的HTML输出静态部分以及动态内容插入 模板由HTML代码和逻辑控制代码构成 Django框架的模板语言的语法格式: {{var_nam ...