GNU/Linux >> Belajar Linux >  >> Linux

Memahami YAML untuk Ansible

Jika Anda menulis atau menggunakan playbook Ansible, maka Anda terbiasa membaca file konfigurasi YAML. YAML bisa tampak sederhana namun anehnya luar biasa sekaligus, terutama ketika Anda mempertimbangkan kemungkinan modul Ansible yang tak ada habisnya yang Anda inginkan. Sepertinya mudah untuk menuliskan beberapa opsi dalam file YAML dan kemudian menjalankan Ansible, tetapi opsi apa yang dibutuhkan modul favorit Anda? Dan mengapa beberapa pasangan nilai kunci sementara yang lain adalah daftar?

YAML untuk Ansible bisa menjadi rumit, jadi memahami bagaimana modul Ansible diterjemahkan ke YAML adalah bagian penting untuk menjadi lebih baik di keduanya. Sebelum Anda dapat memahami cara kerja YAML untuk modul Ansible, Anda harus memahami dasar-dasar YAML.

Jika Anda tidak mengetahui perbedaan antara blok pemetaan dan blok urutan di YAML, baca pengantar singkat tentang dasar-dasar artikel YAML ini.

Sintaks perintah

Selain penggunaan ad-hoc, Ansible digunakan melalui playbook . Playbook terdiri dari satu atau beberapa pertunjukan dalam daftar yang diurutkan (sebuah YAML urutan ). Setiap permainan dapat menjalankan satu atau beberapa tugas , dan setiap tugas memanggil modul Ansible.

Modul yang memungkinkan pada dasarnya adalah ujung depan untuk perintah. Jika Anda terbiasa dengan terminal Linux atau Powershell Microsoft, maka Anda tahu cara membuat perintah menggunakan opsi (seperti --long atau -s ) bersama dengan argumen (juga disebut parameter ).

Berikut ini contoh sederhananya:

$ mkdir foo

Perintah ini menggunakan mkdir perintah untuk membuat direktori bernama foo .

Buku pedoman Ansible juga membuat perintah. Itu adalah perintah yang sama, tetapi dipanggil menggunakan sintaks yang berbeda dari yang biasa Anda gunakan di terminal.

[ Anda mungkin juga menikmati: Memulai Ansible ]

Modul yang memungkinkan dan YAML

Namun, sebagai tugas dalam buku pedoman Ansible, sintaksnya jauh berbeda. Pertama, lakon tersebut diberi nama, yang merupakan deskripsi yang dapat dibaca manusia tentang apa yang sedang dimainkan. Sebuah drama menerima banyak kata kunci, termasuk hosts untuk membatasi host yang digunakan untuk menjalankannya dan remote_user untuk menentukan nama pengguna yang harus digunakan Ansible untuk mengakses host jarak jauh.

Kata kunci untuk permainan ditentukan oleh Ansible itu sendiri, dan ada daftar kunci (dan jenis informasi yang diharapkan masing-masing sebagai nilainya) yang tersedia dalam dokumentasi Kata Kunci Play Ansible.

Kunci ini bukan item daftar yang terpisah. Dalam terminologi YAML, itu adalah pemetaan disematkan di urutan play permainan .

Berikut deklarasi permainan sederhana:

---
- name: “Create a directory”
  hosts: localhost

Blok pemetaan terakhir dalam deklarasi pemutaran adalah tasks kata kunci, yang membuka urutan baru untuk menentukan modul Ansible apa yang akan dijalankan oleh permainan, dan dengan argumen apa. Di sinilah Anda menggunakan perintah yang sudah dikenal dengan cara yang tidak dikenal, dengan YAML-ified. Faktanya, modul ini sangat asing bagi Anda sehingga Anda mungkin perlu membaca modul untuk mengetahui argumen apa yang diharapkan dari Anda.

Dalam contoh ini, saya menggunakan modul file bawaan. Dari dokumentasi modul, Anda dapat melihat bahwa parameter yang diperlukan adalah path , yang mengharapkan jalur file POSIX yang valid. Berbekal informasi itu, Anda dapat membuat buku pedoman Ansible yang sangat sederhana yang terlihat seperti ini:

---
- name: "Create a directory"
  hosts: localhost
  tasks:
  - name: "Instantiate"
    file:
      path: "foo"

Jika Anda masih terbiasa dengan pentingnya indentasi YAML, perhatikan bahwa nama tugas tidak memiliki indentasi relatif terhadap tasks karena name adalah awal dari blok urutan YAML baru (yang, seperti yang terjadi, berfungsi sebagai nilai untuk tasks kunci). Kata file mengidentifikasi modul apa yang digunakan, yang merupakan bagian dari definisi tugas, dan path adalah parameter yang diperlukan dari file modul.

