Ansible:在正则表达式循环中转义特殊字符

Ansible:在正则表达式循环中转义特殊字符

我一直无法让它工作,有人可以提供一些见解吗?

    - name Configuring rsyslog.conf playbook
      hosts: "{{host}}"
      tasks:
      - name: Configuring rsyslog.conf
        lineinfile:
          path: /etc/rsyslog.conf
          regexp: "{{item.regexp}}"
          line: "{{item.line}}"
          state: present
        loop:
        - { regexp='^action\\(type=', line='action(type"omfwd"' }
        - { regexp='^Target=', line='Target="192.168.1.20" Port="514" Protocol="tcp")' }
        - { regexp='^$PreserveFQDN', line='$PreserveFQDN on' }
        - { regexp='^$template defaultTemplate', line='$template defaultTemplate,\"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg% ID:123456789\n\"' }
        - { regexp='^$template writeLogs', line='$template writeLogs,\"/var/log/ID-123456789-%$year%%$month%%$day%.log\"' }

我的主要问题是第 4 个循环。我转义了双引号以消除“缺少逗号错误”,但现在我得到了“冒号错误”

编辑:所以我想要的最终结果与第 4 个循环基本相同:

寻找:

$template defaultTemplate

用。。。来代替:

$template defaultTemplate,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg% ID:123456789\n"

由于我的电脑位于不同的网络上,我无法从电脑上剪切和粘贴任何内容。我看到的最大问题是知道需要转义什么。我觉得在第一个循环中我必须转义“(”,这有点奇怪。我尝试了各种转义方法,但似乎都不起作用。如果单引号中的所有内容都是字面上写的内容,那就容易多了,但似乎行不通。

希望这能让事情更清楚一点。

编辑:我想补充一点,单独执行这些任务效果很好。只是当我将其放入循环中时,它就无法工作了。

答案1

首先,循环中字典列表的 json/yaml 语法应该是以下之一(注意第一项与其余项):

- name: Configuring rsyslog.conf playbook
  hosts: localhost
  gather_facts: no
  tasks:
  - debug: var=item
    loop:
    - regexp: '^action\(type='
      line: 'action(type"omfwd"'
    - { regexp: '^Target=', line: 'Target="192.168.1.20" Port="514" Protocol="tcp")' }
    - { regexp: '^Target=', line: 'Target="192.168.1.20" Port="514" Protocol="tcp")' }
    - { regexp: '^$PreserveFQDN', line: '$PreserveFQDN on' }
    - { regexp: '^$template defaultTemplate', line: '$template defaultTemplate,\"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg% ID:123456789\n\"' }
    - { regexp: '^$template writeLogs', line: '$template writeLogs,\"/var/log/ID-123456789-%$year%%$month%%$day%.log\"' }

接下来,您还需要修复文件中的正则表达式/行。它们太糟糕了,我们无法修复它们。您需要提供原始文件和修改后文件的最小示例。

相关内容