Ansible-playbook:如何将var的内容写入文件

时间:2016-11-10 09:51:10

标签: ansible ansible-playbook

我有一个var,我想将var的内容写入文件中的一行。

实施例: var:TEXT_NEED_TO_ADD

添加前

文件:
some_line
文本文本标记文本文本
some_line

添加后的

文件:
some_line
文本文本标记TEXT_NEED_TO_ADD文本文本
some_line

我该怎么办?
对不起,我的英文。

2 个答案:

答案 0 :(得分:1)

你可以使用sed命令做一些魔术:

- name: insert string in file
  shell: sed '/mark/a {{ TEXT_NEED_TO_ADD }}' filename

我在sed操作方面并不是很擅长,但总的想法是:如果你不能用Ansible做,请尝试在Bash中进行,如果可以的话 - 设置Ansible为你做。 或者您可以编写Ansible Module来执行此操作,但Bash通常就足够了。

答案 1 :(得分:1)

如果您的文件是静态的(我的意思是您希望在部署期间只插入一次TEXT_NEED_TO_ADD),最好的方法(并且最容易维护)就是创建一个jinja2模板文件并在您的角色中使用它。

所以你的文件结构应该是:

your_role/
  templates/
    my_file_template.j2
  tasks/
    main.yml

,您的文件应如下所示:

main.yml

- name: copy file and fill it
    template: src=my_file_template.j2 dest="/home/user/my_file"

my_file_template.j2

some_line
text text mark {{TEXT_NEED_TO_ADD}} text text
some_line

这样,ansible会将变量的内容插入到文件中(在{{TEXT_NEED_TO_ADD}}的位置),然后再将其复制到dest指定的位置。您可以根据需要在jinja模板中使用尽可能多的变量。 Ansible还支持许多过滤器和其他有用的工具(例如循环)。但我想使用sed也没关系。取决于你想要达到的目标。 您可以阅读有关模板模块here的更多信息 您可以阅读有关模板here

的更多信息