Ansible (2.0.0.2) sur CentOS 7 me mouille les pieds. J'essaie d'obtenir une version à partir d'un paquetage rpm/yum installé, mais j'ai reçu un message d'avertissement lors de l'exécution du script.
Script Ansible:
---
- name: Get version of RPM
Shell: yum list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1
register: version
changed_when: False
- name: Update some file with version
lineinfile:
dest: /opt/version.xml
regexp: "<version>"
line: " <version>{{ version.stdout }}</version>"
Cela fonctionne bien et fait ce qu'il est censé faire, mais il renvoie un avertissement après son exécution:
ok: [défaut] => {"changé": false, "cmd": "yum list installé rpm personnalisé | grep rpm personnalisé | awk '{print $ 2}' | cut -d'- '-f1", " delta ":" 0: 00: 00.255406 "," end ":" 2016-05-17 23: 11: 54.998838 "," rc ": 0," start ":" 2016-05-17 23: 11: 54.743432 " , "stderr": "", "stdout": "3.10.2", "stdout_lines": ["3.10.2"], "warnings": ["Envisagez d'utiliser le module yum plutôt que d'exécuter yum"]}
[AVERTISSEMENT]: envisagez d'utiliser le module yum plutôt que d'exécuter yum
J'ai cherché des informations sur le module yum sur le site Ansible , mais je ne souhaite pas vraiment installer/mettre à jour/supprimer quoi que ce soit.
Je pouvais simplement l'ignorer ou le supprimer, mais j'étais curieux de savoir s'il y avait un meilleur moyen?
La façon dont vous le faites est parfaitement bien. La vérification à l'origine de l'avertissement est très simple et ne fait que vérifier le premier Word par rapport à une liste prédéfinie. Il ignore d'autres options et entraîne souvent des avertissements qui ne peuvent pas être résolus avec le module correspondant, comme dans le cas yum
.
Pour vous débarrasser de cet avertissement, vous pouvez simplement faire une which
:
Shell: `which yum` list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1
which
recherche le chemin complet de yum
, qui est ensuite exécuté. C'est exactement la même chose, mais du point de vue de Ansible, il appelle which
et non pas yum
, ce qui évite l'avertissement.
Si vous souhaitez désactiver ce type d'avertissements de manière globale, vous pouvez définir command_warnings = False
dans votre ansible.cfg
. (Voir docs )
Selon la documentation, vous pouvez également ajouter warn=no
à la fin de votre commande, mais cela me semble vraiment étrange, car cela semble faire partie de la commande.
Je pense qu'une façon plus indigène serait:
- name: get package version
yum:
list: package_name
register: package_name_version
- name: set package version
set_fact:
package_name_version: "{{ package_name_version.results|selectattr('yumstate','equalto','installed')|map(attribute='version')|list|first }}"
utilisez le module YUM comme suggéré. Cela aide vraiment. Vous n'avez besoin de faire aucune installation/mise à jour/suppression. De plus, cela vous donne plus d'options, comme si le paquet est déjà installé, il l'ignorerait simplement.
Vous pouvez supprimer cet avertissement dans votre cas. Utilisez args
comme:
---
- name: Get version of RPM
Shell: yum list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1
register: version
changed_when: False
args:
warn: no
Équivalent à warn=no
sur la ligne Shell:
mais plus ordonnée.
Variante of peace answer établissant un fait avec le numéro de version du paquet installé pour d'autres tests
- name: Find if custom_rpm is installed
yum:
list: custom_rpm
register: custom_rpm_yum_packages
when: ansible_os_family == "RedHat"
- name: Extract custom_rpm actual installed version
set_fact:
actual_custom_rpm_version: "{{custom_rpm_yum_packages|json_query(jsonquery)}}"
vars:
jsonquery: "results[?yumstate=='installed'].version"
when: ansible_os_family == "RedHat"
- debug:
var: actual_custom_rpm_version
Je n'ai aimé aucune de ces réponses.
- name: use command to pull version
command: '/usr/bin/rpm -qa custom-rpm --queryformat %{VERSION}'
register: version
ignore_warnings: True
changed_when: False
Je veux juste mettre à jour cette vieille discussion pour souligner qu’il existe maintenant un module de paquetage qui facilite la tâche
- name: get the rpm or apt package facts
package_facts:
manager: "auto"
- name: show Apache2 version
debug: var=ansible_facts.packages.Apache2[0].version
Que diriez-vous d’utiliser RPM pour récupérer directement la version au lieu de passer par différents canaux:
rpm -q --qf "%{VERSION}" custom-rpm
Essayez d’ajouter l’option ignore_errors
Pour y remédier. Voir la page Traitement des erreurs pour des détails et des exemples.