我用 ansible 维护了一群 EC2 服务器。服务器使用apt 模块定期更新和升级。
当我手动尝试升级服务器时,我收到以下消息:
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
linux-headers-3.13.0-29 linux-headers-3.13.0-29-generic
linux-headers-3.13.0-32 linux-headers-3.13.0-32-generic
linux-image-3.13.0-29-generic linux-image-3.13.0-32-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
有没有办法sudo apt-get autoremove
用ansible运行?
apt-get
自 2.1 版起,对选项的支持--auto-remove
现已内置到 Ansible 的apt
(选项autoremove
)中 官方文档位于http://docs.ansible.com/ansible/apt_module.html合并发生在这里。
请注意,
autoclean
从 2.4 开始也可以使用这种简化的方法只需要一项任务
您可以使用
command
(未经测试):但是,我认为自动运行可能会有风险
autoremove
。由于您过去犯过的系统管理错误(这些错误可能在您的 ansible 代码中),因此可能会在某些时候将所需的包错误地检测为可自动删除,这可能会导致服务器停止工作。另一方面,将未使用的软件包留在系统上也没什么大不了的,除非您对服务器的设置进行重大更改,否则这种情况并不常见。因此,我不会在没有人确认的情况下自动删除包裹。
这是 Antonis Christofides 提供的解决方案的一个变体。它已经过测试并且对我有用。我避免在 check 命令中使用 ignore_errors。否则,它通常采用相同的方法。
突出显示包变化的变体(第一个任务将适当地涂成绿色或黄色):
我喜欢这种简化的方法,并为我添加了一些检查和打印信息。
感谢cortopy和Dave James Miller。