使用 ansible 运行 apt-get autoremove

使用 ansible 运行 apt-get autoremove

我使用 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-removeaptautoremovehttp://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

相关内容