server_update_reboot
ansible-role-server-update-reboot
Роль Ansible для обновления сервера до последних версий пакетов, перезагрузки сервера и ожидания его запуска. После этого можно добавлять другие роли для продолжения установки/настройки сервера.
Также можно исключать пакеты из обновления, обновлять только указанные пакеты или устанавливать указанные пакеты.
Работает с Redhat/CentOS и Ubuntu.
Может использоваться для обновления пакетов для Снижения Уязвимости Meltdown/Spectre для Redhat/CentOS 7 и Ubuntu 16.04
Более подробный пример можно найти в блоге: Использование Ansible для обновления Ubuntu, CentOS и Redhat
Требуется: Ansible 2.7.1 (использует модуль перезагрузки, 2.7.1 исправляет reboot_timeout)
Примечание:
Эта роль может перезагрузить сервер, если есть обновление ядра, и если переменная перезагрузки истинна (перезагрузка - это настройка по умолчанию).
Протестированные дистрибутивы
- Ubuntu 18.04 / 16.04
- CentOS & RHEL 7.x
Групповые переменные
./group_vars/centos-dev/proxy.yml
С прокси:
proxy_env:
http_proxy: http://my.internal.proxy:80
https_proxy: https://my.internal.proxy:80
Без прокси:
proxy_env: []
Настройки по умолчанию
- debug_enabled_default: true|false (по умолчанию false)
- update_default: true|false (по умолчанию true)
- reboot_default: true|false (по умолчанию true)
- server_update_reboot_pre_delay: Время (в секундах) ожидания перед выполнением задач в этой роли
- server_update_reboot_pre_reboot_delay: Время (в секундах) ожидания перед перезагрузкой
- server_update_reboot_post_reboot_delay: Время (в секундах) ожидания после перезагрузки
- server_update_reboot_reboot_timeout: Максимальное время (в секундах) ожидания перезагрузки сервера
Переменные для RHEL/CentOS:
- server_update_yum_exclude_pkgs: строка с именами пакетов, разделенная запятыми, которые нужно исключить из обновления. Можно использовать подстановочные знаки. (по умолчанию [])
- server_update_yum_install_pkgs: строка с именами пакетов, которые только обновляются. Можно использовать подстановочные знаки. (по умолчанию '*' - все пакеты)
Переменные для Ubuntu:
- server_update_apt_exclude_default: true|false. Установите true, если используете список исключений ниже (по умолчанию false)
- server_update_apt_exclude_pkgs: Список пакетов, которые не нужно обновлять (каждый на отдельной строке). Можно использовать подстановочный знак (но используйте ^ для начала совпадения, иначе совпадет много пакетов). (по умолчанию не определено)
- server_update_apt_default: full|update_specific|install (по умолчанию full)
- full: обновить все пакеты с помощью "apt-get dist-upgrade"
- update_specific: обновить только из списка в переменной server_update_apt_install_pkgs
- install: только установить из списка в переменной server_update_apt_install_pkgs
- server_update_apt_install_pkgs: Список пакетов для ТОЛЬКО обновления или установки (каждый на отдельной строке). Можно использовать подстановочный знак для совпадения с несколькими пакетами. (по умолчанию не определено)
Пример плейбука server-update-reboot.yml
Пример плейбука обновит/перезагрузит один сервер за раз (используя переменные max_fail_percentage и serial). Если хотите обновить/перезагрузить все сразу, раскомментируйте эти строки.
---
- hosts: '{{inventory}}'
max_fail_percentage: 0
serial: 1
become: yes
roles:
# - stop-applications
- server-update-reboot
# - server-config-xyz
# - start-applications
Подготовка
- установить ansible
- создать ключи
- зайти по ssh на клиент, чтобы добавить запись в файл known_hosts
- настроить authorized_keys для клиентского сервера
- выполнить команды ansible
Использование
Для Redhat/CentOS/Ubuntu
Используйте все настройки по умолчанию, чтобы обновить, перезагрузить сервер и дождаться его запуска:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=all-dev" -i hosts-dev
То же самое, но не перезагружать сервер:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=all-dev reboot_default=false" -i hosts-dev
Для Redhat/CentOS
Обновить все пакеты, кроме указанных пакетов (для RHEL):
ansible-playbook server-update-reboot.yml --extra-vars 'inventory=centos-dev server_update_yum_exclude_pkgs="mysql*, bash, openssh*"' -i hosts-dev
Обновить (или установить) только указанные пакеты (для 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
Для Ubuntu
Обновить все пакеты, кроме указанных (для 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
Обновить только указанные пакеты (для 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
Только установить указанные пакеты (для Ubuntu). Будьте осторожны с подстановочными знаками:
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
Снижение Уязвимости Spectre/Meltdown
Чтобы установить патчи для Redhat/CentOS 7 и Ubuntu 16.04 от Spectre и Meltdown (CVE-2017-5754, CVE-2017-5753, CVE-2017-5715)
Информация от Ubuntu
Информация от Redhat
Или просто установить патчи для всего, используя первую команду выше.
Для Redhat/CentOS 7 (Снижение Уязвимости 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
Для Ubuntu 16.04 (Снижение Уязвимости 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
Примечания
RHEL5
Для RHEL/CentOS 5 требуется установить зависимость: python-simplejson
Эта команда будет использовать сырой модуль для его установки:
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
Если SELinux включен или работает в разрешительном режиме, нужна зависимость: libselinux-python
Эта команда будет использовать сырой модуль для ее установки:
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/ansible-role-server-update-reboot