GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan buku pedoman Ansible untuk mengelola pembaruan workstation dan server

Saya telah memutuskan untuk merampingkan proses pembaruan saya untuk sistem pelanggan yang saya dukung serta untuk perangkat Linux saya sendiri. Sementara serangkaian skrip kompleks telah membantu saya untuk waktu yang lama, keuntungan menggunakan Ansible untuk tugas ini terlalu banyak untuk dilewatkan.

Di bagian pertama dari seri artikel ini, saya membahas proses pembaruan yang sebenarnya, menetapkan struktur buku pedoman saya, dan mempresentasikan kata kunci dan komentar. Buku pedoman berisi tiga drama. Setiap permainan mengelola kategori sistem. Play 1 menangani perangkat pengontrol Ansible saya (workstation utama saya), sementara Plays 2 dan 3 mengelola server dan semua workstation yang tersisa.

Mari kita mulai artikel kedua ini dengan melihat drama kedua.

Lakon kedua

Berikut adalah seluruh permainan kedua. Tujuan dari permainan ini adalah untuk melakukan update pada firewall dan server.

Firewall harus aktif dan berjalan saat server—dan semua host lainnya—sedang diperbarui sehingga mereka dapat memiliki akses Internet untuk mengunduh paket pembaruan. Server perlu dijalankan saat firewall dan host lain sedang diperbarui untuk menyediakan DHCP dan layanan nama. Untuk mencapai itu, drama ini memperbarui kedua host tersebut satu per satu.

Nama untuk kedua host ini terdapat di [all_servers] grup di /etc/ansible/hosts file inventaris.

#######################################################################
#######################################################################
# Play 2 - Do servers 
#######################################################################
#######################################################################
- name: Play 2 - Install updates for servers yorktown and wally
  hosts: all_servers
  serial: 1
  remote_user: root
  vars:
    run: false
    reboot: false

  tasks:
#######################################################################
# Do some preliminary checking
#######################################################################
    - name: Install the latest version of the doUpdates script
      copy:
        src: /root/ansible/Updates/files/doUpdates
        dest: /usr/local/bin
        mode: 0774
        owner: root
        group: root

    - name: Check for currently available updates
      command: doUpdates -c
      register: check
    - debug: var=check.stdout_lines

#######################################################################
# Do the updates.
#######################################################################
# Install all available updates
    - name: Install all current updates
      dnf:
        name: "*"
        state: latest
      when: (check.stdout | regex_search('updates ARE available')) and run == "true"

    - name: Update the man database
      command: mandb
      when: run

    - name: Reboot if necessary and reboot extra variable is true
      reboot:
      when: (check.stdout | regex_search('reboot will be required')) and reboot == "true" and run == "true"

[ Anda mungkin juga menyukai: Pengantar Menara Ansible ]

Keseluruhan permainan kedua ini hampir sama dengan yang pertama, kecuali dua baris.

serial :Pernyataan tambahan ini memberi tahu Ansible untuk menjalankan permainan ini pada satu host pada satu waktu, yaitu secara serial dan bukan paralel. Jika semua_server grup dalam inventaris berisi sepuluh server, saya dapat menggunakan batas yang lebih tinggi, seperti dua, sehingga permainan ini akan dijalankan melawan dua server sekaligus. Dalam hal ini, saya membutuhkan wally , firewall, untuk aktif dan berjalan sehingga yorktown server memiliki akses ke Internet untuk mengunduh paket yang diperbarui. Tidak masalah urutan mana yang diperbarui kedua host ini selama keduanya tidak dilakukan secara bersamaan.

boot ulang :Ansible memiliki kemampuan reboot bawaan, sehingga kita dapat menggunakannya dalam permainan ini alih-alih perintah poweroff Linux. Fitur penting dari fungsi Ansible reboot adalah ia melakukan verifikasi bahwa reboot telah berhasil, host jarak jauh aktif dan berjalan, dan komunikasi SSH sekali lagi berfungsi. Batas waktu default untuk ini adalah 10 menit, setelah itu Ansible membuat kesalahan.

Permainan ketiga

Dan inilah drama ketiga. Drama ini memperbarui semua host yang tersisa di jaringan saya. Nama untuk host ini terdapat di [workstation] grup /etc/ansible/hosts file inventaris.

#######################################################################
#######################################################################
# Play 3 - Do all workstations except david
#######################################################################
#######################################################################
- name: Play 3 - Install updates for all workstations except david
  hosts: workstations
  strategy: free
  remote_user: root
  vars:
    run: false
    reboot: false

  tasks:
#######################################################################
# Do some preliminary checking
#######################################################################
    - name: Install the latest version of the doUpdates script
      copy:
        src: /root/ansible/Updates/files/doUpdates
        dest: /usr/local/bin
        mode: 0774
        owner: root
        group: root

    - name: Check for currently available updates
      command: doUpdates -c
      register: check
    - debug: var=check.stdout_lines

