Ansible - Variabel

Variabel dalam pedoman adalah very similaruntuk menggunakan variabel dalam bahasa pemrograman apa pun. Ini membantu Anda menggunakan dan menetapkan nilai ke variabel dan menggunakannya di mana pun di buku pedoman. Seseorang dapat menempatkan kondisi di sekitar nilai variabel dan menggunakannya dalam pedoman.

Contoh

- hosts : <your hosts> 
vars:
tomcat_port : 8080

Dalam contoh di atas, kami telah menetapkan nama variabel tomcat_port dan menetapkan nilai 8080 ke variabel itu dan dapat menggunakannya di buku pedoman Anda kapan pun diperlukan.

Sekarang mengambil referensi dari contoh yang dibagikan. Kode berikut berasal dari salah satu peran (install-tomcat) -

block: 
   - name: Install Tomcat artifacts 
      action: > 
      yum name = "demo-tomcat-1" state = present 
      register: Output 
          
   always: 
      - debug: 
         msg: 
            - "Install Tomcat artifacts task ended with message: {{Output}}" 
            - "Installed Tomcat artifacts - {{Output.changed}}"

Di sini, outputnya adalah variabel yang digunakan.

Mari kita telusuri semua kata kunci yang digunakan dalam kode di atas -

  • block - Sintaks yang memungkinkan untuk mengeksekusi blok tertentu.

  • name - Nama blok yang relevan - ini digunakan dalam logging dan membantu debugging yang mana semua blok berhasil dieksekusi.

  • action- Kode di sebelah tag aksi adalah tugas yang akan dijalankan. Tindakan lagi adalah kata kunci yang mungkin digunakan di yaml.

  • register - Output dari tindakan didaftarkan menggunakan kata kunci register dan Output adalah nama variabel yang menampung output tindakan.

  • always - Sekali lagi kata kunci Ansible, menyatakan bahwa di bawah ini akan selalu dijalankan.

  • msg - Menampilkan pesan.

Penggunaan variabel - {{Output}}

Ini akan membaca nilai Output variabel. Juga seperti yang digunakan di tab msg, ini akan mencetak nilai variabel output.

Selain itu, Anda juga dapat menggunakan sub properti variabel. Seperti dalam kasus memeriksa {{Output.changed}} apakah output berubah dan karenanya menggunakannya.

Penanganan Pengecualian di PlayBooks

Penanganan pengecualian di Ansible mirip dengan penanganan pengecualian dalam bahasa pemrograman apa pun. Contoh penanganan pengecualian dalam pedoman ditampilkan di bawah ini.

tasks: 
   - name: Name of the task to be executed 
      block: 
         - debug: msg = 'Just a debug message , relevant for logging' 
         - command: <the command to execute> 
      
      rescue: 
         - debug: msg = 'There was an exception.. ' 
         - command: <Rescue mechanism for the above exception occurred) 
      
      always: 
         - debug: msg = "this will execute in all scenarios. Always will get logged"

Berikut ini adalah sintaks untuk penanganan pengecualian.

  • rescue dan always adalah kata kunci khusus untuk penanganan pengecualian.

  • Block adalah tempat kode ditulis (apa pun yang akan dijalankan di mesin Unix).

  • Jika perintah yang ditulis di dalam fitur blok gagal, maka eksekusi mencapai blok penyelamatan dan dijalankan. Jika tidak ada kesalahan pada perintah di bawah fitur blokir, maka penyelamatan tidak akan dijalankan.

  • Always dieksekusi dalam semua kasus.

  • Jadi jika kita bandingkan sama dengan java, maka mirip dengan try, catch dan akhirnya block.

  • Sini, Block mirip dengan try block tempat Anda menulis kode yang akan dieksekusi dan rescue mirip dengan catch block dan always mirip dengan finally.

Loop

Di bawah ini adalah contoh untuk mendemonstrasikan penggunaan Loops in Ansible.

Tugasnya adalah untuk menyalin set semua file perang dari satu direktori ke folder webapps tomcat.

Sebagian besar perintah yang digunakan dalam contoh di bawah ini sudah dibahas sebelumnya. Di sini, kami akan berkonsentrasi pada penggunaan loop.

Awalnya dalam perintah 'shell' kami telah melakukan ls * .war. Jadi, itu akan mencantumkan semua file perang di direktori.

Output dari perintah itu diambil dalam variabel bernama output.

Untuk mengulang, sintaks 'with_items' digunakan.

with_items: "{{output.stdout_lines}}" -> output.stdout_lines memberi kita output baris demi baris dan kemudian kita mengulang output dengan perintah with_items dari Ansible.

Melampirkan contoh keluaran hanya untuk membuat orang mengerti bagaimana kita menggunakan stdout_lines dalam perintah with_items.

--- 
#Tsting 
- hosts: tomcat-node 
   tasks: 
      - name: Install Apache 
      shell: "ls *.war" 
      register: output 
      args: 
         chdir: /opt/ansible/tomcat/demo/webapps 
      
      - file: 
         src: '/opt/ansible/tomcat/demo/webapps/{{ item }}' 
         dest: '/users/demo/vivek/{{ item }}' 
         state: link 
      with_items: "{{output.stdout_lines}}"

Blok

Buku pedoman secara keseluruhan dipecah menjadi balok-balok. Bagian terkecil dari langkah-langkah untuk dieksekusi ditulis dalam blok. Menulis instruksi khusus dalam blok membantu memisahkan fungsionalitas dan menanganinya dengan penanganan pengecualian jika diperlukan.

Contoh blok tercakup dalam penggunaan variabel, penanganan pengecualian, dan loop di atas.

Persyaratan

Kondisional digunakan ketika seseorang perlu menjalankan langkah tertentu berdasarkan suatu kondisi.

--- 
#Tsting 
- hosts: all 
   vars: 
      test1: "Hello Vivek" 
   tasks: 
      - name: Testing Ansible variable 
      debug: 
         msg: "Equals" 
         when: test1 == "Hello Vivek"

Dalam kasus ini, Sama akan dicetak karena variabel test1 sama dengan yang disebutkan dalam kondisi when. when dapat digunakan dengan kondisi logika OR dan logika AND seperti pada semua bahasa pemrograman.

Ubah saja nilai variabel test1 dari Hello Vivek menjadi Hello World dan lihat hasilnya.