2016-11-08 58 views
2

我想从Ansible的字典中删除单个键。如何从Ansible字典中删除单个密钥?

例如,我想这样的:

- debug: var=dict2 
    vars: 
    dict: 
     a: 1 
     b: 2 
     c: 3 
    dict2: "{{ dict | filter_to_remove_key('a') }}" 

要打印此:

ok: [localhost] => { 
    "dict2": { 
     "b": 2, 
     "c": 3 
    } 
} 

请注意,该词典是从JSON文件加载,我其发布到Grafana REST API。我想允许在文件中保存一个'id'密钥并在开机前删除密钥。

这是更接近实际使用我对去除:

- name: Install Dashboards 
    uri: 
    url: "{{ grafana_api_url }}/dashboards/db" 
    method: POST 
    headers: 
     Authorization: Bearer {{ grafana_api_token }} 
    body: 
     overwrite: true 
     dashboard: 
     "{{ lookup('file', item) | from_json | removekey('id') }}" 
    body_format: json with_fileglob: 
    - "dashboards/*.json" 
    - "../../../dashboards/*.json" 
+0

你为什么要创建一个新的字典?为什么不在打印时使用原始字典并跳过所需的键? – Shasha99

+0

我想你只能使用默认过滤器将关键字设置为null:'dict |结合({'a':无})',如果它适合你的需求。否则,您需要编写自定义过滤器插件。 –

+0

@ Shasha99第二本字典只是为了帮助展示我需要的东西。我实际上并不需要打印字典;我需要将它张贴到grafana。所以我需要一把钥匙才能离开。我会尽量在我的问题上澄清一点。 –

回答

1
- set_fact: 
    dict: 
     a: 1 
     b: 2 
     c: 3 
    dict2: {} 

- set_fact: 
    dict2: "{{dict2 |combine({item.key: item.value})}}" 
    when: "{{item.key not in ['a']}}" 
    with_dict: "{{dict}}" 

- debug: var=dict2 

,或者创建一个过滤器插件,并使用它。

+0

感谢您的展示方式。我创建了一个过滤器插件,但如果可能的话,使用本机非常简单。 –

+0

非常好!你甚至不需要声明dict2,你可以直接使用{}。 –