Por favor, tome este exemplo de jogo de trabalho:
- name: Display the URL
hosts: all
gather_facts: false
vars:
- host_domain: "testing.example.com"
- default_url: "http://def.localhost.{{ host_domain }}"
- my_url: "{{ some_undeclared_var | default(default_url) }}"
tasks:
- debug:
msg: "{{ my_url }}"
Isso funciona bem. A saída é a esperada:
msg: http://def.localhost.testing.example.com
Eu gostaria de definir o valor padrão em linha, sem primeiro declarar o default_url
var. Algo assim:
vars:
- host_domain: "testing.example.com"
- my_url: "{{ some_undeclared_var | default('http://def.localhost.{{ host_domain }}') }}"
Já tentei várias técnicas:
my_url: "{{ some_undeclared_var | default(\'http://def.localhost.{{ host_domain }}\') }}"
my_url: "{{ some_undeclared_var | default(\"http://def.localhost.{{ host_domain }}\") }}"
my_url: "{{ some_undeclared_var | default('http://def.localhost.'{{ host_domain }}) }}"
my_url: "{{ some_undeclared_var | default('http://def.localhost.'host_domain) }}"
Eu não consigo descobrir a sintaxe para isso. Alguém pode ajudar?
Você nunca aninha
{{...}}
marcadores de modelo. Dentro de um contexto de template Jinja, apenas use a sintaxe Jinja regular para se referir a variáveis. Consulte os documentos para obter detalhes.Assim, em vez de:
Você escreveria:
Aqui está um exemplo executável:
Isso produz:
Você também pode escrever
default('http://def.localhost.%s' % (host_domain))
(usando a%
formatação -style) oudefault('http://def.localhost.' ~ host_domain)
(usando o operador de concatenação de strings).isso funciona:
my_url: "{{ some_undeclared_var | default('http://def.localhost.' + host_domain) }}"
(concatenar strings)