我正在尝试自动化我们的修补并偶然发现了 Ansible。
我已经运行了win_update 模块这可以用于我们 80% 的服务器,但其他服务器则需要重启程序。
我们的一些服务器组需要按顺序更新/重启,包括一些服务。使用 Ansible 可以做到这一点吗?
场景可能是:
- 服务器 A - B - C 需要关闭
- 服务器D更新,重启,启动手动服务A-B-C
- 服务器C更新,重启,启动手动服务A-B
- ...
答案1
是的,您可以将滚动更新和附加任务写入 Ansible 剧本中。
特定于群组的行为可以来自 group_vars,或者仅在某些群组上运行的附加剧情。
---
# playbook
- name: Pre OS update
hosts: A,B,C
roles:
# bring services down or other prep steps
- update_pre
- name: Update and reboot
hosts: A,B,C,D
order: inventory
# Rolling updates: do play to completion one host at a time
serial: 1
roles:
- update_servers
# Roles enable reuse: different hosts but same tasks
# Move groups to their own play for a desired order
# or for a different sequence of tasks
- name: Update and reboot special group E
hosts: E
roles:
- update_pre
- update_servers
- update_post
...
---
# roles/update_servers/tasks/main.yml
- win_updates:
category_names: '*'
# win_reboot task probably not required
reboot: yes
# If not a Windows service, add other tasks here
# or in follow-up roles
- name: Post update service bounce
win_service:
name: "{{ item }}"
state: restarted
loop: "{{ update_restart_services | default([]) }}"
...
---
# group_vars/C.yml
update_restart_services:
- alpha
- beta
...
---
# group_vars/D.yml
update_restart_services:
- alpha
- beta
- gamma
...