【Ansible Tower/AWX】配列の重複削除


この記事はプロモーションを含みます。

Ansible

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

記事は以上です。配列内の値を重複削除することが出来ました。
簡単なので、是非試してみて下さい。

コメント

タイトルとURLをコピーしました