2017-08-07 8 views
0

私は、次のタスクがあります。エスケープgolangテンプレート

template error while templating string: unexpected '.'. String: {{.ImageName}}/{{.Name}}/{{.ID}}\n\n

"The conditional check 'log_options_base != \"\"' failed.

問題はで間違いです:残念ながら、私は次の問題を抱えている

- name: Set default log options for Splunk 
    set_fact: 
    log_options_base: 
     tag: "{{ '{{' }}.ImageName{{ '}}' }}/{{ '{{' }}.Name{{ '}}' }}/{{ '{{' }}.ID{{ '}}' }}" 
     splunk-token: "{{ splunk_token }}" 
     splunk-url: "{{ splunk_url }}" 
     splunk-format: "json" 
     splunk-index: "my-dx" 
     labels: "{{ env }}" 
    when: 
    - log_driver is defined 
    - log_driver == 'splunk' 
- name: Set extendend log options for Splunk 
    set_fact: 
    log_options_ext: "{{ log_options_base | combine({ 'env': NODE_ENV }) }}" 
    when: 
    - log_options_base != "" 

をgolangテンプレートが、私の場合はすでにエスケープされています。

+0

異なるテンプレートデリミタを試してみることができるため、エスケープは必要ありません。 – jeevatkm

+0

@jeevatkmあなたは詳しく教えていただけますか? – Mazzy

+0

デフォルトでは、Goのテンプレート区切り文字は '{{}}'です。あなたはそれを変更するオプションがあります。例えば:[template.Delims](https://golang.org/pkg/text/template/#Template.Delims)を介して '[[]]'に。 – jeevatkm

答えて

1

when文はJinja2式そのものなので、もう一度あなたの文字列を評価しようとします。

あなたはこのケースで!unsafeタイピングと良いことがあります:

- name: Set default log options for Splunk 
    set_fact: 
    log_options_base: 
     tag: !unsafe "{{.ImageName}}/{{.Name}}/{{.ID}}" 

しかし、私はずっとこの構文のトリックを使用していないので、本番環境で使用する前にそれをテストし、いくつかの副作用があるかもしれません。

P.S.あなたはなぜdict var log_options_baseと空の文字列をlog_options_base != ""で比較しますか? is definedテストをしたいですか?

+0

エラーは消えましたが、' tag'プロパティは 'u 'タグのようにレンダリングされます:u' // '' – Mazzy

+0

2.2 .1、期待どおりに動作しているようです。あなたはどんなバージョンですか? –

+0

2.2.2.0ありがとう – Mazzy

関連する問題