Ansible - 在行中追加变量

时间:2016-11-24 11:21:19

标签: ansible

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

档案内容:

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

2 个答案:

答案 0 :(得分:1)

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

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

hi是变量。

答案 1 :(得分:0)

Lineinfile模块具有backrefs选项,该选项与regexp选项配对,允许您匹配现有行并仅更改其中的部分行。

像(未经测试)

之类的东西
- lineinfile:
  [...]
  regexp: ^PATH = "(.*)"$
  line: PATH="\1 {{ your_variable_here}}"
  backrefs: yes

可能是你需要的。