Ansible: How to add variables to “command” or “shell”

╄→尐↘猪︶ㄣ 提交于 2019-12-19 17:11:23

问题


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?


回答1:


Quote the full string in the command argument:

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



回答2:


The syntax error is because you started a value with {. If you begin a value with a variable like so:

command: {{ my_var }}

then you must quote the whole line:

command: "{{ my_var }}"

This is due to the parser not being able to distinguish between YAML's dictionary syntax and variable interpolation otherwise.



来源:https://stackoverflow.com/questions/41567196/ansible-how-to-add-variables-to-command-or-shell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!