Demikian pula, jika ada pembaruan kernel yang memerlukan boot ulang OS, sebaiknya gunakan modul yang memungkinkan untuk mem-boot ulang untuk mem-boot ulang mesin, tunggu hingga turun, bangkit kembali dan untuk menanggapi perintah
Dalam panduan ini, kami akan membuat skrip untuk memperbarui cache sistem berbasis Debian dan meningkatkan paket yang diinstal. Kami juga akan menyertakan tugas untuk me-restart server jika ada pembaruan kernel yang memerlukan reboot.
Cek juga:
- SSH – Membuat dan Bekerja dengan kunci ssh
Daftar Isi
- Menggunakan modul apt yang memungkinkan untuk memperbarui semua paket
- Reboot sistem jika ada Kernel Upgrade
- Membuat file host
- Seluruh buku pedoman
- Menjalankan buku pedoman
1. Menggunakan modul apt yang memungkinkan untuk memperbarui semua paket
Sebelum melakukan upgrade paket di sistem berbasis Debian, selalu disarankan untuk melakukan refresh cache yang tepat. Ini dapat dicapai dengan menggunakan perintah ini:
sudo apt-get update
Kita dapat mencapai hal yang sama menggunakan Ansible dengan tugas ini:
- name: Update apt repo and cache on all Debian/Ubuntu boxes
apt:
update_cache: yes
force_apt_get: yes
cache_valid_time: 3600
Dimana,
- update_cache:ya – Jalankan yang setara dengan
apt-get update
perintah di semua server - force_apt_get:ya – Jangan gunakan perintah aptitude, alih-alih gunakan perintah apt-get pada kotak Debian/Ubuntu
- cache_valid_time:3600 – Perbarui cache apt jika lebih lama dari
cache_valid_time
. Opsi ini diatur dalam hitungan detik. Dalam contoh ini, disetel ke 3600 detik.
Selanjutnya kita melakukan upgrade. Kami biasanya menjalankan perintah apt-get ini untuk mencapai fungsi:
sudo apt-get upgrade -y
Ini adalah tugas yang mungkin untuk mencapai peningkatan:
- name: Upgrade all packages on servers
apt:
upgrade: dist
force_apt_get: yes
Dimana,
- peningkatan versi:dist – Jalankan yang setara dengan
apt-get upgrade
perintah di semua server Ubuntu atau Debian Linux. Dengan kata lain, tingkatkan semua paket ke versi terbaru. - force_apt_get:ya – Gunakan apt-get sebagai ganti aptitude.
2. Reboot sistem jika ada Upgrade Kernel
Jika ada upgrade Kernel, kita perlu me-reboot sistem untuk menerapkan perubahan tersebut. Jika diperlukan reboot, file dengan jalur ini /var/run/reboot-required
akan dibuat.
Yang ingin kami lakukan adalah memeriksa apakah file itu ada, lalu reboot sistem. Kita dapat mendaftarkan variabel baru jika file /var/run/reboot-required ada di sistem menggunakan status yang memungkinkan:
- name: Check if a reboot is needed on all servers register: reboot_required_file stat: path: /var/run/reboot-required get_md5: no
Dimana:
- daftar:reboot_required_file –
register
kata kunci memutuskan variabel apa untuk menyimpan hasil dan kami akan menggunakannya sebagai berikut untuk me-reboot kotak. - stat:jalur:/var/run/reboot-required – Tentukan apakah ada jalur (/var/run/reboot-required)
- get_md5:tidak – Algoritma untuk menentukan checksum file. Dalam contoh ini, saya menggunakan md5, tetapi Anda dapat menggunakan sha1, sha224, sha256, sha384, dan sha512.
Sekarang kita tahu apakah server akan di-boot ulang atau tidak, mari kita tambahkan tugas untuk mem-boot ulang server jika file tersebut ada:
- name: Reboot the server if kernel updated
reboot:
msg: "Reboot initiated by Ansible for kernel updates"
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
post_reboot_delay: 30
test_command: uptime
when: reboot_required_file.stat.exists
Dimana,
- test_command:waktu aktif – Jalankan perintah uptime pada server yang di-boot ulang dan harapkan keberhasilan untuk menentukan mesin siap untuk tugas lebih lanjut.
- kapan:reboot_required_file.stat.exists – Pertama, periksa apakah file bernama /var/run/reboot-required ada menggunakan variabel bernama reboot_required_file. Modul reboot hanya akan berfungsi jika file itu ada dan diterapkan menggunakan kondisi yang memungkinkan 'when:reboot_required_file.stat.exists'.
3. Membuat file host
Sekarang setelah kita memiliki logikanya, mari kita buat file hosts.yaml. Simpan konten ini ke file bernama hosts.yaml
.
all:
hosts:
ubuntusrv:
ansible_ssh_host: 10.2.11.10
ansible_ssh_user: ubuntu
debiansrv:
ansible_ssh_host: 10.2.11.11
ansible_ssh_user: admin
children:
allservers:
hosts:
ubuntusrv:
debiansrv:
4. Seluruh pedoman
Kita dapat menempatkan seluruh logika dalam buku pedoman. Simpan konten ini ke file upgrade.yaml
---
- name: Playbook to Update cache, upgrade packages and reboot os if necessary
hosts: allservers
become: yes
gather_facts: False
tasks:
- name: Update apt repo and cache on all Debian/Ubuntu boxes
apt:
update_cache: yes
force_apt_get: yes
cache_valid_time: 3600
- name: Upgrade all packages on servers
apt:
upgrade: dist
force_apt_get: yes
- name: Check if a reboot is needed on all servers
register: reboot_required_file
stat:
path: /var/run/reboot-required
get_md5: no
- name: Reboot the server if kernel updated
reboot:
msg: "Reboot initiated by Ansible for kernel updates"
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
post_reboot_delay: 30
test_command: uptime
when: reboot_required_file.stat.exists
5. Menjalankan buku pedoman
Pastikan Anda menyiapkan kunci ssh dan menjalankannya sebagai berikut:
ansible-playbook -i hosts.yaml upgrade.yaml -vv
Ini adalah output di server saya
➜ ansible-playbook -i hosts.yaml upgrade.yaml -vv
ansible-playbook [core 2.12.1]
config file = /Users/etowett/.ansible.cfg
configured module search path = ['/Users/etowett/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /Library/Python/3.8/site-packages/ansible
ansible collection location = /Users/etowett/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible-playbook
python version = 3.8.2 (default, Apr 8 2021, 23:19:18) [Clang 12.0.5 (clang-1205.0.22.9)]
jinja version = 3.0.3
libyaml = True
Using /Users/etowett/.ansible.cfg as config file
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
PLAYBOOK: upgrade.yaml ************************************************************************************************************************************************************
1 plays in upgrade.yaml
PLAY [Playbook to Update cache, upgrade packages and reboot os if necessary] ******************************************************************************************************
META: ran handlers
TASK [Update apt repo and cache on all Debian/Ubuntu boxes] ***********************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:7
changed: [ubuntusrv] => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"}, "cache_update_time": 1639737368, "cache_updated": true, "changed": true}
TASK [Upgrade all packages on servers] ********************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:13
ok: [ubuntusrv] => {"changed": false, "msg": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stderr": "", "stderr_lines": [], "stdout": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stdout_lines": ["Reading package lists...", "Building dependency tree...", "Reading state information...", "Calculating upgrade...", "0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded."]}
TASK [Check if a reboot is needed on all servers] *********************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:18
ok: [ubuntusrv] => {"changed": false, "stat": {"atime": 1639737351.6237016, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 8, "charset": "us-ascii", "checksum": "20f7959b87e8cd55b7c985e46d6fa38a4063037d", "ctime": 1639679787.0725238, "dev": 26, "device_type": 0, "executable": false, "exists": true, "gid": 0, "gr_name": "root", "inode": 1143, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "text/x-diff", "mode": "0644", "mtime": 1639679787.0725238, "nlink": 1, "path": "/var/run/reboot-required", "pw_name": "root", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 32, "uid": 0, "version": null, "wgrp": false, "woth": false, "writeable": true, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}}
TASK [Reboot the server if kernel updated] ****************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:24
changed: [ubuntusrv] => {"changed": true, "elapsed": 73, "rebooted": true}
META: ran handlers
META: ran handlers
PLAY RECAP ************************************************************************************************************************************************************************
ubuntusrv : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Menutup
Anda telah mempelajari cara memperbarui semua paket pada kotak Debian dan Ubuntu Linux Anda dan mem-boot ulang server jika diperlukan menggunakan buku pedoman Ansible.