alemorvan.patchmanagement
补丁管理
由于系统更新通常不仅仅是 yum update -y
,因此 patchmanagement
是一个 Ansible 角色,用于轻松管理 RedHat、CentOS、Debian 或 Ubuntu 操作系统下服务器的更新过程及其相关事务。
在进行补丁管理时,如果你想:
- 在监控中将目标设置为维护模式
- 在过程开始或结束时发送消息
- 在出现故障时采取行动
- 等等
这个角色将使你的生活更轻松。
无论如何,请记住,你绝对不应直接连接到服务器以进行升级。
需求
没有特别的要求。
功能
- 收集系统的一些信息 - IP 地址和路由、正在运行的进程、挂载点(用于故障排除!别忘了!)
- 对所有服务器执行自定义任务(见
pm_before_update_tasks_file
变量) - 对目标服务器执行自定义任务(见示例剧本章节)
我们的主要目标:
- 使用 apt 或 yum 给服务器打补丁
然后:
- 设置 Ansible 事实,以当前日期和所需的环境变量。
- 对目标服务器执行自定义任务(见示例剧本章节)
- 对所有服务器执行自定义任务(见
pm_after_update_tasks_file
变量)
角色变量
pm_restart_after_update
: 默认值true
更新后目标是否重启。这确保了最新内核正在运行,并且服务器及其服务可以重启。建议定期进行。
pm_logpath
: 默认值/etc/ansible/facts.d/PM.log
存储成功或失败的补丁管理日期的路径。
pm_date_format
: 默认值"{{ ansible_date_time.date }}-{{ ansible_date_time.time }}"
事实和日志路径中的日期格式化方式?
pm_fact_name
: 默认值pm
我们希望使用的事实名称?
pm_set_env_variable
: 默认值true
pm_env_file_path
: 默认值/etc/profile.d/last_pm_date.sh
我们是否设置一个包含 last_pm 日期的环境变量,以及脚本存储的位置?
pm_manage_yum_clean_all
: 默认值true
更新前执行 yum clean all
。如果你之前下载过 RPM,建议设置为 false
。
pm_manage_apt_clean
: 默认值true
更新前执行 apt clean。
pm_manage_apt_autoremove
: 默认值true
自动移除不需要的 deb 包。
pm_apt_verbose_package_list
: 默认值false
打印 apt 结果列表。
pm_before_update_tasks_file
:
例如 custom_tasks/pm_before_update_tasks_file.yml
。你可以将角色配置为在更新服务器之前执行此任务文件。目标文件中的每个任务都将被执行。
可以考虑在一些任务中加入发送消息、拍摄快照、设置维护模式等。
pm_after_update_tasks_file
:
例如 custom_tasks/pm_after_update_tasks_file.yml
。你可以将角色配置为在更新服务器之后执行此任务文件。目标文件中的每个任务都将被执行。
示例剧本
配置剧本相当简单,如下所示:
- name: 开始补丁管理
hosts: servers
vars:
pm_before_update_tasks_file: custom_tasks/pm_before_update_tasks_file.yml
pm_after_update_tasks_file: custom_tasks/pm_after_update_tasks_file.yml
tasks:
- name: "包含补丁管理"
include_role:
name: "alemorvan.patchmanagement"
除了这个剧本之外,你还可以为每个服务器创建两个其他任务文件,在升级它们之前和之后使用。这在例如从负载均衡器中移除节点、清除缓存、重启服务等操作时非常有用。
与变量 pm_before_update_tasks_file
和 pm_after_update_tasks_file
(针对所有目标执行操作的任务文件)不同,这些文件专注于特定于单个服务器的操作。
在剧本目录中,创建 custom_tasks
目录,并命名文件为 before_pm_{{ inventory_hostname_short }}_custom_tasks.yml
和 after_pm_{{ inventory_hostname_short }}_custom_tasks.yml
。
- name: 执行此服务器的自定义任务,定义在 after_pm_{{ inventory_hostname_short }}_custom_tasks.yml 文件中。
debug:
msg: "这个任务是定义在 after_pm_{{ inventory_hostname_short }}_custom_tasks.yml 文件中的自定义任务"
Molecule 测试
你可以通过 molecule 和 docker 测试这个角色:
$ molecule test
查看 molecule/default/converge.yml
以获取该角色使用良好的示例。
许可
MIT
作者信息
该角色最初由 Antoine Le Morvan 为 Vivalto Sante 编写,基于 Nicolas Martin 和 Claranet France / BU RMP(Ismaël Ouattara 和 EliE Deloumeau)团队的工作。
Ansible role to manage patchs managements on Linux for huge infrastructure with custom tasks per server basis or for all servers.
ansible-galaxy install alemorvan.patchmanagement