2016-11-08 108 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,你可以直接使用{}。 –