Ich habe ein ähnliches Problem: Ich muss ein JSON-Dokument veröffentlichen, das aus einer jinja2-Vorlage erstellt wurde, die einige Variablen für go-Vorlagen enthält (ja, ich weiß :-P), z
"NAME_TEMPLATE": %{{service_name}}.%{{stack_name}}.%{{environment_name}}
Der Versuch, diesen Teil der Vorlage zwischenzäunen
{% raw %} ... {% endraw %}
hat nicht funktioniert, weil es in ansible eine Art Magie gibt, die die Vorlage und die variable Substitution zweimal ausführt (da bin ich mir nicht sicher, aber es sieht definitiv so aus).
Sie erhalten "undefinierte Variable service_name
", wenn Sie versuchen, die Vorlage zu verwenden ...
Also habe ich eine Kombination aus !unsafe
und verwendet {% raw %} ... {% endraw %}
, um eine Tatsache zu definieren, die später in der Vorlage verwendet wird.
- set_fact:
__rancher_init_root_domain: "{{ rancher_root_domain }}"
#!unsafe: try to trick ansible into not doing substitutions in that string, then use %raw% so the value won't substituted another time
__rancher_init_name_template: !unsafe "{%raw%}%{{service_name}}.%{{stack_name}}.%{{environment_name}}{%endraw%}"
- name: build a template for a project
set_fact:
__rancher_init_template_doc: "{{ lookup('template', 'templates/project_template.json.j2') }}"
Die Vorlage enthält Folgendes:
"ROOT_DOMAIN":"{{__rancher_init_root_domain}}",
"ROUTE53_ZONE_ID":"",
"NAME_TEMPLATE":"{{__rancher_init_name_template }}",
"HEALTH_CHECK":"10000",
und die Ausgabe ist in Ordnung:
"NAME_TEMPLATE": "%{{service_name}}.%{{stack_name}}.%{{environment_name}}",