Est-il possible d'utiliser des variables sur les modules command
ou Shell
? J'ai le code suivant, et je voudrais utiliser un fichier variable pour fournir certaines configurations:
Je voudrais lire la version Hadoop de mon fichier de variables. Sur d'autres modules de ansible je pourrais utiliser {{ansible_version}}
, mais avec la commande ou Shell cela ne fonctionne pas.
- name: start ZooKeeper HA
command: hadoop-2.7.1/bin/hdfs zkfc -formatZK -nonInteractive
- name: start zkfc
Shell: hadoop-2.7.1/sbin/hadoop-daemon.sh start zkfc
Je voudrais convertir ce qui suit:
- name: Iniciar zkfc
command: {{ hadoop_version }}/sbin/hadoop-daemon.sh start zkfc
Parce que si j'exécute le avec cette syntaxe, il renvoie cette erreur:
- name: inicializar estado ZooKeeper HA
command: {{hadoop_version}}/bin/hdfs zkfc -formatZK -nonInteractive
^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
- {{ foo }}
Should be written as:
with_items:
- "{{ foo }}"
J'ai essayé d'utiliser, mais même problème:
- name: Iniciar zkfc
command: "{{ hadoop_version }}"/sbin/hadoop-daemon.sh start zkfc
Quelle est la syntaxe correcte?
Citez la chaîne complète dans l'argument command
:
- name: Iniciar zkfc
command: "{{ hadoop_version }}/sbin/hadoop-daemon.sh start zkfc"
L'erreur de syntaxe est due au fait que vous avez commencé une valeur avec {
. Si vous commencez une valeur avec une variable comme ceci:
command: {{ my_var }}
alors vous devez citer la ligne entier:
command: "{{ my_var }}"
Cela est dû au fait que l'analyseur n'est pas en mesure de faire la distinction entre la syntaxe du dictionnaire de YAML et l'interpolation variable autrement.