Ansible: menghapus item duplikat dari list

Beberapa hari ini kemarin saya diminta untuk membuat otomasi installasi LAMP dengan menggunakan Ansible. Seperti biasa saya cari dulu role di Ansible Galaxy, biar tinggal pakai dan lebih cepat selesai kerjaan saya. Tapi ternyata ada kebutuhan kalau web servernya nanti harus membuka beberapa port dan juga ada akan ada domain yang menggunakan port yang sama.

Agak bingung juga sebenarnya, karena di Apache pada bagian Listen itu portnya harus unique / tidak disetting lebih dari 1x karena pasti nanti error. Dan setelah saya coba untuk menjelajahi Google, akhirnya ketemu juga caranya yaitu dengan memanfaatkan filter unique yang ada di Ansible.

Lalu bagaimana caranya? Sebelumnya coba cek dulu playbook di bawah ini.

---

- name: Create list with unique values
  hosts: localhost
  connection: local

  vars:
    
    apache_vhost_sites:
      - domain: example1.com
        port: 8082
      - domain: example2.com
        port: 8083
      - domain: example3.com
      - domain: example4.com
        port: 8082

  tasks:

    - name: Define apache_custom_port
      set_fact:
        apache_custom_port: '{{ apache_vhost_sites | map(attribute="port") | reject("undefined") | unique | list }}'

    - name: Print apache_custom_port
      debug:
        var: apache_custom_port

Seperti yang dapat dilihat di atas, saya mempunyai list apache_vhost_sites yang berisi list domain dan port. Lalu pada task Define apache_custom_port saya membuat list baru yaitu apache_custom_port dengan mengambil list port dari variabel apache_vhost_sites.

Karena pada list apache_vhost_sites domain example3.com tidak mempunyai port, maka nanti pada list baru akan terdeteksi sebagai undefined, oleh karena itu saya menggunakan filter reject agar data tersebut tidak dimasukkan ke dalam list. Dan akhirnya saya menggunakan filter unique untuk memastikan bahwa pada list baru tidak ada data yang duplikat.

Jika kita coba jalankan playbook di atas, maka hasilnya akan seperti video di bawah.

Sekian share dari saya, semoga membantu 🙂