Как получить значения словаря с помощью метода split? - PullRequest
0 голосов
/ 11 июня 2019

Разделение словаря не работает в ansible. Ansible - 2.5.15

Может кто-нибудь помочь с любым решением.

Я пытался извлечь значения из словаря, но не смог получить значения.

Пробный код:

- hosts: localhost
  connection: local
  tasks:
    - set_fact:
       some_module: "{{ item.split(': ')[1] }}"
      with_items:
        - git: true
        - gradle: false

Ошибка ниже:

The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'split'

Ожидаемые результаты приведены ниже:

[верно, неверно]

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Вы можете обработать его как хэш-карту и получить ключ или значение:

- hosts: localhost
  connection: local
  tasks:
    - set_fact:
       some_module: "{{ item.values }}"
      with_items:
        - {git: true}
        - {gradle: false}
0 голосов
/ 12 июня 2019

Ваши данные не словарь.Это список

    - git: true
    - gradle: false

Словарь ниже

    git: true
    gradle: false

Давайте сначала создадим из данных словарь, а затем используем фильтр dict2items .

Игра ниже

- hosts: localhost
  vars:
    data1:
      - {git: true}
      - {gradle: false}
    data2: {}
  tasks:
    - set_fact:
        data2: "{{ data2|combine(item) }}"
      loop: "{{ data1 }}"
    - debug:
        msg: "{{ data2|dict2items|json_query('[].value') }}"

дает:

"msg": [
    true, 
    false
]

dict2items доступно начиная с Ansible 2.6.В более старых версиях используйте простой filter_plugin hash_utils.py

$ cat filter_plugins/hash_utils.py
def hash_to_tuples(h):
    return h.items()

def hash_keys(h):
    return h.keys()

def hash_values(h):
    return h.values()

class FilterModule(object):
    ''' utility filters for operating on hashes '''

    def filters(self):
        return {
            'hash_to_tuples' : hash_to_tuples
            ,'hash_keys'     : hash_keys
            ,'hash_values'   : hash_values
        }

Задание ниже

- debug:
    msg: "{{ data2|hash_values }}"

дает тот же результат, что и конструкция с dict2items выше.Возможно, вы захотите попробовать другие фильтры и просмотреть подробную информацию о filter_plugin .

...