Ansible lineinfile insertafter在文件末尾注入行

时间:2014-06-11 21:44:21

标签: yaml ansible ansible-playbook

我正在使用lineinfile,如下所示:

lineinfile dest=./hosts_exp insertafter='\[hosts1\]' line="xxxxxxxxx" state=present

我的hosts_exp如下:

[local]
localhost

[hosts1]

[hosts2]

[hosts3]

lineinfile在[hosts3]之后插入文本,而不是在[hosts1]之后插入。

4 个答案:

答案 0 :(得分:4)

使用:

lineinfile:
  dest: "./hosts_exp"
  line: "xxxxxxxxx"
  insertafter: '^\[hosts1\]'
  state: present

答案 1 :(得分:1)

看起来多余,但你也需要指定正则表达式:

lineinfile:
  dest: ./hosts_exp
  insertafter: '\[hosts1\]'
  regexp: '\[hosts1\]'
  line: "xxxxxxxxx"
  state=present

为什么呢? regexp说“寻找这条线”。 insertafter说“在这里注入线”。

我测试了这个; here's the commit。我从上面的行中提交了一些小的更改,必要时使用。

答案 2 :(得分:1)

示例:

- name: "blah"
  lineinfile:
    dest: "/test.sh"
    insertafter: 'test text'
    line: "text add"
    state: present

答案 3 :(得分:0)

使用backrefs:是

lineinfile:
  backrefs: yes
  dest: ./hosts_exp
  insertafter: '\[hosts1\]'
  regexp: '\[hosts1\]'
  line: "xxxxxxxxx"
  state=present

该标志会稍微改变模块的操作; insertbefore和insertafter将被忽略,并且如果regexp与文件中的任何地方都不匹配,则文件将保持不变。如果regexp确实匹配,则最后一个匹配的行将由扩展的line参数替换。