如何在Ansible

时间:2017-12-20 16:06:08

标签: ansible

我正在尝试使用Ansible删除两行之间的空行但无法使其工作。我的源文件如下所示:

###This line has blank lines after it



###End of block

#More lines

我希望结果看起来像这样:

###This line has blank lines after it
###End of block

#More lines

到目前为止,我使用替换模块执行此任务:

- name: Remove blank lines between matches
  replace:
    path: /home/vagrant/abcd
    after: '###This line has blank lines after it'
    regexp: '(^\n)'
    replace: ''
    before: '###End of block'

但该任务似乎不起作用。事实上,该任务对源文件没有任何作用。

如果我删除了任务的最后一行(之前:' ###块结束' )。线条确实被删除,但它也删除所有空行,直到EOF不是我想要的。以下是删除最后一行的结果:

###This line has blank lines after it###End of block
#More lines

这是不期望的。

我有一个使用sed的解决方案,但我希望尽可能保持其幂等性。也许我需要更好的正则表达式?

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

根据这个问题:https://github.com/ansible/ansible/issues/31354使用after和before参数一起当前不能按预期工作。

您可以从任务中删除之后 paremeter,在这种情况下,它会按预期工作,但我知道这不是您想要实现的目标。

答案 1 :(得分:1)

在玩了这个以及再玩正则表达式之后,我想出了这个:

- name: Remove blank lines between matches
  replace:
    path: /home/vagrant/abcd
    after: '###This line has blank lines after it'
    regexp: '(^\s*$)'
    replace: ''

这会产生:

###This line has blank lines after it
###End of block

#More lines

我追求的是什么。但是我会等到错误修复后再用于生产。