web-dev-qa-db-ja.com

Ansible:変数を「コマンド」または「シェル」に追加する方法

commandまたはShellモジュールで変数を使用できますか?次のコードがあり、変数ファイルを使用していくつかの構成を提供したいと思います。

変数ファイルからHadoopバージョンを読みたいです。 ansibleの他のモジュールでは、{{ansible_version}}が、コマンドまたはシェルでは機能しません。

- 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

以下に変換したいと思います。

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

この構文でを実行すると、次のエラーがスローされるためです。

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

私は使用してみましたが、同じ問題:

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

正しい構文は何ですか?

7
Asier Gomez

command引数の完全な文字列を引用します。

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

構文エラーは、{で値を開始したためです。次のような変数で値を開始する場合:

command: {{ my_var }}

次に、whole行を引用する必要があります。

command: "{{ my_var }}"

これは、パーサーがYAMLの辞書構文と変数補間を区別できないためです。

5
Tom Manterfield