Ansible剧本:如何将var的内容写入文件

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操作,但总体思路是:如果您不能使用

我有一个var,我想把var的内容写到文件中的一行

例如: 变量:文本\u需要\u添加

添加前的文件:
一些线
文本标记文本文本
一些线

添加后的文件:
一些线
文本标记文本\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模块