#CentOS-Base.repo
#
[base]
name=CentOS-$releasever - Base
[updates]
name=CentOS-$releasever - Updates
[contrib]
name=CentOS-$releasever - Contrib
- 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/上查看)。
答案 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。而是使用copy
或template
。
然而,这是你可以做到的一种方式。请注意,它比文件+复制命令更多行。
- name: PostgreSQL | Yum | exclude old version
lineinfile: dest=test.repo
line="\1\nexclude=postgresql*"
insertafter="\[{{ item }}\]"
regexp="(\[{{ item }}\])"
backrefs=true
with_items:
- base
- updates