Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Ansible:替换文件中的word_Python_Ansible - Fatal编程技术网

Python Ansible:替换文件中的word

Python Ansible:替换文件中的word,python,ansible,Python,Ansible,我正在制作一本Ansible剧本来设置CSF。 除了最后一部分,我什么都做了 我想在/etc/csf/csf.conf文件中禁用端口22。 因此TCP_OUT=“20,21,22,25,53,8011134435879995”需要22删除。 我不想替换整行,因为有些行是不同的,例如,有些已打开端口2087或2222。 有什么办法我只能在22上过滤吗 提前谢谢你 代码工作证明 >>> TCP_OUT = '20,21,22,25,53,80,110,113,443,587,993

我正在制作一本Ansible剧本来设置CSF。 除了最后一部分,我什么都做了

我想在
/etc/csf/csf.conf
文件中禁用端口22。 因此
TCP_OUT=“20,21,22,25,53,8011134435879995”
需要
22
删除。 我不想替换整行,因为有些行是不同的,例如,有些已打开端口
2087
2222
。 有什么办法我只能在
22
上过滤吗

提前谢谢你

代码工作证明

>>> 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'
代码工作证明

>>> 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'

您有几个选择:

  • 带sed的模块
  • 模块
  • 模块
此解决方案使用模块查找以
TCP\u 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-第二组(.*)中匹配的任何内容

您有几种选择:

  • 带sed的模块
  • 模块
  • 模块
此解决方案使用模块查找以
TCP\u 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-第二组(.*)中匹配的任何内容
    • 您可以使用。制作一份
      /etc/csf/csf.conf
      文件的副本,并用ansible变量替换TCP\u OUT行:

      TCP_OUT = {{ port_list }}
      
      然后在变量中提前设置列表,并在文件中设置所需的端口

      vars:
        port_list = "20,21,25,53,80,110,113,443,587,993,995"
      
      你可以用。制作一份
      /etc/csf/csf.conf
      文件的副本,并用ansible变量替换TCP\u OUT行:

      TCP_OUT = {{ port_list }}
      
      然后在变量中提前设置列表,并在文件中设置所需的端口

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

      默认配置为
      “20,21,22,25,53,80110113443587993995”
      ,但cPanel服务器中包含2087。按照“您的方式”进行操作意味着我必须在所有服务器上打开端口2222和2087,非directadmin和cPanel服务器也一样?哦,我明白了,我想我可以添加一些文件读取代码&还可以在包含字符串“TCP_OUT=”的行上进行替换检查。听起来不错?默认配置是
      “20,21,22,25,53,80110113443587993995”
      ,但是cPanel服务器中应该有2087。按照“您的方式”进行操作意味着我必须在所有服务器上打开端口2222和2087,非directadmin和cPanel服务器也一样?哦,我明白了,我想我可以添加一些文件读取代码&还可以在包含字符串“TCP_OUT=”的行上进行替换检查。听起来不错?啊,太好了。如果不是太多的话,你介意把它分解一下吗?我知道
      \s
      是一条白线,
      ^
      开始和
      $
      结束。。。究竟是什么确保它两者都匹配,而不是两者都匹配?
      =
      ?啊,太完美了。如果不是太多的话,你介意把它分解一下吗?我知道
      \s
      是一条白线,
      ^
      开始和
      $
      结束。。。究竟是什么确保它两者都匹配,而不是两者都匹配?
      =
      ?如果所有服务器都是相同的,那就太完美了,但正如前面提到的,我也有cPanel和DirectAdmin服务器。。有几个不同的剧本没有多大意义?如果所有的服务器都是一样的,那就太完美了,但正如前面提到的,我也有cPanel和DirectAdmin服务器。。有几个不同的剧本没有多大意义?