Ansible:替换文件中的单词

时间:2017-09-09 19:44:38

标签: python ansible

我正在制作一个Ansible手册来设置CSF。 除了最后一部分,我已经完成了所有工作。

我想在/etc/csf/csf.conf文件中禁用端口22。 因此TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995"需要移除22。 我不想替换整行,因为有些行不同,有些行打开了端口2087,或者2222。 有什么办法我只能过滤22吗?

提前谢谢!!

3 个答案:

答案 0 :(得分:3)

您有几种选择:

此解决方案使用replace模块查找以TCP_OUT =开头的行,并将,22,替换为行中的,

  tasks:
  - name: Strip port 22
    replace:
      dest: /etc/csf/csf.conf
      regexp: '^TCP_OUT\s*=\s*(.*),22,(.*)$'
      replace: 'TCP_OUT = \1,\2'
  • \ s * - 匹配零个或多个空格(空格,制表符等)
  • \ 1 - 无论第一组中匹配的是什么(。*)
  • \ 2 - 无论第二组中匹配的是什么(。*)

答案 1 :(得分:1)

代码工作证明

>>> TCP_OUT = '20,21,22,25,53,80,110,113,443,587,993,995,2087,2222,22'
>>> print(','.join([port for port in TCP_OUT.split(',') if port != '22']))
'20,21,25,53,80,110,113,443,587,993,995,2087,2222'

答案 2 :(得分:0)

您可以使用template。制作/etc/csf/csf.conf文件的副本,并将TCP_OUT行替换为ansible变量:

TCP_OUT = {{ port_list }}

然后在变量中提前设置列表,其中包含文件中所需的端口。

vars:
  port_list = "20,21,25,53,80,110,113,443,587,993,995"