目录标题
1. with_dict以字典的形式返回结果
[root@server4 ~]# cat xh10.yml
---
- hosts: testB
remote_user: root
gather_facts: no
vars:
users:
alice: female
bob: male
tasks:
- debug:
msg: "{{item}}"
with_dict: "{{users}}"
测试:
[root@server4 ~]# ansible-playbook xh10.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item={'value': u'male', 'key': u'bob'}) => {
"msg": {
"key": "bob",
"value": "male"
}
}
ok: [172.25.60.3] => (item={'value': u'female', 'key': u'alice'}) => {
"msg": {
"key": "alice",
"value": "female"
}
}
[root@server4 ~]# cat xh10.yml
---
- hosts: testB
remote_user: root
gather_facts: no
vars:
users:
alice: female
bob: male
tasks:
- debug:
msg: "user name:{{item.key}},user gender:{{item.value}}"
with_dict: "{{users}}"
测试:
[root@server4 ~]# ansible-playbook xh10.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item={'value': u'male', 'key': u'bob'}) => {
"msg": "user name:bob,user gender:male"
}
ok: [172.25.60.3] => (item={'value': u'female', 'key': u'alice'}) => {
"msg": "user name:alice,user gender:female"
}
2. 多层字典嵌套
[root@server4 ~]# cat xh11.yml
---
- hosts: testB
remote_user: root
gather_facts: no
vars:
users:
zjy:
name: Zhangjy
gender: female
telephone: 123-456
ljl:
name: Lijl
gender: male
telephone: 456-789
tasks:
- debug:
msg: "user:{{item.key}},name:{{item.value.name}},gender:{{item.value.gender}},telephong:{{item.value.telephone}}"
with_dict: "{{users}}"
测试:
[root@server4 ~]# ansible-playbook xh11.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item={'value': {u'gender': u'male', u'name': u'Lijl', u'telephone': u'456-789'}, 'key': u'ljl'}) => {
"msg": "user:ljl,name:Lijl,gender:male,telephong:456-789"
}
ok: [172.25.60.3] => (item={'value': {u'gender': u'female', u'name': u'Zhangjy', u'telephone': u'123-456'}, 'key': u'zjy'}) => {
"msg": "user:zjy,name:Zhangjy,gender:female,telephong:123-456"
}
3. 字典嵌套在列表中,with_subelements将hobby中的每个内容和{name,gender}结合
[root@server4 ~]# cat xh12.yml
---
- hosts: testB
remote_user: root
gather_facts: no
vars:
users:
- name: zjy
gender: female
hobby:
- study
- play games
- name: ljl
gender: male
hobby:
- listen music
tasks:
- debug:
msg: "{{item}}"
with_subelements:
- "{{users}}"
- hobby
测试:
[root@server4 ~]# ansible-playbook xh12.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item=[{u'gender': u'female', u'name': u'zjy'}, u'study']) => {
"msg": [
{
"gender": "female",
"name": "zjy"
},
"study"
]
}
ok: [172.25.60.3] => (item=[{u'gender': u'female', u'name': u'zjy'}, u'play games']) => {
"msg": [
{
"gender": "female",
"name": "zjy"
},
"play games"
]
}
ok: [172.25.60.3] => (item=[{u'gender': u'male', u'name': u'ljl'}, u'listen music']) => {
"msg": [
{
"gender": "male",
"name": "ljl"
},
"listen music"
]
}
[root@server4 ~]# vim xh12.yml
---
- hosts: testB
remote_user: root
gather_facts: no
vars:
users:
- name: zjy
gender: female
hobby:
- study
- play games
- name: ljl
gender: male
hobby:
- listen music
tasks:
- debug:
msg: "user:{{item.0.name}},gender:{{item.0.gender}},hobby:{{item.1}}"
with_subelements:
- "{{users}}"
- hobby
测试:
[root@server4 ~]# ansible-playbook xh12.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item=[{u'gender': u'female', u'name': u'zjy'}, u'study']) => {
"msg": "user:zjy,gender:female,hobby:study"
}
ok: [172.25.60.3] => (item=[{u'gender': u'female', u'name': u'zjy'}, u'play games']) => {
"msg": "user:zjy,gender:female,hobby:play games"
}
ok: [172.25.60.3] => (item=[{u'gender': u'male', u'name': u'ljl'}, u'listen music']) => {
"msg": "user:ljl,gender:male,hobby:listen music"
}
4. 使用with_file获取ansible主机的内容,无论你的hosts主机是谁都可以获取
[root@server4 ~]# cat xh13.yml
---
- hosts: testB
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_file:
- /testdir/ha
- /opt/xi
测试:
[root@server4 ~]# ansible-playbook xh13.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item=hahahah) => {
"msg": "hahahah"
}
ok: [172.25.60.3] => (item=xixxi
xixixi) => {
"msg": "xixxi\nxixixi"
}
5. with_fileglob输出ansible主机下指定目录的所有文件(目录不会输出)
[root@server4 ~]# cat xh13.yml
---
- hosts: testB
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_fileglob:
- /testdir/*
测试:
[root@server4 ~]# ansible-playbook xh13.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item=/testdir/copytest) => {
"msg": "/testdir/copytest"
}
ok: [172.25.60.3] => (item=/testdir/jy) => {
"msg": "/testdir/jy"
}
ok: [172.25.60.3] => (item=/testdir/test.sh) => {
"msg": "/testdir/test.sh"
}
ok: [172.25.60.3] => (item=/testdir/ha) => {
"msg": "/testdir/ha"
}
匹配多个目录
[root@server4 ~]# cat xh13.yml
---
- hosts: testB
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_fileglob:
- /testdir/*
- /opt/test*.??? # *表示任意字符,?表示匹配一个任意字符
测试:
[root@server4 ~]# ansible-playbook xh13.yml
PLAY [testB] *******************************************************************
TASK [debug] *******************************************************************
ok: [172.25.60.3] => (item=/testdir/copytest) => {
"msg": "/testdir/copytest"
}
ok: [172.25.60.3] => (item=/testdir/jy) => {
"msg": "/testdir/jy"
}
ok: [172.25.60.3] => (item=/testdir/test.sh) => {
"msg": "/testdir/test.sh"
}
ok: [172.25.60.3] => (item=/testdir/ha) => {
"msg": "/testdir/ha"
}
ok: [172.25.60.3] => (item=/opt/test22.111) => {
"msg": "/opt/test22.111"
}