我写了一部包含一些任务的剧本,在多台服务器上运行Windows Update。要更新这些主机,我使用与Windows Update API一起使用的ansible模块。
剧本和任务如下:
- hosts:
- '{{ target }}'
strategy: free
gather_facts: no
vars:
playbook_name: A.windows-update
roles:
- { role: "A.windows-update" }
任务是:
- (Some other tasks like create a directory...)
- name: Reboot before updates
win_reboot:
reboot_timeout: 7200
- name: install windows updates (1)
win_updates:
category_names:
- Application
- Connectors
- CriticalUpdates
- DefinitionUpdates
- DeveloperKits
- FeaturePacks
- Guidance
- SecurityUpdates
- ServicePacks
- Tools
- UpdateRollups
- Updates
reboot: yes
reboot_timeout: 7200
log_path: C:\temp\windows_updates1.txt
register: update_status1
我在2台主机(Windows Server 2008 R2和2016)上测试了剧本,并且运行良好。
当我用它来更新大约30台Windows Server(其中大多数是2016年)时,它在50%的主机上失败了。他们中的一些人遇到超时,而其他人则在大约4h或5h内没有任何响应。然后我不得不停止剧本,因为这是一个富有成效的环境...
当我检查日志log_path: C:\temp\windows_updates1.txt
时,发现一些奇怪的结果:
2019-06-22 02:00:34Z Adding update 8324-a692149402a8 - SQL Server 2014 Service Pack 3
2019-06-22 02:00:34Z FATAL: A reboot is required before more updates can be installed
即使在更新过程开始之前重新启动了系统,并且在更新过程中设置了reboot: yes
,仍然发生了重新启动错误。
在另一个系统上(也是2016年),我在windows_updates1.txt
中看到以下输出:
2019-06-21 22:53:36Z Found 3 updates
2019-06-21 22:53:36Z Installing updates…
2019-06-21 22:53:36Z Adding update 39c97e25-662a-45b7-aa3e-ce3f6c1d7978 --> SQL
(文件结束,不再有日志)
有时此错误消息显示为ansible:
[WARNING]: FATAL ERROR DURING FILE TRANSFER: The pipe is being closed. (extended fault data: {u'fault_subcode': 'w:InternalError', u 'fault_code': 's:Receiver', u'wsmanfault_code':
'232', 'transport_message': u'Bad HTTP response returned from server. Code 500', 'http_status_code': 500})
所以我不知道为什么可以。.
1)...即使允许重新启动,也需要重新启动时更新失败
2)...“添加更新”后,机器停止了,并且大约4小时没有任何进展。此SQL更新大约花费了30分钟(手动)。
3)当我使用strategy: free
时,是否不能同时在所有主机上启动更新?因为在Windows中,更新日志在2h的范围内有几个不同的“开始”时间。
谢谢您关于如何使用ansible更新我的所有服务器的任何提示和想法。