2017-06-21 4 views
1

私は非常に単純なことをすることができません。私の仕事で可能なconcatデフォルト変数とリテラル文字列

私は、これは私にエラーを与える

- name: "Uploading File" 
    copy: 
    src: "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso 
    dest: /opt/temp/filename.iso 

パスを作成するために、文字列リテラルを持つ2つのデフォルトの変数をCONCATしようとしています。どのように変数とリテラル文字列を連結するか?

答えて

1

まず、YAML

  1. あなたの構文はYAMLに準拠する必要があります。

    文字列(スカラー)は、通常引用符で囲まれていないですが、二重引用符( ")で囲まれてもよいし、単一引用符( ')

    だから、あなたが書くことができ、次のいずれか。

    parameter: value 
    

    または

    parameter: 'value' 
    

    または

    parameter: "value" 
    

    次は有効なYAMLではありません。

    "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso 
    
  2. 中括弧を使用してvalue開始が{ Ansibleにしようとした場合それを辞書として解析する(YAMLはsupですJSONのサセットなので、中括弧で囲まれた辞書/連想配列は有効な構文です)。フォームキーで:():

    連想配列は、コロン・スペースを使用して表される値、中括弧内の1行に1つ又は同封のいずれか({})とコンマスペース(、)で区切られました。

    有効なJSON配列でない場合、Anipalは構文エラーを報告します。

は第二に、Jinja2の

  • Ansibleのパラメータの大部分は、(whenの値は顕著な例外である)Jinja2のテンプレート(文字列)です。あなたは{{}}(ない引用符が含まれない)で区切らJinja2 expressionを使用Ansible変数値を参照するために

    {{ variable }} 
    

    あなたのケースのための変数値と文字列を連結するには、2つの方法があります。

    {{ installer_iso_src_location }}/{{ installer_version }}/filename.iso 
    

    または

    {{ installer_iso_src_location + '/' + installer_version + '/filename.iso' }} 
    

は今、YAMLとJinja2のは、組み合わさ:

  • をお使いのパラメータ(文字列)が{文字で始まり、それが有効なYAML/JSON辞書ではありませんので、YAMLパーサがポイント2を参照してください(失敗します。上記のYAML要件の)。結果は

    は、YAMLパーサによって文字列とみなされるためにあなたの価値のために、あなたは引用符で値(Jinja2のテンプレート)を囲む必要があります。

    src: "{{ installer_iso_src_location }}/{{ installer_version }}/filename.iso" 
    

    または

    src: "{{ installer_iso_src_location + '/' + installer_version + '/filename.iso' }}" 
    

    または他の組み合わせの一重引用符と二重引用符。お使いのパラメータ値が{以外の文字列で起動した場合

  • 、あなたはポイント以上の最初の例のように、引用符なしでそれを使用することができます。


最後に、値がYAMLのルールに従うことが期待されていない2つの注目すべき例外があります。

    =
  • 無料で参加し、キーと値のペアを持つモジュールの
  • Ansibleの速記構文は、 -formパラメータ(例えば、commandまたはshellモジュールの場合)
関連する問題