问题 是否可以使用内联模板?


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

- template: src=templates/git_commit.j2 dest=/path/to/REVISION

我的模板文件如下所示:

{{ git_commit }}

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

- inline_template: content={{ git_revision }} dest=/path/to/REVISION

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


8165
2017-11-17 22:57


起源



答案:


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

示例任务看起来像:

- name: Copy commit ref to file
  copy:
    content: "{{ git_commit }}"
    dest: /path/to/REVISION

我个人更喜欢这个 lineinfile 至于我 lineinfile 应该是对已存在的文件进行轻微更改 copy 用于确保文件位于某个位置并且看起来与您希望的完全相同。它还具有应对多行的好处。

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

"{{ git_commit }}"

这个任务创建了哪个:

- name: Copy commit ref to file
  template:
    src: path/to/template
    dest: /path/to/REVISION

它更清洁,它正在使用模块,正是它们的意图。


12
2017-11-18 15:02



是src和dest向后?我想你想要src:/ path / to / REVISION,如果这是你的模板。 OP有一个很好的问题。直接从内联内容直接进入中间版本会很不错。 - Greg


答案:


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

示例任务看起来像:

- name: Copy commit ref to file
  copy:
    content: "{{ git_commit }}"
    dest: /path/to/REVISION

我个人更喜欢这个 lineinfile 至于我 lineinfile 应该是对已存在的文件进行轻微更改 copy 用于确保文件位于某个位置并且看起来与您希望的完全相同。它还具有应对多行的好处。

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

"{{ git_commit }}"

这个任务创建了哪个:

- name: Copy commit ref to file
  template:
    src: path/to/template
    dest: /path/to/REVISION

它更清洁,它正在使用模块,正是它们的意图。


12
2017-11-18 15:02



是src和dest向后?我想你想要src:/ path / to / REVISION,如果这是你的模板。 OP有一个很好的问题。直接从内联内容直接进入中间版本会很不错。 - Greg


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

- lineinfile:
  dest=/path/to/REVISION
  line="{{ git_commit }}"
  regexp=".*"
  create=yes

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

这仅适用,因为您的文件中只有一行。如果你有更多的线路,这显然不适用于这个模块。


4
2017-11-18 02:34





这个问题似乎得到了解决。但是,如果模板文件是多个变量,即json文件,则可以使用带有内容参数的复制模块, 抬头,即:

# playbook.yml
---
- name: deploy inline template
  copy:
    content: '{{ lookup("template", "inlinetemplate.yml.j2") }}'
    dest: /var/tmp/inlinetempl.yml

# inlinetemplate.yml.j2
---
- name: {{ somevar }}
  abc: def

0
2018-02-12 10:15