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 }}"'