ryandaniels.server_update_reboot
ansible角色-服务器更新重启
Ansible角色用于将服务器更新到最新的软件包,重启服务器,并等待服务器启动。在此之后可以添加更多角色来继续安装/配置服务器。
还可以排除不更新的软件包,仅更新指定的软件包,或安装指定的软件包。
支持Redhat/CentOS和Ubuntu。
可以用于更新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
熔断/幽灵漏洞修复
要修补 Redhat/CentOS 7 和 Ubuntu 16.04,以应对 幽灵漏洞 和 熔断漏洞(CVE-2017-5754, CVE-2017-5753, CVE-2017-5715)
来自 Ubuntu 的信息
来自 Redhat 的信息
或者仅使用上述第一个命令修补所有内容。
对于 Redhat/CentOS 7(熔断/幽灵漏洞修复)
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(熔断/幽灵漏洞修复)
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
此命令将使用 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
如果启用了 SELinux 或处于宽松模式,则需要一个依赖:libselinux-python
此命令将使用 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