получить ansible фактов динамически в игровой книге - PullRequest
1 голос
/ 07 апреля 2020

У меня есть ansible фактов, как показано ниже,

 "facter_partitions": {
            "/dev/loop0": {
                "backing_file": "/a",
                "size": "10.92 GiB",
                "size_bytes": 3080000000
            },
            "/dev/loop1": {
                "backing_file": "/b",
                "size": "11.92 GiB",
                "size_bytes": 1080000000
            },
            "/dev/loop10": {
                "backing_file": "/c",
                "size": "12.02 GiB",
                "size_bytes": 2064000000
            }
            },

Как мы можем динамически получить пары ключ и значение в playbook. может использовать для l oop.

1 Ответ

0 голосов
/ 07 апреля 2020

Это словарь. Вы должны преобразовать его в список, используя dict2items, затем вы можете получить доступ к парам ключ-значение для каждого элемента следующим образом:

---
- hosts: localhost
  gather_facts: false
  vars:
     "facter_partitions": {
            "/dev/loop0": {
                "backing_file": "/a",
                "size": "10.92 GiB",
                "size_bytes": 3080000000
            },
            "/dev/loop1": {
                "backing_file": "/b",
                "size": "11.92 GiB",
                "size_bytes": 1080000000
            },
            "/dev/loop10": {
                "backing_file": "/c",
                "size": "12.02 GiB",
                "size_bytes": 2064000000
            }
       }
  tasks:
    - debug: msg="{{ item.key }} -  {{ item.value.backing_file }}"
      loop: "{{ facter_partitions | dict2items }}"

Это приведет к выводу типа

TASK [debug] *******************************************************************
ok: [127.0.0.1] => (item={'key': u'/dev/loop10', 'value': {u'size_bytes': 2064000000, u'backing_file': u'/c', u'size': u'12.02 GiB'}}) => {
    "msg": "/dev/loop10 -  /c"
}
ok: [127.0.0.1] => (item={'key': u'/dev/loop1', 'value': {u'size_bytes': 1080000000, u'backing_file': u'/b', u'size': u'11.92 GiB'}}) => {
    "msg": "/dev/loop1 -  /b"
}
ok: [127.0.0.1] => (item={'key': u'/dev/loop0', 'value': {u'size_bytes': 3080000000, u'backing_file': u'/a', u'size': u'10.92 GiB'}}) => {
    "msg": "/dev/loop0 -  /a"
}
...