[bdqn@rhel8_70 ~]$ mkdir demo2
[bdqn@rhel8_70 ~]$ cp ansible.cfg hosts demo2/
[bdqn@rhel8_70 ~]$ cd demo2/
一、手动定义变量
(1)通过vars来定义变量,vars和 tasks对齐。定义变量的格式如下。
vars:
变量1: 值1
变量2: 值2
...
(2)定义变量时,不可有重复的变量,否则后面定义的变量的值会覆盖前面定义的变量的值,如下所示。
vars:
aa: value1
bb: value2
aa: value3
...
-
这里aa重复定义了,所以aa的值最终是value3。
{{变量名}}
{{ 变量名 }}
{{ 变量名 }}
{{ 变量名 }}
1.练习:
[bdqn@rhel8_70 demo2]$ vim 1.yaml
---
- hosts: server2
vars:
myname1: tom1
myname2: tom2
myname3: tom3
tasks:
- name: 打印某个变量
debug: msg="变量myname1的值是{{myname1}}"
(3)运行此playbook,命令如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 1.yaml
PLAY [server2] *****************************************************************************
TASK [Gathering Facts] *********************************************************************
ok: [server2]
TASK [打印某个变量] ******************************************************************************
ok: [server2] => {
"msg": "变量myname1的值是tom1"
}
PLAY RECAP *********************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
可以看到,打印了myname1的值为 tom1。
[bdqn@rhel8_70 demo2]$ vim 1.yaml
---
- hosts: server2
vars:
myname1: tom1
myname2: tom2
myname3: tom3
myname1: tom3
tasks:
- name: 打印某个变量
debug: msg="变量myname1的值是{{myname1}}"
(5)这里定义了两次 myname1 这个变量,第一次定义的值为tom1,第二次定义的值为tom3。下面运行此playbook查看结果,如下所示。
[bdqn@rhel8_70 demo2]$ ansible-playbook 1.yaml
PLAY [server2] *****************************************************************************
TASK [Gathering Facts] *********************************************************************
ok: [server2]
TASK [打印某个变量] ******************************************************************************
ok: [server2] => {
"msg": "变量myname1的值是tom3"
}
PLAY RECAP *********************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
因为mynamel重复定义了两次,所以运行此playbook时会有提示,意思是变量重复定义了,且后面定义的myname1生效,打印的结果为 tom3。
二、变量文件
[bdqn@rhel8_70 demo2]$ vim vars.yaml
myv1: aaa
myv2: bbb
myv2: ccc
(2)修改1.yaml的内容如下。
[bdqn@rhel8_70 demo2]$ vim 1.yaml
---
- hosts: server2
vars_files:
- vars.yaml
vars:
myname1: tom1
myname2: tom2
myname3: tom3
myname1: tom3
tasks:
- name: 打印某个变量
debug: msg="变量myname1的值是{{myname1}}"
- name: 打印变量myv1的值
debug: msg='变量myv1的值是{{myv1}}'
(3)这里通过vars_files来引用变量文件 vars.yaml,然后打印变量myvl的值,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 1.yaml
PLAY [server2] *****************************************************************************
TASK [Gathering Facts] *********************************************************************
ok: [server2]
TASK [打印某个变量] ******************************************************************************
ok: [server2] => {
"msg": "变量myname1的值是tom3"
}
TASK [打印变量myv1的值] **************************************************************************
ok: [server2] => {
"msg": "变量myv1的值是aaa"
}
PLAY RECAP *********************************************************************************
server2 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
三、字典变量
- 同一个字典中定义的多个变量不可有重复值,否则后面定义的变 量会覆盖前面定义的变量。
- 要是引用木桶中的变量,必须指定是哪个木桶中的变量。例如,要引用木桶xx中的变量aa,则使用xx.aa。
字典名:
var1: value2
var2: value2
[bdqn@rhel8_70 demo2]$ vim 2.yaml
---
- hosts: server2
vars:
dict1:
myv1: aaa
myv2: bbb
myv3: ccc
dict2:
myv1: 111
myv2: 222
myv3: 333
tasks:
- name: 打印第一个变量
debug: msg="{{dict1.myv1}}"
(2)这里定义了两个字典dict1和 dict2,里面分别有3个变量,最后通过dict1.myvl引用了字典dick1中的变量myvl。通过ansible-playbook 2.yaml运行的结果应该为aaa,如下所示。
[bdqn@rhel8_70 demo2]$ ansible-playbook 2.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [打印第一个变量] ************************************************************************************
ok: [server2] => {
"msg": "aaa"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
如果在同一个字典中出现了相同的变量名,则后面定义的变量的值会覆盖前面定义的变量的值。
四、列表变量
- uname:记录用户名。
- age:记录年龄。
- sex:记录性别。这个员工表的内容如下。
employee:
- uname: lisi
age: 22
sex: man
- uname: wangwu
age: 24
sex: man
- uname: xiaohua
age: 21
sex: wuman
-
但是为了防止误会,每个元素的第一个变量前都加上一个“-”,表示它是这个元素的第一个变量
aa1 aa2
- xx: v1 xx: v1
- yy: v2 yy: v2
-
这里左边的aa1是列表,每个元素中仅有一个变量,右边的aa2是字典。
[bdqn@rhel8_70 demo2]$ vim 3-list.yaml
---
- hosts: server2
vars:
users:
- unmae: tom
sex: mem
age: 19
- unmae: bob
sex: men
age: 20
- unmae: mary
sex: women
age: 22
tasks:
- name: 打印一个变量
debug: msg={{ users[2]}}
(3)这里列表users定义了3个元素,现在要获取第3个元素用users[2]来表示,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 3-list.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [打印一个变量] *************************************************************************************
ok: [server2] => {
"msg": {
"age": 22,
"sex": "women",
"unmae": "mary"
}
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(4)如果要获取第3个用户的年龄,修改3-list.yaml的内容如下。
[bdqn@rhel8_70 demo2]$ vim 3-list.yaml
---
- hosts: server2
vars:
users:
- unmae: tom
sex: mem
age: 19
- unmae: bob
sex: men
age: 20
- unmae: mary
sex: women
age: 22
tasks:
- name: 打印一个变量
debug: msg={{ users[2].age }}
(5)运行此playbook,命令如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 3-list.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [打印一个变量] *************************************************************************************
ok: [server2] => {
"msg": "22"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
五、数字变量的运算
[bdqn@rhel8_70 demo2]$ vim 4-list.yaml
---
- hosts: server2
vars:
aa: 3
tasks:
- name: 3乘2的值
debug: msg={{aa*2}}
- name: 3的3次方
debug: msg={{3**3}}
(2)运行此playbook,命令如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 4-list.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [3乘2的值] **************************************************************************************
ok: [server2] => {
"msg": "6"
}
TASK [3的3次方] **************************************************************************************
ok: [server2] => {
"msg": "27"
}
PLAY RECAP ****************************************************************************************
server2 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
六、内置变量groups
-
在 ansible 中,除用户手动去定义一些变量外,还有一些内置的变量,这些变量不需要用户定义就可以直接使用。
(1)groups用于列出清单文件中所有定义的主机组及里面的主机,看下面的例子。
[bdqn@rhel8_70 demo2]$ vim 7-group.yaml
---
- hosts: server2
tasks:
- name: xxx
debug: msg={{groups}}
(2)运行此playbook,命令如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 7-group.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [xxx] ****************************************************************************************
ok: [server2] => {
"msg": {
"all": [
"server3",
"server1",
"server2"
],
"db": [
"server1",
"server2"
],
"ungrouped": [
"server3"
]
}
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 这里显示了清单文件中所有的主机组及里面的主机信息。
(3)如果只想列出某个主机组,可以通过“groups['主机组名]”或“groups.主机组名”来表示。修改7-group.yaml的内容如下。
[bdqn@rhel8_70 demo2]$ vim 7-group.yaml
---
- hosts: server2
tasks:
- name: xxx
debug: msg={{groups['db']}}
(4)这里只显示主机组db中的主机,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 7-group.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [xxx] ****************************************************************************************
ok: [server2] => {
"msg": [
"server1",
"server2"
]
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 可以看到,这里只显示了db 主机组中的主机。
- groups['db']可以改写成 groups.db,
七、内置变量hostvars
-
此变量一般用于,当某个play的 hosts 中只写了A主机组,但是同时想在此play中显示B主机组中的信息,这时可以选择此变量。
(1)练习:写一个playbook,里面包含一个play,里面的hosts指定为server2,但是要显示 server3的IP地址,命令如下。
[bdqn@rhel8_70 demo2]$ vim 8-hostvars.yaml
---
- hosts: server2
tasks:
- name: 打印server3的IP
debug: msg={{hostvars['server3'].ansible_default_ipv4.address}}
(2)运行此playbook,命令如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 8-hostvars.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [打印server3的IP] *******************************************************************************
fatal: [server2]: FAILED! => {"msg": "The task includes an option with an undefined
variable. The error was: 'ansible.vars.hostvars.HostVarsVars object' has no attribute
'ansible_default_ipv4'\n\nThe error appears to be in '/home/bdqn/demo2/8-hostvars.yaml':
line 4, column 7, but may\nbe elsewhere in the file depending on the exact syntax
problem.\n\nThe offending line appears to be:\n\n tasks:\n - name: 打印server3的IP\n
^ here\n"}
PLAY RECAP ****************************************************************************************
server2 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
-
这里却出现了报错,这是因为play 的hosts中只写了server2,所以只会获取server2的 fact变量,并不会获取server3的fact变量,也就不会识别server3上的ansible_default_ipv4.address。
[bdqn@rhel8_70 demo2]$ vim 8-hostvars.yaml
---
- hosts: server3
- hosts: server2
tasks:
- name: 打印server3的IP
debug: msg={{hostvars['server3'].ansible_default_ipv4.address}}
-
这里只比前面多了一个play,且这个play中只写了一个 hosts: server3。但是这一句就可以获取到server3的 fact变量,这样在第二个play中再次获取server3的fact变量时就不会报错了。
(4)运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 8-hostvars.yaml
PLAY [server3] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server3]
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [打印server3的IP] *******************************************************************************
ok: [server2] => {
"msg": "192.168.112.72"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
八、内置变量inventory hostname
[bdqn@rhel8_70 demo2]$ vim 9-inventory.yaml
---
- hosts: db
tasks:
- name: 打印我在清单文件中的名称
debug: msg={{inventory_hostname}}
(2)这里playbook 会在db主机组上执行,即在server2和 server3上执行。在server2上执行时inventory_hostname的值为server2,在server3上执行时 inventory_hostname的值为server3,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 9-inventory.yaml
PLAY [db] *****************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server3]
ok: [server2]
TASK [打印我在清单文件中的名称] *******************************************************************************
ok: [server2] => {
"msg": "server2"
}
ok: [server3] => {
"msg": "server3"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server3 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(3)上面的例子中,hosts 的值写的是 db,所以后续的task是要在server2和 server3上同时执行的。修改清单文件 hosts,添加一个主机组xx,里面的主机包括server2这一台主机。
[bdqn@rhel8_70 demo2]$ vim hosts
server2
server3
[db]
server2
server3
[xx]
server2
(4)修改9-inventory1.yaml的内容如下。
[bdqn@rhel8_70 demo2]$ vim 9-inventory.yaml
---
- hosts: db
tasks:
- name: 打印我在清单文件中的名称
debug: msg={{inventory_hostname}}
when: inventory_hostname in groups ['xx']
(5)这里增加了一条判断语句when(后面会专门讲解),执行debug模块的条件是被管理主机要属于xx主机组。虽然 hosts后面跟的是db,server3在db主机组但没有在xx主机组中,条件不满足,所以在 server3上并不执行debug模块。运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 9-inventory.yaml
PLAY [db] *****************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server3]
ok: [server2]
TASK [打印我在清单文件中的名称] *******************************************************************************
ok: [server2] => {
"msg": "server2"
}
skipping: [server3]
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server3 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
-
这里跳过了server3,只有server2执行了debug模块。
九、变量的过滤器
- 所谓变量的过滤器,实际上就是对变量的值进行一些操作,例如,进行类型转化、截取、加密等操作,使用格式如下。
{{ 变量名 | 函数 }}
(1)练习:把大写字符转换成小写字符,命令如下。
[bdqn@rhel8_70 demo2]$ vim 10-vars.yaml
---
- hosts: server2
vars:
aa: tom
bb: BOB
tasks:
- name: xxx
debug: msg={{bb | lower}}
(2)这里定义了一个变量bb值为大写的 BOB,通过 lower这个过滤器会把大写字符转换成小写字符。运行此playbook,命令如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [xxx] ****************************************************************************************
ok: [server2] => {
"msg": "bob"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
可以看到,这里显示的是小写的bob。
-
下面列出几个常见的过滤器。
1.数字类型
[bdqn@rhel8_70 demo2]$ vim 10-vars2.yaml
---
- hosts: server2
tasks:
- name: 数字运算
debug: msg={{3+'3'}}
(2)这里对3+'3'进行数学运算,但是第二个3用单引号引起来了,说明是一个字符串,用数字 3和字符串3相加是要报错的,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars2.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [数字运算] ***************************************************************************************
fatal: [server2]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{3+'3'}}): unsupported operand type(s) for +: 'int' and 'str'"}
PLAY RECAP ****************************************************************************************
server2 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
(3)这里报错的提示信息的意思是,数字不能和字符串进行数学运算。我们可以把字符串'3'通 过int转换成数字,修改10-vars2.yaml的内容如下。
[bdqn@rhel8_70 demo2]$ vim 10-vars2.yaml
---
- hosts: server2
tasks:
- name: 数字运算
debug: msg={{3+('3'|int)}}
(4)其中'3'通过管道传递给int,转换成整型类型的,这样就可以相加了,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars2.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [数字运算] ***************************************************************************************
ok: [server2] => {
"msg": "6"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(5)浮点型float,可以把字符串转换成小数类型的数字,修改10-vars2.yaml的内容如下。
[bdqn@rhel8_70 demo2]$ vim 10-vars2.yaml
---
- hosts: server2
tasks:
- name: 数字运算
debug: msg={{3+('3'|float)}}
(6)这里用float把'3'转换成浮点型,即 3.0,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars2.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [数字运算] ***************************************************************************************
ok: [server2] => {
"msg": "6.0"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(7)绝对值abs,可以把负数转换成正数,如-3变成3,修改10-vars2.yaml的内容如下。
[bdqn@rhel8_70 demo2]$ vim 10-vars2.yaml
---
- hosts: server2
tasks:
- name: 数字运算
debug: msg={{-3| abs }}
(8)这里用abs求-3的绝对值,得到的值应该是3,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars2.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [数字运算] ***************************************************************************************
ok: [server2] => {
"msg": "3"
}
PLAY RECAP ****************************************************************************************
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.列表
- length:用于求列表的长度。
- max:用于求列表中的最大值。
- min:用于求列表中的最小值。
(1)练习:写一个playbook,内容如下。
[bdqn@rhel8_70 demo2]$ vim 10-vars3.yaml
---
- hosts: server2
vars:
list1: [1,2,8,3,2]
tasks:
- name: 求列表长度
debug: msg="{{list1 | length}}"
- name: 求列表中的最大值
debug: msg="{{list1 | max}}"
- name: 求列表中的最小值
debug: msg="{{list1 | min}}"
(2)这里定义了一个列表list1,然后分别求列表的长度、最大值、最小值,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars3.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [求列表长度] **************************************************************************************
ok: [server2] => {
"msg": "5"
}
TASK [求列表中的最大值] ***********************************************************************************
ok: [server2] => {
"msg": "8"
}
TASK [求列表中的最小值] ***********************************************************************************
ok: [server2] => {
"msg": "1"
}
PLAY RECAP ****************************************************************************************
server2 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
可以看到,列表的长度为5,说明列表中有5个元素,最大值为8,最小值为1。用于列表的过滤器还包括sort(排序)、sum(求和)、shuffle(打乱顺序显示)等。
3.设置变量默认值default
{{ var1 | default(value1) }}
-
如果某个变量var1已经定义了,则显示它自己的值;如果没有被定义,则被赋值为value1.
(1)练习:写一个playbook,内容如下。
[bdqn@rhel8_70 demo2]$ vim 10-vars4.yaml
---
- hosts: server2
vars:
aa: 11
bb:
tasks:
- name: aa的值
debug: msg="{{ aa | default('xxx')}}"
- name: bb的值
debug: msg="{{ bb | default('xxx')}}"
- name: cc的值
debug: msg="{{ cc | default('xxx')}}"
(2)这里定义了aa的值为11,定义了bb但是没有赋值,并没有定义cc。所以,打印aa时,会显示自己的值即11;打印bb时,会显示自己的值即空值;打印 cc时,显示的是default中的值即xxx。运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars4.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [aa的值] ***************************************************************************************
ok: [server2] => {
"msg": "11"
}
TASK [bb的值] ***************************************************************************************
ok: [server2] => {
"msg": ""
}
TASK [cc的值] ***************************************************************************************
ok: [server2] => {
"msg": "xxx"
}
PLAY RECAP ****************************************************************************************
server2 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4.加密相关
-
求哈希值hash,算法可以是md5 或sha等,用法如下。
hash('算法名')
(1)练习1:写一个 playbook,对字符串 haha001实现不同的加密,命令如下。
[bdqn@rhel8_70 demo2]$ vim 10-vars5.yaml
---
- hosts: server2
vars:
passa: haha001
tasks:
- name: 用md5加密
debug: msg={{passa | hash('md5')}}
- name: 用sha1加密
debug: msg={{passa | hash('sha1')}}
- name: 用sha512加密
debug: msg={{passa | hash('sha512')}}
(2)这里定义了一个变量 passa=haha001,然后分别使用md5、sha1、sha512对它进行加密,运行结果如下。
[bdqn@rhel8_70 demo2]$ ansible-playbook 10-vars5.yaml
PLAY [server2] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [server2]
TASK [用md5加密] *************************************************************************************
ok: [server2] => {
"msg": "da48dd48779209245c671bf9fddfde23"
}
TASK [用sha1加密] ************************************************************************************
ok: [server2] => {
"msg": "0d7c6d97655f38d7773c9a78a0861d533b1b32f1"
}
TASK [用sha512加密] **********************************************************************************
ok: [server2] => {
"msg": "b37c491d6a36ef90c6c718855c06cc53053fe646fcae8889fafbad198c07a91fc283dd266af5dceb5378ff0a04cc1f9062fd4ea203c81dd2c9fbc58efa72a68b"
}
PLAY RECAP ****************************************************************************************
server2 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0