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記事は以上です。配列内の値を重複削除することが出来ました。
簡単なので、是非試してみて下さい。
リンク
      
 
  
  
  
  

コメント