ansible-playbook中的循环语句关键字

1. 简介

我们在编写playbook的时候,不可避免的要执行一些重复性操作,比如指安装软件包,批量创建用户,操作某个目录下的所有文件等。正如我们所说,ansible一门简单的自动化语言,所以流程控制、循环语句这些编程语言的基本元素它同样都具备。

2. 旧循环语句(版本在2.5之前仅有的)

在Ansible 2.5以前,playbook通过不同的循环语句以实现不同的循环,这些语句使用with_作为前缀。这些语法目前仍然兼容,但在未来的某个时间点,会逐步废弃。

循环语句关键字 	描述
with_items 	简单的列表循环
with_nested 	嵌套循环
with_dict 	循环字典
with_fileglob 	循环指定目录中的所有文件
with_lines 	循环一个文件中的所有行
with_sequence 	生成一个自增的整数序列,可以指定起始值和结束值以及步长。参数以key=value的形式指定,format指定输出的格式。数字可以是十进制、十六进制、八进制
with_subelement 	遍历子元素
with_together 	遍历数据并行集合

3. with_items

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4. 自定义with_list循环列表

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

5. 小练习:在受管主机中创建4个文件

(1) 在没有学会循环之前,我们会这样写

---
- hosts: test70
  remote_user: root
  gather_facts: no
  tasks:
  - file:
      path: "/opt/a"
      state: touch
  - file:
      path: "/opt/b"
      state: touch
  - file:
      path: "/opt/c"
      state: touch
  - file:
      path: "/opt/d"
      state: touch

(2) 在使用循环之后,我们这样写
在这里插入图片描述在这里插入图片描述在这里插入图片描述

6. 借助注册函数,多次执行循环中的不同命令

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

7. for循环实现遍历

---
- hosts: test70
  gather_facts: no
  tasks:
  - shell: "{{item}}"
    with_items:
    - "ls /opt"
    - "ls /home"
    register: returnvalue
  - debug:
      msg:
       "{% for i in returnvalue.results %}
          {{ i.stdout }}
        {% endfor %}"

在这里插入图片描述

8. 嵌套列表的定义

(将使用with_items的两种语法结合)

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

9. with_list关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

10. with_flattened关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述

11. 上述三种关键字的区别

在这里插入图片描述

12. with_together关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

13. with_cartesian关键字

在这里插入图片描述

1.我们可以这样 mkdir -p {a,b,c}/{test1,test2}

2
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

14. with_indexed_items关键字

在这里插入图片描述在这里插入图片描述

14-1 单层列表时

---
- hosts: test70
  remote_user: root
  gather_facts: no
  tasks:
  - debug:
      msg: "index is : {{ item.0 }} , value is {{ item.1 }}"
    with_indexed_items:
    - test1
    - test2
    - test3

执行结果如下:

TASK [debug] **********************************
ok: [test70] => (item=(0, u'test1')) => {
    "changed": false,
    "item": [
        0,
        "test1"
    ],
    "msg": [
        0,
        "test1"
    ]
}
ok: [test70] => (item=(1, u'test2')) => {
    "changed": false,
    "item": [
        1,
        "test2"
    ],
    "msg": [
        1,
        "test2"
    ]
}
ok: [test70] => (item=(2, u'test3')) => {
    "changed": false,
    "item": [
        2,
        "test3"
    ],
    "msg": [
        2,
        "test3"
    ]
}

14-2 两层列表嵌套时

---
- hosts: testA
  remote_user: root
  gather_facts: no
  tasks:
  - debug:
      msg: "index is : {{ item.0 }} , value is {{ item.1 }}"
    with_indexed_items:
    - [ test1, test2 ]
    - [ test3, test4, test5 ]
    - [ test6, test7 ]

在这里插入图片描述
执行结果:
在这里插入图片描述

14-3 多层列表嵌套时

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

15. with_sequence关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

count
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

---
- hosts: test70
  remote_user: root
  gather_facts: no
  tasks:
  - debug:
      msg: "{{item}}"
    with_sequence: start=2 end=6 stride=2 format="number is %0.2f"

在这里插入图片描述在这里插入图片描述

16. with_random_choice关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述

17. with_dict关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

18. 字典的嵌套

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

19. with_subelements关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

20. with_file关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

21. with_fileglob关键字

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

发布了250 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yrx420909/article/details/105220200