2016-12-09 5 views
1

考えるAnsible Jinja2のテンプレート:service変数定義とAnja Jinja2のテンプレートでマクロ呼び出しの間に余分な空白を取り除くにはどうしたらいいですか?

{% macro directive(name, value) %} 
{% if value is defined %} 
{{ name }}={{ value }} 
{% endif %} 
{% endmacro -%} 

# {{ ansible_managed }} 

[Unit] 
{{ directive('Description', service.description) }} 
{{ directive('Documentation', service.documentation) }} 
{{ directive('Requires', service.requires) }} 

:それその

# Ansible managed 

[Unit] 
Description=Test Template 


Requires=multi-user.target 

service: 
    description: Test Template 
    requires: multi-user.target 

は、どのように私は、結果の出力に余分な改行を排除するために、テンプレートを変更することができます代わりに次のようになります:

# Ansible managed 

[Unit] 
Description=Test Template 
Requires=multi-user.target 

答えて

1

は、次のことを考えてみましょう:

{% macro directive(name, value) %} 
{% if value is defined %} 
{{ name }}={{ value }} # a newline hardcoded in macro follows 
{% endif %} 
{% endmacro -%} 

# {{ ansible_managed }} 

[Unit 1] 
{{ directive('Description', service.description) }}# 1st hardcoded newline follows 
{{ directive('Documentation', service.documentation) }}# 2nd hardcoded newline follows 
{{ directive('Requires', service.requires) }}# 3rd hardcoded newline follows 

それが生成する:

# Ansible managed 

[Unit 1] 
Description=Test Template # a newline hardcoded in macro follows 
# 1st hardcoded newline follows 
# 2nd hardcoded newline follows 
Requires=multi-user.target # a newline hardcoded in macro follows 
# 3rd hardcoded newline follows 

でもwhitespace control状態に関する資料かかわらず、「存在場合、単一の最後の改行が取り除かれる」、それは変数には適用されません。マクロの結果に最後に改行文字が含まれていても、この改行は取り除かれません。

variable_with_newline: "value\n" 

とテンプレートを実行します:

start-{{ variable_with_newline }}-end 

それが生成する:

start-value 
-end 

をテンプレートに修正するには、ユーザーが定義した場合、取り除かていないと同じように

ハードコードされた改行を削除するか、

[Unit] 
{{ directive('Description', service.description) }}{{ directive('Documentation', service.documentation) }}{{ directive('Requires', service.requires) }} 

または明示的な空白のストリッピング追加:なぜ、各マクロ参照が余分なスペースを生成しない

[Unit] 
{{ directive('Description', service.description) }} 
{{- directive('Documentation', service.documentation) }} 
{{- directive('Requires', service.requires) }} 

または

[Unit] 
{{ directive('Description', service.description) -}} 
{{ directive('Documentation', service.documentation) -}} 
{{ directive('Requires', service.requires) }} 
+0

を? –

+0

はい、私は "余分な行"または改行を意味しました。私は間違いなく、Jinga2がそれぞれの文 '{%%}'と同様に、各マクロ参照から末尾の改行を自動的に削除すると思いました。 –

+0

マクロ定義と '#{{ansible_managed}}'の間の空白をなくすため、ダッシュを '{%end macro - %}'に追加しました。 –

関連する問題