GNU/Linux >> Belajar Linux >  >> Linux

Cara Menggunakan Loop di Ansible Playbook

Selama menjalankan tugas di Playbook yang memungkinkan , Anda mungkin menemukan beberapa tugas yang sifatnya berulang. Ini adalah tugas yang mengharuskan Anda membuat banyak permainan, sesuatu yang bisa sangat membosankan. Seperti halnya bahasa pemrograman apa pun, loop di Ansible menyediakan cara yang lebih mudah untuk menjalankan tugas berulang menggunakan lebih sedikit baris kode dalam buku pedoman.

Saat membuat loop, Ansible memberikan dua arahan berikut:loop dan dengan_* kata kunci.

Kata kunci loop baru-baru ini ditambahkan ke Ansible 2.5 . Kata kunci loop biasanya digunakan untuk membuat loop sederhana dan standar yang berulang melalui beberapa item.

dengan_*  kata kunci digunakan dengan sejumlah plugin pencarian saat melakukan iterasi melalui nilai. Plugin pencarian memungkinkan Ansible untuk mengakses informasi dari sumber eksternal seperti penyimpanan data eksternal, sistem file, dll. The with_* pencarian masih sangat banyak digunakan dan belum ditinggalkan.

Sekarang mari kita lihat bagaimana Anda dapat mengimplementasikan Loops di Ansible.

Mengulang loop sederhana 

Pertimbangkan Playbook yang menambahkan pengguna baru pada sistem target menggunakan modul pengguna seperti yang ditunjukkan:

---- host:ubuntu_webserver  tugas:    - nama:Buat pengguna baru john      pengguna:        nama:john        status:sekarang

Ini terlihat baik-baik saja. Tetapi bagaimana jika kita memiliki banyak pengguna untuk ditambahkan ke sistem target? Bagaimana kita melakukannya? Salah satu caranya adalah dengan menduplikasi tugas seperti yang ditunjukkan pada contoh di bawah ini di mana kami menambahkan 3 pengguna.

---- hosts:ubuntu_webserver  tugas:    - nama:Buat pengguna baru john     pengguna:       nama:john        status:sekarang    - nama:Buat pengguna baru mike      pengguna:       nama:mike        nama pengguna:sekarang :        nama:andrew        status:sekarang

Seperti yang Anda lihat, ini membutuhkan banyak duplikasi dan pengulangan.

Untuk mempermudah, buku pedoman yang sama dapat ditulis menggunakan direktif loop. Arahan loop menjalankan tugas yang sama beberapa kali. Ini  menyimpan nilai setiap item dalam variabel yang disebut item .Jadi, daripada menentukan nama pengguna yang akan ditambahkan, cukup tentukan variabel yang disebut item yang diapit di antara kurung kurawal ganda seperti yang ditunjukkan.

nama:'{{ item }}'

Oleh karena itu, setiap item dalam loop akan direferensikan oleh variabel.

Seperti yang Anda lihat, buku pedoman kami sekarang jauh lebih teratur dengan duplikasi/pengulangan yang tidak perlu.

$ vi create_users.yaml---- hosts:ubuntu_webserver  tasks:    - name:Create new users      user:       name:'{{ item }}'       state:present      loop:       - john                                       

Selain itu, Anda dapat menggunakan with_items direktif alih-alih direktif loop. Keduanya akan memberikan hasil yang sama.

---- hosts:ubuntu_webserver  menjadi:yes  tugas:    - name:Create new users      user:       name:'{{ item }}'       state:present      with_items:       - john         >  

Anda sekarang dapat menjalankan playbook untuk membuat pengguna menggunakan ansible-playbook perintah seperti yang ditunjukkan di bawah ini:

$ ansible-playbook -i inventory.txt create_users.yaml

Mengulang daftar Kamus

Pada contoh pertama, kita melihat loop standar sederhana di mana array adalah daftar nilai string yang mewakili pengguna untuk ditambahkan ke target jarak jauh.

Tetapi bagaimana jika kita perlu menambahkan uid ke loop sehingga setiap item sekarang memiliki dua nilai:nama pengguna dan uid . Bagaimana Anda melewatkan 2 nilai dalam sebuah array?

Dalam skenario ini, Anda harus melewati larik kamus, masing-masing dengan 2 pasangan nilai kunci seperti yang ditunjukkan. Kuncinya adalah nama dan uid sedangkan nilainya adalah nama pengguna dan ID setiap pengguna.

