Bootstrap

Linux Ansible自动化运维 loop循环以及过滤器

在2.5版本之前的ansible中,大多数人习惯使用"with_X"风格的关键字操作循环,从2.6版本开始,官方开始推荐使用"loop"关键字代替"with_X"风格的关键字,我们先来看一个小示例,使用loop关键字进行最简单的列表循环,示例如下:

[root@server4 ~]# vim loopxh1.yml
[root@server4 ~]# cat loopxh1.yml 
---
- hosts: testB
  remote_user: root
  gather_facts: no
  tasks:
  - debug:
      msg: "{
   { item }}"
    loop:
    - teststr1
    - teststr2

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

上例使用"loop"关键字,替换了之前总结的"with_list"这种"with_X"风格的关键字,它们的效果是完全相同的。

在总结lookup插件的用法时,已经详细的描述过,我们可以使用"loop"关键字配合对应的"lookup"插件,替换更多的、具有更复杂功能的"with_X"风格的关键字,比如,使用loop关键字和dict插件替换"with_dict"关键字,示例如下

[root@server4 ~]# vim loopxh2.yml
[root@server4 ~]# cat loopxh2.yml 
---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    users:
      alice: female
      bob: male
  tasks:
  - debug:
      msg: "{
   {item.key}} is {
   {item.value}}"
    loop: "{
   { lookup('dict',users) }}"

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

上例使用了**“loop加lookup"的方式,完成了循环操作,而在2.6版本的官网手册中,官方开始推荐使用"loop加filter”**的方式来替代"loop加lookup"的方式,什么意思呢?我们来看一个小例子,如下:

[root@server4 ~]# vim loopxh3.yml
[root@server4 ~]# cat loopxh3.yml 
---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    users:
      alice: female
      bob: male
  tasks:
  - debug:
      msg: "{
   {item.key}} is {
   {item.value}}"
    loop: "{
   { users | dict2items }}"

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

如上例所示,在使用loop关键字操作对应的字典变量users时,并没有借助dict插件,而是借助了一个名为dict2items的过滤器,前文已经总结了过滤器的使用方法,但是并没有介绍dict2items过滤器的用法,那么此处正好介绍一下dict2items过滤器的使用方法,dict2items过滤器是在2.6版本中新加入的过滤器,它可以把一个字典格式的数据进行转换处理,具体会进行怎样的转换处理:

users是一个字典格式的变量,它的结构是这样的
    users:
      alice: female
      bob: male
当users字典被dict2items转换处理以后,会变成如下模样
    users:
    - key: alice
      value: female
    - key: bob
      value: male

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
;