#######################################################################
# Do the updates.
#######################################################################
# Install all available updates
    - name: Install all current updates
      dnf:
        name: "*"
        state: latest
      when: (check.stdout | regex_search('updates ARE available')) and run == "true"

    - name: Reboot if necessary and reboot extra variable is true
      reboot:
      when: (check.stdout | regex_search('reboot will be required')) and reboot == "true" and run == "true"

Hanya ada satu perubahan dalam buku pedoman ini selain daftar host.

strategi :gratis strategi memberitahu Ansible untuk melakukan tugas-tugas dalam permainan ini dengan bebas. Tugas dalam permainan ini dijalankan di setiap host secepat yang bisa dilakukan oleh tuan rumah. Ini berarti bahwa beberapa host dapat menyelesaikan tugas terakhir dengan baik sebelum host lain yang lebih lambat telah menyelesaikan bahkan tugas pertama dalam buku pedoman. Ini bisa tampak seperti gratis untuk semua saat Anda membaca aliran data STDOUT.

Setiap strategi adalah plugin terpisah, dan ada beberapa plugin lain yang dapat digunakan dengan kata kunci ini. Standarnya adalah linier , yang melakukan setiap tugas di semua host sebelum melanjutkan ke tugas berikutnya. disematkan_host plugin melakukan semua tugas yang di mainkan di setiap host sebelum pindah ke host berikutnya. debug plugin menjalankan tugas secara interaktif sehingga permainan dapat di-debug.

Menjalankan buku pedoman

Saya menjalankan playbook ini menggunakan perintah:

# ansible-playbook -e "run=true reboot=true" doUpdates.yml

-e pilihan singkatan dari "variabel tambahan." Di sini ia menentukan nilai untuk dua variabel yang ditentukan dalam setiap permainan. Dalam hal ini, atur keduanya ke true memungkinkan pembaruan dilakukan dan reboot (mematikan daya) dilakukan jika diperlukan.

Saya tidak akan mereproduksi STDOUT aliran data di sini karena cukup panjang.

Pemikiran terakhir

Dengan beberapa perubahan untuk mencerminkan detail jaringan Anda, buku pedoman ini dapat digunakan untuk mengotomatiskan tugas pembaruan Anda. Melakukan pembaruan menggunakan buku pedoman yang mirip dengan milik saya adalah cara yang baik untuk mulai menggunakan Ansible. Meskipun menggunakan beberapa kata kunci yang dapat melakukan tugas-tugas kompleks, ini adalah pedoman yang relatif sederhana. Saya mulai dengan permainan pertama untuk memperbarui workstation pribadi saya, dan sisanya sebagian besar salin/tempel, dengan beberapa perubahan kecil untuk mengakomodasi kebutuhan berbagai kelompok host.

Ya, ada cara lain untuk melakukan ini. Saya mungkin bisa menggunakan tugas yang berbeda menggunakan kondisional dalam satu atau dua permainan, bukan tiga permainan. Atau saya bisa menggunakan kondisional dan blok untuk menangani penanganan host tertentu secara berbeda. Secara pribadi, saya pikir permainan individu cukup membantu memisahkan logika sehingga mengubah cara menangani tugas dalam satu permainan tidak mempengaruhi yang lain. Menurut saya, pemisahan ini juga lebih elegan karena logika keseluruhan lebih sederhana untuk ditulis, dipahami, dan lebih mudah dikelola.

[ Panduan gratis dari Red Hat:5 langkah untuk mengotomatisasi bisnis Anda. ] 

Sumber daya

Dokumen paling lengkap dan berguna yang saya temukan adalah Panduan Pengguna Ansible di situs web Ansible. Dokumen ini dimaksudkan sebagai referensi dan bukan sebagai panduan atau dokumen untuk memulai.

Opensource.com telah menerbitkan banyak artikel tentang Ansible selama bertahun-tahun, dan menurut saya sebagian besar sangat membantu kebutuhan saya. Situs web Red Hat Enable Sysadmin juga memiliki banyak artikel Ansible yang menurut saya bermanfaat.

Ada juga beberapa halaman manual yang bagus tapi singkat.


Linux
  1. Panduan Ansible:Kelola File menggunakan Ansible

  2. Raspberry Pi Firewall:Cara Menginstal dan Mengelolanya dengan Menggunakan UFW

  3. Pantau server linux menggunakan Prometheus dan Grafana

  1. Cara Mengelola Inventaris Host Statis dan Dinamis yang Mungkin

  2. Menggunakan Ansible untuk menginstal dan mengkonfigurasi Elasticsearch di Ubuntu 20.04

  3. Bagaimana cara menunggu server restart menggunakan Ansible?

  1. Bagaimana mengelola pengguna dan grup di Server FreeIPA

  2. Cara menggunakan Ansible untuk menginstal dan mengkonfigurasi Redis 6 di Ubuntu 20.04

  3. Menggunakan log server