请以这个工作游戏为例:
- 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 }}"
这工作正常。输出如预期:
msg: http://def.localhost.testing.example.com
我想在线设置默认值,而无需先声明default_url
var。像这样的东西:
vars:
- host_domain: "testing.example.com"
- 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 }}) }}"
my_url: "{{ some_undeclared_var | default('http://def.localhost.'host_domain) }}"
我似乎无法弄清楚这个的语法。任何人都可以帮忙吗?
你永远不会嵌套
{{...}}
模板标记。在 Jinja 模板上下文中,只需使用常规 Jinja 语法来引用变量。有关详细信息,请参阅文档。所以,而不是:
你会写:
这是一个可运行的示例:
这输出:
您还可以编写
default('http://def.localhost.%s' % (host_domain))
(使用%
-style 格式),或default('http://def.localhost.' ~ host_domain)
(使用字符串连接运算符)。这有效:
my_url: "{{ some_undeclared_var | default('http://def.localhost.' + host_domain) }}"
(连接字符串)