【发布时间】:2017-04-08 16:22:36
【问题描述】:
我想将属性附加到文件,而不是在新行上替换或设置它。
文件内容:
PATH = "/a/path"
文件中必须附加属性的变量:
"{{ key.values() | map(attribute='hi') | list | join(' ') }}"
变量的输出为:
/hi1 /hi2 /hi3
尝试使用lineinfile 追加,但参数insertafter 将属性放在新行上,而不是同一行。
- lineinfile:
dest: /file
state: present
insertafter: 'PATH = "'
line: "{{ mounts.values() | map(attribute='mountpoint') | list | join(' ') }}"
预期结果:
PATH = "/a/path /hi1 /h2 /hi3"
实际结果:
PATH = "/a/path"
/hi1 /hi2 /hi3
如果我使用这里描述的方法会收到语法错误:Ansible: insert a single word on an existing line in a file
对于这个特定的用例,我应该使用哪个模块?
使用 Ansible v2.1.2.0
编辑
backrefs 选项给出了相同的结果,这是意料之外的:
- lineinfile:
dest: /file
backrefs: yes
regexp: 'PATH = "'
line: "{{ key.values() | map(attribute='hi') | list | join(' ') }}"
【问题讨论】:
-
当你使用反向引用时,你的正则表达式必须有捕获组才能工作。请参阅下面的示例。
标签: ansible