Di bawah 'tugas ', Anda tidak dapat lagi mendefinisikan item variabel seperti sebelumnya. Karena kami memiliki 2 nilai, ini akan diterjemahkan menjadi dua variabel:item.name &item.uid .

Playbook lengkapnya ditunjukkan di bawah ini:

$ vi create_users.yaml---- hosts:ubuntu_webserver  menjadi:yes  tasks:    - name:Create new users      user:        name:'{{ item.name }}'       uid:'{{ item.uid }}' state:present      loop:        - name:john         uid:1020       - name:mike         uid:1030       - name:andrew         uid:1040

Array kamus juga dapat direpresentasikan dalam format JSON.

loop:  - { name:john , uid:1020 }  - { name:mike , uid:1030 }  - { name:andrew , uid:1040}

Saat dijalankan, Anda akan mendapatkan output berikut:

$ ansible-playbook -i inventory.txt create_users.yaml

Loop yang Dimungkinkan dengan indeks

Terkadang, Anda mungkin ingin melacak nilai indeks dalam larik item Anda. Untuk ini, gunakan 'dengan indexed_items ' menengadah. Nilai indeks dimulai dari 0 sementara Indeks loop dimulai dari item.0 dan nilai dari item.1

Perhatikan pedoman di bawah ini:

$ vi indexes.yaml---- hosts:ubuntu_webserver  tasks:  - name:Indexes with Ansible loop    debug:      msg:"The car at {{ item.0 }} is {{ item.1 }}"    with_indexed_items:- "Nissan"     - "Mercedes"      - "Toyota"      - "Mazda"      - "BMW"

Saat dijalankan, buku pedoman menampilkan nilai indeks setiap item dalam daftar larik.

$ ansible-playbook -i inventory.txt indexes.yaml

Kondisi dalam Perulangan yang Mungkin

Dalam perulangan Ansible, Anda dapat menggunakan pernyataan kondisional kapan harus mengontrol perulangan berdasarkan sifat variabel atau fakta sistem. Pertimbangkan buku pedoman di bawah ini di mana kami memiliki daftar paket yang perlu diinstal.

Kami telah menetapkan larik yang disebut ‘paket ' yang berisi daftar paket yang perlu diinstal. Setiap item pada larik berisi nama paket yang akan diinstal dan properti yang disebut ‘wajib ‘ yang disetel ke ‘Benar ‘ untuk 2 paket dan ‘Salah ' untuk satu paket.

$ vi install-packages.yaml---- name:Install software  menjadi:yes  hosts:all  vars:    package:      - name:neofetch       diperlukan:True      - name:cpu-checker       diperlukan:True     - name:screenfetch    Salah  tugas:    - nama:Instal "{{ item.name }}" di Ubuntu      apt:        name:"{{ item.name }}"        state:present      when:       - item.required ==Benar     [' ansible_facts] ="Ubuntu"      loop:"{{ paket }}"

'kapan ' pernyataan bersyarat berusaha untuk menginstal paket perangkat lunak dengan properti 'diperlukan ' disetel ke 'Benar ' pada sistem target yang merupakan distro Ubuntu. Di bawah ini adalah output dari playbook saat dijalankan.

Output verbose dengan jelas menunjukkan paket yang sedang diinstal dan paket yang diabaikan berdasarkan pernyataan kondisional.

Dan ini membawa kita ke akhir topik ini. Kami berharap Anda memiliki pemahaman yang baik tentang Loops in Ansible playbooks. Jangan ragu untuk menghubungi kami untuk klarifikasi apa pun.

Baca Juga :Cara Menggunakan Template Jinja2 di Ansible Playbook


Linux
  1. Bagaimana saya menggunakan Ansible dan anacron untuk otomatisasi

  2. Cara menggunakan Ansible untuk mengatur pemantauan sistem dengan Prometheus

  3. Cara menginstal paket perangkat lunak dengan playbook Ansible

  1. Cara Menggunakan if else Conditionals Statement di Bash Script

  2. Cara Menginstal dan Menggunakan Ansible di Debian 11

  3. Cara membuat Playbook yang Mungkin

  1. Cara Menggunakan Tag di Ansible Playbook (Contoh)

  2. Cara Mengunduh dan Menggunakan Ansible Galaxy Roles di Ansible Playbook

  3. Bagaimana cara meneruskan variabel tambahan ke buku pedoman Ansible