Ansible - Eksekusi Lanjutan

Di bab ini, kita akan mempelajari apa itu eksekusi lanjutan dengan Ansible.

Bagaimana Membatasi Eksekusi berdasarkan Tugas

Ini adalah strategi eksekusi yang sangat penting di mana seseorang hanya perlu mengeksekusi satu eksekusi dan bukan seluruh pedoman. For example, misalkan Anda hanya ingin menghentikan server (jika masalah produksi datang) dan kemudian memposting penerapan tambalan Anda hanya ingin memulai server.

Di sini, di playbook asli, stop and start adalah bagian dari peran berbeda dalam playbook yang sama tetapi ini dapat ditangani dengan penggunaan tag. Kami dapat memberikan tag yang berbeda ke peran yang berbeda (yang pada gilirannya akan memiliki tugas) dan karenanya berdasarkan tag yang disediakan oleh pelaksana hanya peran / tugas tertentu yang dijalankan. Jadi untuk contoh yang diberikan di atas, kita dapat menambahkan tag seperti berikut -

- {role: start-tomcat, tags: ['install']}}

Perintah berikut membantu dalam menggunakan tag -

ansible-playbook -i hosts <your yaml> --tags "install" -vvv

Dengan perintah di atas, hanya peran start-tomcat yang akan dipanggil. Tag yang diberikan peka huruf besar / kecil. Pastikan kecocokan tepat diteruskan ke perintah.

Bagaimana Membatasi Eksekusi oleh Host

Ada dua cara untuk mencapai pelaksanaan langkah-langkah khusus pada host tertentu. Untuk peran tertentu, seseorang mendefinisikan host - host spesifik mana yang peran spesifik itu harus dijalankan.

Contoh

- hosts: <A> 
   environment: "{{your env}}" 
   pre_tasks: 
      - debug: msg = "Started deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
     
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}" 
 
- hosts: <B> 
   pre_tasks: 
      - debug: msg = "started.... 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
        
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed the task.. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"

Sesuai contoh di atas, bergantung pada host yang disediakan, peran masing-masing hanya akan dipanggil. Sekarang host A dan B saya ditentukan di host (file inventaris).

Solusi Alternatif

Solusi yang berbeda mungkin dengan mendefinisikan host playbook menggunakan variabel, lalu meneruskan alamat host tertentu melalui --extra-vars -

# file: user.yml  (playbook) 
--- 
- hosts: '{{ target }}' 
   user: ... 
playbook contd….

Menjalankan Playbook

ansible-playbook user.yml --extra-vars "target = "<your host variable>"

Jika {{target}} tidak ditentukan, pedoman tidak melakukan apa pun. Grup dari file host juga dapat dilalui jika perlu. Ini tidak membahayakan jika vars ekstra tidak disediakan.

Playbook menargetkan satu host

$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts