在我的一个角色中,我通过"defaults/main.yml"
文件创建了一个变量。我可以在"tasks/main.yml"
文件中引用此变量。但是,该变量在"files/some_file.txt"
这是预期的吗?
答案 0 :(得分:1)
使用template
。例如,角色
shell> cat roles/role-17/defaults/main.yml
var1: value1
shell> cat roles/role-17/files/some_file.txt
[{{ var1 }}]
shell> cat roles/role-17/tasks/main.yml
- debug:
msg: task/main.yml [{{ var1 }}]
- debug:
msg: files/some_file.txt {{ lookup('template', 'files/some_file.txt') }}
和剧本
shell> cat test-17.yml
- hosts: localhost
roles:
- role-17
给予
"msg": "task/main.yml [value1]"
"msg": "files/some_file.txt [value1]\n"
答案 1 :(得分:1)
是的。 task / main.yml被ansible解析,并且将替换您所看到的变量。
通常,files / some_file.txt应包含应与复制模块一起使用的静态文件或脚本。正如您所发现的那样,它将无法进行解析。
如果要在文件中使用变量,则应使用template
模块。创建一个templates
目录,然后在其中复制文件,例如template/some_file.txt
。请注意,通常使用扩展名.j2来重命名文件以指示它是一个Jinja模板,例如some_file.j2
,但这不是必需的。
- name: Create fact
set_fact:
my_variable: 123456
- name: Create file from template
template:
src: some_file.j2
dest: "/tmp/some_file.txt"
mode: 0755
some_file.j2可能包含:
This file contains this sentence and the number {{ my_variable }}
运行模板任务后,/tmp/some_file.txt将如下所示:
This file contains this sentence and the number 123456