ansible:with_dict、with_subelements、with_file、with_fileglob


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"
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值