GNU/Linux >> Belajar Linux >  >> Linux

Mendekonstruksi buku pedoman Ansible

Artikel ini menjelaskan bagian-bagian berbeda dari buku pedoman Ansible dimulai dengan gambaran umum yang sangat luas tentang apa itu Ansible dan bagaimana Anda dapat menggunakannya. Ansible adalah cara menggunakan sintaks YAML yang mudah dibaca untuk menulis buku pedoman yang dapat mengotomatiskan tugas untuk Anda. Playbook ini dapat berkisar dari yang sangat sederhana hingga yang sangat kompleks dan satu playbook bahkan dapat disematkan ke yang lain.

Menginstal httpd dengan buku pedoman

Sekarang setelah Anda memiliki pengetahuan dasar itu, mari kita lihat buku pedoman dasar yang akan menginstal httpd kemasan. Saya memiliki file inventaris dengan dua host yang ditentukan, dan saya menempatkannya di web grup:

[root@ansible test]# cat inventory
[web]
ansibleclient.usersys.redhat.com
ansibleclient2.usersys.redhat.com

Mari kita lihat buku pedoman yang sebenarnya untuk melihat apa isinya:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install httpd
  hosts: web
  tasks:
    - name: this is the task to install httpd
      yum:
        name: httpd
        state: latest

Dengan menguraikannya, Anda akan melihat bahwa baris pertama dalam buku pedoman adalah --- . Ini memberi tahu Anda bahwa ini adalah awal dari buku pedoman. Selanjutnya, saya memberi nama untuk drama itu. Ini hanyalah buku pedoman sederhana dengan hanya satu permainan, tetapi buku pedoman yang lebih kompleks dapat berisi banyak permainan. Selanjutnya saya tentukan host yang ingin saya targetkan. Dalam hal ini, saya memilih web grup, tetapi saya dapat menentukan ansibleclient.usersys.redhat.com atau ansibleclient2.usersys.redhat.com sebagai gantinya jika saya tidak ingin menargetkan kedua sistem. Baris berikutnya memberi tahu Ansible bahwa Anda akan masuk ke tugas yang melakukan pekerjaan sebenarnya. Dalam hal ini, buku pedoman saya hanya memiliki satu tugas, tetapi Anda dapat memiliki banyak tugas jika Anda mau. Di sini saya menentukan bahwa saya akan menginstal httpd kemasan. Baris berikutnya mengatakan bahwa saya akan menggunakan yum modul. Saya kemudian memberi tahu nama paketnya, httpd , dan saya ingin menginstal versi terbaru.

[ Pembaca juga menyukai: Memulai Ansible ]

Ketika saya menjalankan httpd.yml playbook dua kali, saya mendapatkan ini di terminal:

[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible test]#

Perhatikan bahwa dalam kedua kasus, saya menerima ok=2 , tetapi pada putaran kedua buku pedoman, tidak ada yang berubah. Versi terbaru httpd sudah terpasang pada saat itu.

Untuk mendapatkan informasi tentang berbagai modul yang dapat Anda gunakan dalam playbook, Anda dapat menggunakan ansible-doc memerintah. Misalnya:

[root@ansible test]# ansible-doc yum
> YUM    (/usr/lib/python3.6/site-packages/ansible/modules/packaging/os/yum.py)
Installs, upgrade, downgrades, removes, and lists packages and groups with the `yum' package manager. This module only works on Python 2. If you require Python 3 support, see the [dnf] module.

  * This module is maintained by The Ansible Core Team
  * note: This module has a corresponding action plugin.
< output truncated >

Sangat menyenangkan memiliki buku pedoman yang memasang httpd , tetapi untuk membuatnya lebih fleksibel, Anda dapat menggunakan variabel alih-alih mengkodekan paket secara keras sebagai httpd . Untuk melakukannya, Anda dapat menggunakan buku pedoman seperti ini:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest

Di sini Anda dapat melihat bahwa saya telah menambahkan bagian yang disebut "vars" dan saya mendeklarasikan variabel myrpm dengan nilai httpd . Saya kemudian dapat menggunakan myrpm itu variabel di playbook dan sesuaikan dengan apa pun yang ingin saya instal. Juga, karena saya telah menentukan RPM untuk menginstal dengan menggunakan variabel, saya dapat menimpa apa yang telah saya tulis di buku pedoman dengan menentukan variabel pada baris perintah dengan menggunakan -e :

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest
[root@ansible test]# ansible-playbook httpd.yml -e "myrpm=at"

PLAY [this playbook will install at] ***************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install at] **************************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible test]#

Cara lain untuk membuat tugas lebih dinamis adalah dengan menggunakan loop . Dalam cuplikan ini, Anda dapat melihat bahwa saya telah mendeklarasikan rpm sebagai daftar untuk memiliki mailx dan postfix . Untuk menggunakannya, saya menggunakan loop dalam tugas saya:

 vars:
    rpms:
      - mailx
      - postfix

  tasks:
    - name: this will install the rpms
      yum:
        name: "{{ item }}"
        state: installed
      loop: "{{ rpms }}"

Anda mungkin pernah memperhatikan bahwa saat drama ini diputar, fakta tentang pembawa acara dikumpulkan:

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]


Fakta-fakta ini dapat digunakan sebagai variabel saat Anda menjalankan permainan. Misalnya, Anda dapat memiliki motd.yml file yang menyetel konten seperti:

“This is the system {{ ansible_facts['fqdn'] }}.
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.”

Untuk sistem apa pun tempat Anda menjalankan buku pedoman itu, nama domain yang sepenuhnya memenuhi syarat (FQDN), distribusi sistem operasi, dan versi distribusi akan disetel, bahkan tanpa Anda mendefinisikan variabel tersebut secara manual.

[ Butuh lebih banyak tentang Ansible? Ikuti kursus tinjauan teknis gratis dari Red Hat. Ansible Essentials:Kesederhanaan dalam Tinjauan Teknis Otomasi. ] 

Menutup

Ini adalah pengantar singkat tentang tampilan buku pedoman Ansible, apa yang dilakukan bagian-bagian yang berbeda, dan bagaimana Anda bisa mendapatkan lebih banyak informasi tentang modul. Informasi lebih lanjut tersedia dari dokumentasi Ansible.


Linux
  1. Cara membuat Playbook yang Mungkin

  2. Menggunakan buku pedoman Ansible untuk mengelola pembaruan workstation dan server

  3. Bagaimana cara meneruskan variabel tambahan ke buku pedoman Ansible

  1. Konfigurasikan daemon Chrony Anda dengan buku pedoman Ansible

  2. Cara menginstal paket perangkat lunak dengan playbook Ansible

  3. bagaimana cara membuat playbook yang memungkinkan untuk mendapatkan versi OS dari host jarak jauh?

  1. Playbook Dry Run yang Dimungkinkan:Jalankan Playbook dalam Mode Periksa

  2. Playbook yang Mungkin:Cara Membuat dan Mengonfigurasi Playbook

  3. Cara Menggunakan Tag di Ansible Playbook (Contoh)