我一直无法让它工作,有人可以提供一些见解吗?
- 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\"' }
接下来,您还需要修复文件中的正则表达式/行。它们太糟糕了,我们无法修复它们。您需要提供原始文件和修改后文件的最小示例。