J'utilise Ansible pour déployer mon projet et j'essaie de vérifier si un paquet spécifié est installé, mais j'ai un problème avec cette tâche, voici la tâche:
- name: Check if python-apt is installed
command: dpkg -l | grep python-apt
register: python_apt_installed
ignore_errors: True
Et voici le problème:
$ ansible-playbook -i hosts idempotent.yml
PLAY [lxc-Host] ***************************************************************
GATHERING FACTS ***************************************************************
ok: [10.0.3.240]
TASK: [idempotent | Check if python-apt is installed] *************************
failed: [10.0.3.240] => {"changed": true, "cmd": ["dpkg", "-l", "|", "grep", "python-apt"], "delta": "0:00:00.015524", "end": "2014-07-10 14:41:35.207971", "rc": 2, "start": "2014-07-10 14:41:35.192447"}
stderr: dpkg-query: error: package name in specifier '|' is illegal: must start with an alphanumeric character
...ignoring
PLAY RECAP ********************************************************************
10.0.3.240 : ok=2 changed=1 unreachable=0 failed=0
Pourquoi est illégal ce caractère '|'.
De la doc:
command - Exécute une commande sur un noeud distant
Le module de commande prend le nom de la commande suivi d'une liste d'arguments délimités par des espaces. La commande donnée sera exécutée sur tous les nœuds sélectionnés. Il ne sera pas traité par le biais du shell. Par conséquent, les variables telles que $ HOME et les opérations "<", ">", "|" et "&" ne fonctionneront pas (utilisez le module Shell si vous avez besoin de ces fonctionnalités).
Shell - Exécute une commande en nœuds
Le module Shell prend le nom de la commande suivi d'une liste d'arguments délimités par des espaces. Il est presque identique au module de commande mais exécute la commande via un shell (/ bin/sh) sur le nœud distant.
Par conséquent, vous devez utiliser Shell: dpkg -l | grep python-apt
.
lire à propos de module de commande dans la documentation Ansible :
Il ne sera pas traité par le biais du shell. Les opérations telles que "<", ">", "|" et "&" ne fonctionneront pas.
Comme il est recommandé, utilisez le module Shell :
- name: Check if python-apt is installed
Shell: dpkg -l | grep python-apt
register: python_apt_installed
ignore_errors: True
Pour ce que cela vaut, vous pouvez vérifier/confirmer l’installation dans un environnement Debian en utilisant la commande apt
:
- name: ensure python-apt is installed
apt: name=python-apt state=present