web-dev-qa-db-fra.com

Exécuter apt-get autoremove avec ansible

Je maintiens un troupeau de serveurs EC2 avec ansible. Les serveurs sont régulièrement mis à jour et mis à jour en utilisant le module apt .

Lorsque j'ai essayé manuellement de mettre à niveau un serveur, j'ai reçu le message suivant:

$ 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.

Existe-t-il un moyen d'exécuter Sudo apt-get autoremove avec ansible?

23
Adam Matan

Prise en charge de apt-get option --auto-remove est maintenant intégré au apt (option autoremove) d'Ansible à partir de la version 2.1 La documentation officielle est à http://docs.ansible.com/ansible/apt_module.html

- name: Remove dependencies that are no longer required
  apt:
    autoremove: yes

La fusion s'est produite ici .

Notez que autoclean est également disponible à partir de la version 2.4

26
oalders

Cette méthode simplifiée nécessite une seule tâche

  - name: Autoremove unused packages
    command: apt-get -y autoremove
    register: autoremove_output
    changed_when: "'The following packages will be REMOVED' in autoremove_output.stdout"
14
cortopy

Vous pouvez le faire avec command (non testé):

  - 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"

Cependant, je pense qu'il pourrait être risqué d'exécuter autoremove automatiquement. En raison d'erreurs d'administration système que vous avez commises dans le passé (celles-ci peuvent être dans votre code ansible), il est possible qu'un package nécessaire soit à un moment donné détecté à tort comme étant amovible, ce qui pourrait empêcher le serveur de fonctionner. D'un autre côté, ce n'est pas grave de laisser des paquets inutilisés sur le système, et ce n'est pas très courant à moins que vous n'apportiez un changement majeur dans la configuration du serveur.

Par conséquent, je resterais à l'écart des paquets à suppression automatique sans confirmation d'un humain.

9

Il s'agit d'une variante de la solution proposée par Antonis Christofides. Il est testé et fonctionne pour moi. J'ai évité d'utiliser ignore_errors dans la commande check. Sinon, il adopte généralement la même approche.

- name: Check if packages need to be autoremoved
  command: apt-get --dry-run autoremove
  register: check_autoremove
  changed_when: False
- name: Autoremove unused packages
  command: apt-get -y autoremove
  when: "'packages will be REMOVED' in check_autoremove.stdout"
6
Marwan Alsabbagh

Une variation qui met en évidence le changement dans les packages (la première tâche sera de couleur appropriée vert ou jaune):

  - 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
2
Martin Tapp

J'aime cette méthode simplifiée , et j'ajoute un message de vérification et d'impression pour moi.

#!/usr/bin/env ansible-playbook
---

- name: Autoremove 'apt' package for Debian, Ubuntu
  hosts: all

  pre_tasks:
    - name: check storage space - before
      Shell: df -h
      register: check_storage_space_before

    - name: print storage space
      debug:
        msg: "{{ check_storage_space_before.stdout_lines }}"

    - name: apt autoremove check 
      command: apt-get -y --dry-run autoremove
      register: apt_autoremove_output

    - name: print apt autoremove packages
      debug:
        msg: "{{ apt_autoremove_output.stdout_lines }}"

  tasks:    
    - name: autoremove unused packages
      become: yes
      command: apt-get -y autoremove
      changed_when: "'The following packages will be REMOVED' in apt_autoremove_output.stdout"

  post_tasks:
    - name: check storage space - after
      Shell: df -h
      register: check_storage_space_after

    - name: print storage space
      debug:
        msg: "{{ check_storage_space_after.stdout_lines }}"

# vim: ft=ansible :

Merci pour cortopy et Dave James Miller .

1
Chu-Saing Lai