Ansible-在行中追加变量

Ansible-在行中追加变量,ansible,Ansible,我希望将属性附加到文件中,而不是替换或在新行上设置它 文件内容: PATH = "/a/path" 属性必须附加到文件中的变量: "{{ key.values() | map(attribute='hi') | list | join(' ') }}" 变量的输出为: /hi1 /hi2 /hi3 尝试使用lineinfle追加,但参数insertafter将属性放置在新行,而不是同一行 - lineinfile: dest: /file state: present

我希望将属性附加到文件中,而不是替换或在新行上设置它

文件内容:

PATH = "/a/path"
属性必须附加到文件中的变量:

"{{ key.values() | map(attribute='hi') | list | join(' ') }}"
变量的输出为:

/hi1 /hi2 /hi3 
尝试使用
lineinfle
追加,但参数
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 v2.1.2.0


编辑 backrefs选项给出了相同的结果,这是不期望的:

 - lineinfile:
     dest: /file
     backrefs: yes
     regexp: 'PATH = "'
     line: "{{ key.values() | map(attribute='hi') | list | join(' ') }}"
lineinfle模块具有与regexp选项成对的选项,允许您匹配现有行并仅更改其中的一部分

类似(未测试)

这可能是您所需要的。

谢谢您对@Mir的帮助。 最终解决方案:

 - lineinfile:
    dest: /file
    backrefs: yes
    regexp: '(^PATH\s+\=\s+)(?:")([\w+\s/]+)(?<!{{ hi }})(?:")'
    line: '\1"\2 {{ hi }}"'
-lineinfle:
dest:/file
背景参考:是的

regexp:“(^PATH\s+\=\s+(:)([\w+\s/]+)(?得到了相同的结果。因为“如果regexp匹配,最后匹配的行将被扩展的行参数替换。”它替换整行。@它替换行,但您可以使用反向引用保留行的部分(或全部)使用backrefs时,正则表达式必须有捕获组才能工作。请参见下面的示例。
 - lineinfile:
    dest: /file
    backrefs: yes
    regexp: '(^PATH\s+\=\s+)(?:")([\w+\s/]+)(?<!{{ hi }})(?:")'
    line: '\1"\2 {{ hi }}"'