web-dev-qa-db-fra.com

Ansible: comment ajouter des variables à "commande" ou "shell"

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?

7
Asier Gomez

Citez la chaîne complète dans l'argument command:

- name: Iniciar zkfc
  command: "{{ hadoop_version }}/sbin/hadoop-daemon.sh start zkfc"
16
techraf

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.

5
Tom Manterfield