Dengan kata lain, tugas permainan adalah blok urutan YAML (yaitu, daftar berurutan) definisi yang memanggil modul dan parameternya.

Anda dapat menguji pemutaran ini untuk memverifikasi bahwa itu berfungsi seperti yang diharapkan, tetapi pertama-tama, jalankan yamllint di atasnya untuk menghindari kejutan sintaksis:

$ yamllint folder.yaml || echo “fail”
$ ansible-playbook folder.yaml
[…]
TASK [Instantiate] ******************
fatal: [localhost]:
FAILED! => {“changed”: false,
“msg”: “file (foo) is absent, cannot continue” …

Playbook telah diproses, tetapi tugas gagal. Membaca daftar parameter file modul mengungkapkan bahwa perilakunya sangat bergantung pada nilai state . Secara khusus, tindakan default adalah mengembalikan status path .

Ubah contoh file YAML Anda untuk menyertakan state pemetaan:

---
- name: "Create a directory"
  hosts: localhost
  tasks:
  - name: "Instantiate"
    file:
      path: "foo"
      state: directory

Jalankan lagi untuk sukses:

$ yamllint folder.yaml || echo “fail”
$ ansible-playbook folder.yaml
[…]
$ ls
foo

Modul kontrol

Tidak semua modul Ansible memetakan langsung ke satu perintah. Beberapa modul memodifikasi cara Ansible memproses buku pedoman Anda. Misalnya, with_items module menyebutkan item yang Anda inginkan untuk dioperasikan oleh modul lain. Anda mungkin menganggapnya sebagai semacam do while atau for lingkaran.

Dokumentasinya menunjukkan hanya menerima satu parameter:daftar item. "Daftar" dalam terminologi YAML adalah urutan , jadi Anda tahu bahkan tanpa melihat kode contoh di dokumen bahwa setiap item harus dimulai dengan spasi (- ).

Berikut adalah iterasi baru pembuatan folder, kali ini dengan beberapa subfolder (menggunakan recurse parameter di file modul) dan parameter tambahan untuk mengatur izin file. Jangan biarkan garis tambahan menipu Anda. Ini pada dasarnya adalah kode yang sama seperti sebelumnya, hanya dengan parameter tambahan seperti yang dijelaskan dalam file dokumentasi modul, ditambah with_items modul untuk mengaktifkan iterasi:

---
- name: "Create directory structure"
  hosts: localhost
  tasks:
  - name: "Instantiate"
    file:
      path: "{{ item }}"
      recurse: true
      mode: "u=rwx,g=rwx,o=r"
      state: directory
    with_items:
      - "foo/src"
      - "foo/dist"
      - "foo/doc"

Jalankan playbook untuk melihat hasilnya:

$ yamllint folder.yaml
$ ansible-playbook folder.yaml
[…]
$ ls foo
dist doc src

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

Prinsip yang memungkinkan

Playbook Ansible adalah urutan YAML , yang terdiri dari pemetaan dan urutan .

Playbook juga berisi modul Ansible, yang masing-masing menerima parameter seperti yang ditentukan oleh pengembangnya. Parameter wajib dan opsional tercantum dalam dokumentasi modul.

Untuk menyusun buku pedoman Ansible, mulai urutan YAML yang menamai drama tersebut, lalu daftar (dalam urutan) satu atau beberapa tugas. Dalam setiap tugas, satu atau lebih modul dapat dipanggil.

Perhatikan baik-baik indentasi dengan memahami jenis data yang Anda masukkan ke dalam file YAML Anda. Mungkin membantu untuk menghindari memikirkan indentasi sebagai indikasi pewarisan logika dan, sebagai gantinya, untuk melihat setiap baris sebagai tipe data YAML-nya (yaitu, urutan atau pemetaan).

Gunakan yamllint untuk memverifikasi file YAML Anda.

Setelah Anda memahami struktur buku pedoman, itu hanya masalah mengikuti bersama dengan dokumentasi modul untuk menjalankan tugas-tugas yang Anda ingin buku pedoman Anda lakukan. Ada ratusan modul yang tersedia, jadi mulailah menjelajahinya dan lihat hal menakjubkan apa yang dapat Anda lakukan dengan alat luar biasa ini.


Linux
  1. Memahami Hukum Linus untuk keamanan sumber terbuka

  2. Perlu mengetahui teknologi untuk sysadmin junior

  3. Memahami RAM untuk Server Cloud Anda

  1. Bagaimana saya menggunakan Ansible dan anacron untuk otomatisasi

  2. 10 Modul yang memungkinkan untuk otomatisasi sistem Linux

  3. YAML untuk pemula

  1. Demystifying Memungkinkan untuk sysadmin Linux

  2. Pengantar singkat tentang peran Ansible untuk administrasi sistem Linux

  3. 6 keterampilan pemecahan masalah untuk buku pedoman Ansible