特别是,我有一个group_vars/all.yml
文件,基本上有以下内容:
my_foo: asdf
my_bar: '{{ my_foo }}'
如果我以后,在模板中模板化文件,例如:
- name: template a file
template:
src: something.j2
dest: '....'
在something.j2
文件中,我使用{{ my_bar }}
,我以某种方式得到asdf
。 如何吗
我之前的理解是group_vars/all.yml
这样的文件基本上被解析为parse_yaml(parse_and_evaluate_jinja2(contents_of_the_file))
。但是如果这是真的,则行my_bar: '{{ my_foo }}'
将无法正确评估:我们要么出错,因为my_foo
未定义到Jinja ,或者某些默认文本,例如"undefined"
或''
。就像YAML与Jinja2同时被解析一样,这似乎不太可能。这真的是Ansible的作用吗?或者我完全错过了其他什么?
(我无法找到有关如何在Ansibles文档中解析变量文件的任何确切文档,因此如果它们存在,则表示赞赏。)
答案 0 :(得分:0)
我之前的理解是像group_vars / all.yml这样的文件基本上被解析为parse_yaml(parse_and_evaluate_jinja2(contents_of_the_file))
错误。 Ansible在运行时进行所有评估,例如:
你告诉Ansible:
- debug:
msg: "{{ my_bar }}"
因此,当Ansible将msg
参数传递给debug
模块时,它会执行:
{{ my_bar }}
。哦,它是一个模板和变量my_bar
。my_bar
的价值是多少?{{ my_foo }}
。哦,它又是一个模板,还有变量my_foo
。my_foo
的价值是多少?asdf
。好!没有更多的模板。my_bar
的值现在为asdf
。asdf
。asdf
。写作:
my_var: "{{ my_other_var }}"
您不像通常的编程那样分配变量,而是编写一个简单的模板来计算my_var
在任何给定时间(运行时)的值,而不是在解析时。< / p>