Ansible: How to add variables to "command" or "shell"

Asier Gomez picture Asier Gomez · Jan 10, 2017 · Viewed 31.5k times · Source

Is it possible to use variables on command or shell modules? I have the following code, and I would like to use variable file to provide some configurations:

I would like to read the Hadoop version from my variables file. On other modules of ansible I could use {{ansible_version}}, but with command or shell it doesn't works.

- 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

I would like to convert to the following:

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

Because if I run the with this syntax it throws this error:

- 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 }}"

I have try using, but same problem:

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

What is the correct syntax?

Answer

techraf picture techraf · Jan 10, 2017

Quote the full string in the command argument:

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