如何在角色下的文件文件夹中引用变量

时间:2020-06-08 17:00:25

标签: ansible

在我的一个角色中,我通过"defaults/main.yml"文件创建了一个变量。我可以在"tasks/main.yml"文件中引用此变量。但是,该变量在"files/some_file.txt"

中似乎不起作用

这是预期的吗?

2 个答案:

答案 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