如何使用拆分方法检索字典值?

时间:2019-06-11 11:03:46

标签: ansible jinja2

拆分字典无法正常使用。 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 个答案:

答案 0 :(得分:1)

您可以将其作为哈希图处理并获取键或值:

- hosts: localhost
  connection: local
  tasks:
    - set_fact:
       some_module: "{{ item.values }}"
      with_items:
        - {git: true}
        - {gradle: false}

答案 1 :(得分:0)

您的数据不是字典。这是一个列表

    - 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
]
从Ansible 2.6开始,

dict2items 可用。在旧版本中,使用简单的 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 的详细信息。