Ansibleで配列に格納された値を重複削除する方法を解説します。
プレイブック
サンプルのプレイブックになります。
重複削除する仕組みとしては、配列[array]を元にループを行いつつ、値を詰めなおしているイメージです。その際、処理対象の値が詰めなおし先にある場合はスキップしています。
---
- hosts: all
gather_facts: False
vars:
# 配列を定義
array:
- "値2"
- "値1"
- "値3"
- "値3"
- "値2"
- "値1"
tasks:
- name: "配列の確認(重複削除前)"
debug:
var: array
- name: "配列の重複削除"
set_fact:
array: "{{ ( array | default([]) + [item] ) | unique }}"
with_items: "{{ array }}"
- name: "配列の確認(重複削除後)"
debug:
var: array
リンク
実行結果
サンプルの実行結果になります。
配列の重複削除した後の配列[array]を確認すると、配列内の重複していた値が削除されていることが分かります。
Using /etc/ansible/ansible.cfg as config file
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [配列の確認(重複削除前)] ************************************************************
ok: [192.168.56.106] => {
"array": [
"値2",
"値1",
"値3",
"値3",
"値2",
"値1"
]
}
TASK [配列の重複削除] *****************************************************************
ok: [192.168.56.106] => (item=値2) => {"ansible_facts": {"array": ["値2", "値1", "値3"]}, "ansible_loop_var": "item", "changed": false, "item": "値2"}
ok: [192.168.56.106] => (item=値1) => {"ansible_facts": {"array": ["値2", "値1", "値3"]}, "ansible_loop_var": "item", "changed": false, "item": "値1"}
ok: [192.168.56.106] => (item=値3) => {"ansible_facts": {"array": ["値2", "値1", "値3"]}, "ansible_loop_var": "item", "changed": false, "item": "値3"}
ok: [192.168.56.106] => (item=値3) => {"ansible_facts": {"array": ["値2", "値1", "値3"]}, "ansible_loop_var": "item", "changed": false, "item": "値3"}
ok: [192.168.56.106] => (item=値2) => {"ansible_facts": {"array": ["値2", "値1", "値3"]}, "ansible_loop_var": "item", "changed": false, "item": "値2"}
ok: [192.168.56.106] => (item=値1) => {"ansible_facts": {"array": ["値2", "値1", "値3"]}, "ansible_loop_var": "item", "changed": false, "item": "値1"}
TASK [配列の確認(重複削除後)] ************************************************************
ok: [192.168.56.106] => {
"array": [
"値2",
"値1",
"値3"
]
}
PLAY RECAP *********************************************************************
192.168.56.106 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
記事は以上です。配列内の値を重複削除することが出来ました。
簡単なので、是非試してみて下さい。
リンク
コメント