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