我使用 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 运行?
答案1
从 2.1 版开始,Ansible 的(选项)已内置对该apt-get
选项的支持。官方文档位于--auto-remove
apt
autoremove
http://docs.ansible.com/ansible/apt_module.html
- name: Remove dependencies that are no longer required
apt:
autoremove: yes
合并发生了这里。
请注意,autoclean
从 2.4 版开始也可用
答案2
这种简化的方法只需要一个任务
- name: Autoremove unused packages
command: apt-get -y autoremove
register: autoremove_output
changed_when: "'The following packages will be REMOVED' in autoremove_output.stdout"
答案3
您可以使用以下方法command
(未经测试):
- name: Check if anything needs autoremoving
shell: apt-get -y --dry-run autoremove | grep -q "0 to remove"
register: check_autoremove
ignore_errors: True
changed_when: False
always_run: True
- name: Autoremove unused packages
command: apt-get -y autoremove
when: "check_autoremove.rc != 0"
但是,我认为自动运行可能会有风险autoremove
。由于您过去犯过系统管理错误(这些错误可能出现在您的 ansible 代码中),所需的包可能会在某个时候被错误地检测为可自动移除,这可能会导致服务器停止工作。另一方面,在系统上留下未使用的包没什么大不了的,除非您对服务器的设置进行重大更改,否则这种情况并不常见。
因此,我不会在未经人工确认的情况下自动删除包裹。
答案4
突出显示包中变化的变体(第一个任务将适当地用绿色或黄色标出):
- name: check if packages need to be autoremoved
shell: apt-get --dry-run autoremove | grep "to remove" | sed "s/^[0-9]\+ upgraded, [0-9]\+ newly installed, \([0-9]\+\) to remove and [0-9]\+ not upgraded\.$/\1/"
register: check_autoremove
changed_when: check_autoremove.stdout != "0"
- name: autoremove unused packages
command: apt-get -y autoremove
when: check_autoremove.changed