是否可以使用内联模板?

Naf*_*Kay 13 ansible

我需要在Ansible中创建一个包含单个事实内容的文件.我现在正在做这样的事情:

- template: src=templates/git_commit.j2 dest=/path/to/REVISION
Run Code Online (Sandbox Code Playgroud)

我的模板文件如下所示:

{{ git_commit }}
Run Code Online (Sandbox Code Playgroud)

显然,做这样的事情会更有意义:

- inline_template: content={{ git_revision }} dest=/path/to/REVISION
Run Code Online (Sandbox Code Playgroud)

Puppet提供类似的东西.有没有办法在Ansible中这样做?

yda*_*coR 14

lineinfile模块的另一个选项(由udondan回答给出)将是使用复制模块并指定内容而不是Ansible主机的本地源.

示例任务看起来像:

- name: Copy commit ref to file
  copy:
    content: "{{ git_commit }}"
    dest: /path/to/REVISION
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢这个,lineinfile因为我lineinfile应该对已经存在的文件稍作修改,以copy确保文件在某个地方并且看起来与您想要的完全一样.它还具有应对多行的好处.

实际上虽然我很想让它成为一个模板任务,只需要一个模板文件:

"{{ git_commit }}"
Run Code Online (Sandbox Code Playgroud)

这个任务创建了哪个:

- name: Copy commit ref to file
  template:
    src: path/to/template
    dest: /path/to/REVISION
Run Code Online (Sandbox Code Playgroud)

它更清洁,它正在使用模块来完全满足它们的用途.


udo*_*dan 5

是的,在这种简单的情况下,lineinfile模块是可能的。

- lineinfile:
  dest=/path/to/REVISION
  line="{{ git_commit }}"
  regexp=".*"
  create=yes
Run Code Online (Sandbox Code Playgroud)

lineinfile模块通常用于确保特定行包含在文件中。create=yes如果文件不存在,该选项将生成文件。该regexp=.*选项确保您不会在git_commit更改时向文件添加内容,因为默认情况下它只会确保将新内容添加到文件中,而不是替换以前的内容。

这仅适用于您的文件中只有一行。如果您有更多行,这显然不适用于此模块。