2016-11-08 14 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':None}) 'を組み合わせます。それ以外の場合は、カスタムフィルタプラグインを作成する必要があります。 –

+0

@ Shasha99 2番目の辞書は、必要なものを表示するのに役立ちます。私は実際に辞書を印刷する必要はありません。私はgrafanaにPOSTする必要があります。だから、私は鍵が必要です。私は私の質問で少し良いを明確にしようとします。 –

答えて

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を宣言する必要はなく、{}を直接使うことができます。 –

関連する問題