我需要在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)
它更清洁,它正在使用模块来完全满足它们的用途.
是的,在这种简单的情况下,lineinfile模块是可能的。
- lineinfile:
dest=/path/to/REVISION
line="{{ git_commit }}"
regexp=".*"
create=yes
Run Code Online (Sandbox Code Playgroud)
该lineinfile模块通常用于确保特定行包含在文件中。create=yes如果文件不存在,该选项将生成文件。该regexp=.*选项确保您不会在git_commit更改时向文件添加内容,因为默认情况下它只会确保将新内容添加到文件中,而不是替换以前的内容。
这仅适用于您的文件中只有一行。如果您有更多行,这显然不适用于此模块。
| 归档时间: |
|
| 查看次数: |
8038 次 |
| 最近记录: |