我有一个var,我想将var的内容写入文件中的一行。
实施例: var:TEXT_NEED_TO_ADD
添加前文件:
some_line
文本文本标记文本文本
some_line
文件:
some_line
文本文本标记TEXT_NEED_TO_ADD文本文本
some_line
我该怎么办?
对不起,我的英文。
答案 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