netboxのLocal Contextを更新する
初めに
netboxのLocal ContextをAnsibleのnetbox.netbox.netbox_device
モジュールで更新する場合、local_context_data
パラメータに指定した値で全て上書きされてしまいます。このため、既に何らかの値がLocal Contextに設定されていて、そこに別の値を追加したい場合、下記のステップを踏む必要があります。
- Ansible側で既存のLocal Contextを取得
- 取得したLocal Contextに追加したい値をマージ
- マージした値をLocal Contextに登録
今回はkey1、key2が登録された状態から、key3を追加するPlaybookを書きました。
netbox上のイメージ
Playbook
- hosts: localhost gather_facts: false connection: local tasks: - name: Fetch local context set_fact: current_local_context_data: "{{ query('netbox.netbox.nb_lookup', 'devices', api_endpoint=netbox_url, api_filter='name=device01', token=netbox_token).0.value.local_context_data }}" - name: Debug current_local_context_data debug: var: current_local_context_data - name: Update local context data netbox.netbox.netbox_device: netbox_token: "{{ netbox_token }}" netbox_url: "{{ netbox_url }}" data: name: device01 local_context_data: "{{ current_local_context_data | combine({'key3':'value3'}) }}" - name: Debug local_context_data debug: msg: "{{ query('netbox.netbox.nb_lookup', 'devices', api_endpoint=netbox_url, api_filter='name=device01', token=netbox_token).0.value.local_context_data }}"
実行結果
PLAY [localhost] **************************************************************************************************************************************************************************** TASK [Fetch local context] ****************************************************************************************************************************************************************** ok: [localhost] TASK [Debug current_local_context_data] ***************************************************************************************************************************************************** ok: [localhost] => current_local_context_data: key1: value1 key2: value2 TASK [Update local context data] ************************************************************************************************************************************************************ changed: [localhost] TASK [Debug local_context_data] ************************************************************************************************************************************************************* ok: [localhost] => msg: key1: value1 key2: value2 key3: value3 PLAY RECAP ********************************************************************************************************************************************************************************** localhost : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0