在Ansible中,如何根据键上的正则表达式模式过滤字典?

时间:2018-11-12 14:26:26

标签: ansible

我需要根据键名上的模式提取字典的子集。 例如,在下面的v中,我需要提取key-> values section1 *。

下面的代码分配值列表,但是我仍然没有找到保留key-> map设置的方法。

  - set_fact:
      v:
        section1_1: true
        section1_2: false
        section2_1: true
        section2_2: false
        section3: true

  - set_fact:
      v2: "{{ v | select('match','^section1_.*') | map('extract', v) | list }}"

  - debug:
      var: v2

有什么需要的吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

合并dict2itemsitems2dict过滤器:

- debug:
    msg: "{{ v | dict2items | selectattr('key', 'match', '^section1') | list | items2dict }}"

答案 1 :(得分:0)

fatal: [localhost]: FAILED! => {"msg": "template error while templating string: no filter named 'items2dict'. String: {{  v |
     

dict2items | selectattr('key','match','^ section1_')|列表|   items2dict}}“}

如果我查看/usr/lib/python2.7/dist-packages中的源代码,我会看到有对它的引用,但没有真正的函数定义

ansible / plugins / filter / core.py:引发AnsibleFilterError(“ items2dict需要一个列表,取而代之的是%s。”%type(mylist)) ansible / plugins / filter / core.py:“ items2dict”:list_of_dict_key_value_elements_to_dict,

我正在运行2.5.1。我需要更高版本吗?