在 `ansible_mounts` 中声明的每个挂载点上触摸文件

Touching a file on each mount point declared in `ansible_mounts`

我想获取有关挂载点的信息,以便我可以访问挂载点上的文件。

我可以通过 item.mount 获取挂载点,但我想将这些挂载点存储在一个变量中,这样我就可以使用它来形成像 {{mountpoint}}/test.txt.

这样的路径

但我不知道如何将该信息存储到调试任务结果的变量中。即使我得到了那些挂载点,我也不知道如何在每个挂载点目录中创建一个文件。

我应该再次使用循环吗?

这是我目前的剧本:

---
- hosts: all
  gather_facts: false

  tasks:
    - setup:
        filter: ansible_mounts
    - debug:
        var: item.mount
      loop: "{{ ansible_mounts }}"
      register: result

给出

TASK [setup] ***********************************************************************************************************
ok: [ambertest]
 
TASK [debug] ***********************************************************************************************************
ok: [ambertest] => (item={u'block_used': 258025, u'uuid': u'55555-c55c-55-555-0555a', u'size_total': 55584, u'block_total': 13104379, u'mount': u'/', u'block_available': 12846354, u'size_available': 5554, u'fstype': u'xfs', u'inode_total': 25524, u'inode_available': 558, u'device': u'/dev/vda1', u'inode_used': 30796, u'block_size': 4096, u'options': u'rw,seclabel,relatime,attr2,inode64,noquota'}) => {
"item": {
"block_available": 5554,
"block_size": 4096,
"block_total": 13559,
"block_used": 2555,
"device": "/dev/vda1",
"fstype": "xfs",
"inode_available": 2558,
"inode_total": 255824,
"inode_used": 355,
"mount": "/",
"options": "rw,seclabel,relatime,attr2,inode64,noquota",
"size_available": 5554,
"size_total": 5554,
"uuid": "55555"
},
"item.mount": "/"
}
ok: [ambertest] => (item={u'block_used': 672774, u'uuid': u'55dc9f5589e', u'size_total': 55, u'block_total': 155558, u'mount': u'/amber', u'block_available': 554, u'size_available': 49954627584, u'fstype': u'ext4', u'inode_total': 355, u'inode_available': 559, u'device': u'/dev/vdb', u'inode_used': 11, u'block_size': 4096, u'options': u'rw,seclabel,relatime,data=ordered'}) => {
"item": {
"block_available": 1554,
"block_size": 4556,
"block_total": 558,
"block_used": 6554,
"device": "/dev/vdb",
"fstype": "ext4",
"inode_available": 559,
"inode_total": 550,
"inode_used": 11,
"mount": "/amber",
"options": "rw,seclabel,relatime,data=ordered",
"size_available": 45584,
"size_total": 55,
"uuid": "5555"
},
"item.mount": "/amber"
}
 
PLAY RECAP *************************************************************************************************************
ambertest : ok=2 changed=0 unreachable=0 failed=0

以下内容确实远未经过优化和防弹,但至少会让您了解如何开始。基本上,您不需要将挂载点存储在变量中,因为 ansible_mounts 变量已经有了它们(正如您的问题中出色展示的那样)

---
- hosts: all

  tasks:
    - name: touch a test.txt file on each existing mountpoint
      file:
        path: "{{ item.mount }}/test.txt"
        state: touch
      loop: "{{ ansible_mounts }}"