Ansible lineinfile不识别正则表达式

时间:2014-06-27 22:32:07

标签: regex macos ansible

要编辑的文件

#CentOS-Base.repo
#
[base]
name=CentOS-$releasever - Base

[updates]
name=CentOS-$releasever - Updates

[contrib]
name=CentOS-$releasever - Contrib

Ansible任务

- name: PostgreSQL | Yum | exclude old version
  remote_user: root
  sudo: no
  lineinfile: dest=/etc/yum.repos.d/CentOS-Base.repo
              line='exclude=postgresql*'
              insertafter={{ item }}
  with_items:
    - ^\[base\]
    - ^\[updates\]

结果:

该行只添加一次到文件中它在EOF而不是在[base]和[updates]之后的下一行添加。

我很确定正则表达式是有效的(在https://pythex.org/上查看)。

2 个答案:

答案 0 :(得分:4)

而不是lineinfile模块,请考虑使用ini_file module。这样你就不会用正则表达式来破坏你的头脑。

  

管理(添加,删除,更改)INI样式文件中的各个设置   无需使用模板或模板管理整个文件   组装。如果它们不存在,则添加缺失的部分。

示例:

# Ensure "fav=lemonade is in section "[drinks]" in specified file
- ini_file: dest=/etc/conf section=drinks option=fav value=lemonade mode=0600 backup=yes

- ini_file: dest=/etc/anotherconf
            section=drinks
            option=temperature
            value=cold
            backup=yes

答案 1 :(得分:0)

对同一文件多次使用lineinfile是Ansible中的code smell而是使用copytemplate

然而,这是你可以做到的一种方式。请注意,它比文件+复制命令更多行。

- name: PostgreSQL | Yum | exclude old version
  lineinfile: dest=test.repo
              line="\1\nexclude=postgresql*"
              insertafter="\[{{ item }}\]"
              regexp="(\[{{ item }}\])"
              backrefs=true
  with_items:
    - base
    - updates