W sieci można znaleźć wiele porad dotyczących aktualizacji systemów CentOS/RHEL przy użyciu Ansible. Część z nich jest dość stara i nie uwzględnia nowych ficzerów dodanych w ostatnich wersjach Ansible, inne natomiast mają jakieś błędy lub nie dostarczają informacji co właściwie się dzieje.
Ostatni poświęciłem trochę czasu na dopracowanie playbooka ansiblowego, aby w wygodny sposób móc aktualizować systemy z rodziny RedHata.
Playbook robi następujące rzeczy:
- Na początku sprawdza, czy są dostępne jakieś aktualizacji i wyświetla ich listę.
- Następnie rozpoczyna procedurę aktualizacji.
- Po udanej instalacji dodaje pakiet yum-utils, który dostarcza komendę needs-restarting, sprawdzającą czy system wymaga restartu po aktualizacji.
- Jeśli jest to konieczne, dokonuje restartu systemu oraz czeka aż system wróci do życia po restarcie.
- Na końcu wyświetla podsumowanie ile zajęła procedura restartu i czekania.
Poniżej znajdziecie taski z mojego playbooka (nie wrzucam całego playbooka z racji, że każdy ma swoje własne wymagania dotyczące aktualiacji, np. stopień jej serializacji czy też grupa hostów na której aktualizacja ma się odbyć):
- name: check packages for updates
shell: yum list updates | awk 'f;/Updated Packages/{f=1;}' | awk '{ print $1 }'
changed_when: updates.stdout_lines | length > 0
args:
warn: false
register: updates
- name: display count
debug:
msg: "Found {{ updates.stdout_lines | length }} packages to be updated:\n\n{{ updates.stdout }}"
- when: updates.stdout_lines | length > 0
block:
- name: install updates using yum
yum:
name: "*"
state: latest
- name: install yum-utils
package:
name: yum-utils
- name: check if reboot is required
shell: needs-restarting -r
failed_when: false
register: reboot_required
changed_when: false
- when: updates.stdout_lines | length > 0 and reboot_required.rc != 0
block:
- name: reboot the server if required
shell: sleep 3; reboot
ignore_errors: true
changed_when: false
async: 1
poll: 0
- name: wait for server to come back after reboot
wait_for_connection:
timeout: 600
delay: 20
register: reboot_result
- name: reboot time
debug:
msg: "The system rebooted in {{ reboot_result.elapsed }} seconds."
Mam nadzieję, że ten wpis ułatwi Wam pracę :)



dwa kw. 02 , 2022 at 19:23 /
Przed reboot dobrze jest zrobić jeszcze:
sync;
oraz na wszelki wypadek zaktualizować gruba:
grub2-mkconfig -o /boot/grub2/grub.cfg