使用Ansible在文件中间添加一行

时间:2014-07-25 20:05:45

标签: ansible-playbook

我正在尝试创建一个查找php数组的ansible playbook条目

$array = {
  'some\value',
};

并在该数组中添加一行

$array = {
  'some\value',
  'another\value,
};

这就是我尝试过的,虽然它添加了我之后的行,但每次传递都会不断添加

- name: Add another\value dummy.php
  lineinfile:
    dest=/path/to/dummy.php
    insertafter='some\value'
    line="  'another\value',"

如果我继续运行剧本,我会得到

$array = {
  'some\value',
  'another\value,
  'another\value,
  'another\value,
  'another\value,
  'another\value,
  'another\value,
};

我意识到我可能在这里做了一些非常愚蠢的事情,但我看不出怎么说"unless_it_exists='another\value'"

我也尝试了这个,这不起作用

- name: Add another\value dummy.php
  lineinfile:
    dest=/path/to/dummy.php
    regexp="'some\\value',\n}"
    backrefs=yes
    line="'some\\value'\n  'another\\value',\n}"

编辑2014-07-28

只是为了澄清 - 我正在编辑的文件是this one https://github.com/...,我正在尝试在第124行添加一个数组成员,如下所示:

        'Way\Generators\GeneratorsServiceProvider',

1 个答案:

答案 0 :(得分:2)

我无法重现您描述的行为,因为lineinfile模块的重点是具有“unless_it_exists”功能。我能想到的唯一事情就是在Ansible之后改变行 - 例如你的IDE用标签替换空格。

我确实提出了以下任务:
(dummy.php现在包含要点内容)

- name: Add GeneratorsServiceProvider to dummy.php
  lineinfile:
    dest=files/dummy.php
    insertafter="^        'Illuminate\\\\Workbench\\\\WorkbenchServiceProvider',"
    line="        'Way\Generators\GeneratorsServiceProvider',"

我相信这可以做你想要的。

我已更改insertafter因为它是正则表达式,并且应该转义反斜杠。这变得相当丑陋有四个反斜杠来解释Python也解析'\'字符,但我还没弄明白如何在Ansible中使用raw string notation