2016-12-09 2 views
1

Bei ansible Jinja2 Vorlage:Wie kann ich zusätzliche Leerzeichen zwischen Makroaufrufen in Ansible Jinja2-Vorlagen entfernen?

{% 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) }} 

mit service Variablendefinition:

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

wie kann ich die Vorlage ändern in resultierende Ausgabe zusätzliche Zeilenumbrüche zu beseitigen:

# Ansible managed 

[Unit] 
Description=Test Template 


Requires=multi-user.target 

, so dass es sieht stattdessen so aus:

# Ansible managed 

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

?

Antwort

1

Beachten Sie Folgendes:

{% 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 

Es produziert:

# 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 

Obwohl Dokumentation auf whitespace control states "ein einzelnes Newline falls vorhanden abgezogen wird", ist es nicht zu Variable gilt Substitution, auch wenn das Ergebnis des Makros am Ende ein Newline-Zeichen enthält, wird diese spezielle Newline nicht entfernt.

Genau wie es nicht entfernt ist, wenn Sie definieren:

variable_with_newline: "value\n" 

und eine Vorlage aus:

start-{{ variable_with_newline }}-end 

es produziert:

start-value 
-end 

an der Vorlage zu beheben entferne entweder die fest codierten Zeilenumbrüche:

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

oder explizite Leerzeichen Strippen hinzufügen:

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

oder

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

Warum jede Makroreferenz einen zusätzlichen Raum erzeugen? –

+0

Ja, ich meinte "zusätzliche Zeilen" oder Zeilenumbrüche. Ich vermute, dass ich fälschlicherweise erwartet habe, dass Jinga2 automatisch die abschließende neue Zeile von jeder Makroreferenz entfernt, ähnlich wie sie es für jede Anweisung "{%%}" tut. –

+0

Beachten Sie, dass ich den Bindestrich zu '{% end macro -%}' hinzugefügt habe, um Leerraum zwischen der Makrodefinition und '# {{ansible_managed}}' zu eliminieren. –

Verwandte Themen