Ansible剧本:如何将var的内容写入文件
我有一个var,我想把var的内容写到文件中的一行 例如: 变量:文本\u需要\u添加 添加前的文件:Ansible剧本:如何将var的内容写入文件,ansible,ansible-playbook,Ansible,Ansible Playbook,我有一个var,我想把var的内容写到文件中的一行 例如: 变量:文本\u需要\u添加 添加前的文件: 一些线 文本标记文本文本 一些线 添加后的文件: 一些线 文本标记文本\u需要\u添加文本 一些线 我该怎么办? 对不起,我的英语太差了。您可以使用sed命令执行一些魔术: - name: insert string in file shell: sed '/mark/a {{ TEXT_NEED_TO_ADD }}' filename 我并不擅长sed操作,但总体思路是:如果您不能使用
一些线
文本标记文本文本
一些线 添加后的文件:
一些线
文本标记文本\u需要\u添加文本
一些线 我该怎么办?
对不起,我的英语太差了。您可以使用
sed
命令执行一些魔术:
- name: insert string in file
shell: sed '/mark/a {{ TEXT_NEED_TO_ADD }}' filename
我并不擅长sed操作,但总体思路是:如果您不能使用Ansible,请尝试在Bash中使用它,如果可以,请设置Ansible来为您使用它。
或者您可以编写Ansible模块来完成这项工作,但通常Bash已经足够了 如果您的文件是静态的(我的意思是您希望在部署期间插入一次需要添加的文本),那么最好的方法(也是最容易维护的)就是创建一个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"
我的文件\u template.j2
some_line
text text mark {{TEXT_NEED_TO_ADD}} text text
some_line
通过这种方式,ansible将在将变量复制到dest指定的位置之前,将变量的内容插入文件(在{{TEXT_NEED_TO_ADD}}的位置)。您可以在jinja模板中使用任意多的变量。Ansible还支持许多过滤器和其他有用的工具(例如循环)。但是我想使用sed
也可以。这取决于你想要实现什么。
您可以阅读有关模板模块的更多信息
你可以阅读更多关于模板的内容这个问题需要一些改进,这不是一个真正的问题,你还没有告诉我们你想用什么语言来实现这一点,在有人给你提供建设性的答案之前,它需要更多的信息。使用python创建一个ansible模块。在那里,您可以编写自己的逻辑来操作文件,然后从ansible playbook调用该模块。如果您在这方面需要更多帮助,请告诉我。使用Ansible lineinfile模块