ryandaniels.server_update_reboot
ansible-role-server-update-reboot
Rola Ansible do aktualizacji serwera do najnowszych pakietów, restartu serwera oraz oczekiwania na jego uruchomienie. Po tej roli można dodać kolejne role, aby kontynuować instalację lub konfigurację serwera.
Można również wykluczyć pakiety z aktualizacji, zaktualizować tylko określone pakiety lub zainstalować określone pakiety.
Działa z RedHat/CentOS i Ubuntu.
Może być używana do aktualizacji pakietów w celu łatania Meltdown/Spectre dla RedHat/CentOS 7 i Ubuntu 16.04
Bardziej szczegółowy przykład można znaleźć w wpisie na blogu: Używanie Ansible do aktualizacji Ubuntu, CentOS i RedHat
Wymaga: Ansible 2.7.1 (używa modułu reboot, a wersja 2.7.1 naprawia reboot_timeout)
Uwaga:
Ta rola może zrestartować serwer, jeśli wystąpi aktualizacja jądra i jeśli zmienna restartowa jest ustawiona na true (restart jest domyślnym ustawieniem).
Testowane dystrybucje
- Ubuntu 18.04 / 16.04
- CentOS & RHEL 7.x
Zmienne grupowe
./group_vars/centos-dev/proxy.yml
Z proxy:
proxy_env:
http_proxy: http://my.internal.proxy:80
https_proxy: https://my.internal.proxy:80
Bez proxy:
proxy_env: []
Ustawienia domyślne
- debug_enabled_default: true|false (domyślne false)
- update_default: true|false (domyślne true)
- reboot_default: true|false (domyślne true)
- server_update_reboot_pre_delay: Czas (w sekundach) na poczekanie przed rozpoczęciem zadań w tej roli
- server_update_reboot_pre_reboot_delay: Czas (w sekundach) na poczekanie przed restartem
- server_update_reboot_post_reboot_delay: Czas (w sekundach) na poczekanie po restarcie
- server_update_reboot_reboot_timeout: Maksymalny czas (w sekundach) na oczekiwanie na restart serwera
Zmienne dla RHEL/CentOS:
- server_update_yum_exclude_pkgs: ciąg oddzielony przecinkami pakietów do wykluczenia z aktualizacji. Można używać symboli wieloznacznych. (domyślne [])
- server_update_yum_install_pkgs: ciąg oddzielony przecinkami pakietów, które będą TYLKO aktualizowane. Można używać symboli wieloznacznych. (domyślne '*' oznaczające wszystkie pakiety)
Zmienne dla Ubuntu:
- server_update_apt_exclude_default: true|false. Ustaw na true, jeśli używasz poniższej listy wykluczeń (domyślne false)
- server_update_apt_exclude_pkgs: Lista pakietów, które nie będą aktualizowane (każdy w osobnej linii). Można używać symboli wieloznacznych (ale użyj ^ na początku dopasowania, aby nie dopasować za dużo). (domyślne nieokreślone)
- server_update_apt_default: full|update_specific|install (domyślne full)
- full: aktualizuje wszystkie pakiety za pomocą "apt-get dist-upgrade"
- update_specific: aktualizuje tylko z listy w zmiennej server_update_apt_install_pkgs
- install: instaluje tylko z listy w zmiennej server_update_apt_install_pkgs
- server_update_apt_install_pkgs: Lista pakietów do TYLKO aktualizacji lub instalacji (każdy w osobnej linii). Można używać symboli wieloznacznych. (domyślne nieokreślone)
Przykład playbooka server-update-reboot.yml
Poniższy przykład playbooka zaktualizuje/zrestartuje jeden serwer na raz (używając zmiennych max_fail_percentage i serial). Jeśli chcesz zaktualizować/zrestartować wszystko jednocześnie, odkomentuj te linie.
---
- hosts: '{{inventory}}'
max_fail_percentage: 0
serial: 1
become: yes
roles:
# - stop-applications
- server-update-reboot
# - server-config-xyz
# - start-applications
Przygotowanie
- zainstaluj ansible
- utwórz klucze
- ssh do klienta, aby dodać wpis do pliku known_hosts
- skonfiguruj autoryzowane klucze klienta
- uruchom komendy ansible
Użycie
Dla Redhat/CentOS/Ubuntu
Użyj wszystkich domyślnych ustawień, aby: zaktualizować, zrestartować serwer i poczekać na jego uruchomienie:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=all-dev" -i hosts-dev
To samo, co powyżej, lecz bez restartu serwera:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=all-dev reboot_default=false" -i hosts-dev
Dla Redhat/CentOS
Zaktualizuj wszystkie pakiety z wyjątkiem określonych pakietów (dla RHEL):
ansible-playbook server-update-reboot.yml --extra-vars 'inventory=centos-dev server_update_yum_exclude_pkgs="mysql*, bash, openssh*"' -i hosts-dev
Zaktualizuj (lub zainstaluj) tylko określone pakiety (dla RHEL):
ansible-playbook server-update-reboot.yml --extra-vars "inventory=centos-dev server_update_yum_install_pkgs='kernel-*, iwl*firmware, microcode_ctl, dracut'" -i hosts-dev
Dla Ubuntu
Zaktualizuj wszystkie pakiety z wyjątkiem określonych pakietów (dla Ubuntu):
ansible-playbook server-update-reboot.yml --extra-vars 'inventory=ubuntu-dev server_update_apt_exclude_default=true' --extra-vars '{"server_update_apt_exclude_pkgs": [bash, openssl, ^mysql*, ^openssh*]}' -i hosts-dev
Zaktualizuj tylko określone pakiety (dla Ubuntu):
ansible-playbook server-update-reboot.yml --extra-vars "inventory=ubuntu-dev server_update_apt_default=update_specific" --extra-vars "{'server_update_apt_install_pkgs': [linux-firmware, linux-generic, linux-headers-generic, linux-image-generic, intel-microcode, openssh*]}" -i hosts-dev
Tylko zainstaluj określone pakiety (dla Ubuntu). Zachowaj ostrożność z symbolami wieloznacznymi:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=ubuntu-dev server_update_apt_default=install" --extra-vars "{'server_update_apt_install_pkgs': [bash, openssh-server]}" -i hosts-dev
Łatanie Spectre/Meltdown
Aby załatać Redhat/CentOS 7 i Ubuntu 16.04 dla Spectre i Meltdown (CVE-2017-5754, CVE-2017-5753, CVE-2017-5715)
Informacje z Ubuntu
Informacje z Redhat
Lub po prostu załataj wszystko używając pierwszej komendy powyżej.
Dla Redhat/CentOS 7 (łatanie Spectre/Meltdown)
ansible-playbook server-update-reboot.yml --extra-vars "inventory=centos-dev server_update_yum_install_pkgs='kernel-*, iwl*firmware, microcode_ctl, dracut'" -i hosts-dev
Dla Ubuntu 16.04 (łatanie Spectre/Meltdown)
ansible-playbook server-update-reboot.yml --extra-vars "inventory=ubuntu-dev server_update_apt_default=update_specific" --extra-vars "{'server_update_apt_install_pkgs': [linux-firmware, linux-generic, linux-headers-generic, linux-image-generic, intel-microcode]}" -i hosts-dev
Uwagi
RHEL5
RHEL/CentOS 5 ma zależność, którą należy zainstalować: python-simplejson
Ta komenda zainstaluje ją używając modułu raw:
ansible centos5 -m raw -a "yum install -y python-simplejson" --become --ask-pass --become-method=su --ask-become-pass --extra-vars="ansible_ssh_user=username123" -i hosts-dev
SELinux
Jeśli SELinux jest włączony w trybie permissive, potrzebna jest zależność: libselinux-python
Ta komenda zainstaluje ją używając modułu raw:
ansible centos5 -m raw -a "yum install -y libselinux-python" --become --ask-pass --become-method=su --ask-become-pass --extra-vars="ansible_ssh_user=username123" -i hosts-dev
ansible-galaxy install ryandaniels.server_update_reboot