Ansible 使用LINEINFLE插入线,但未按预期工作

Ansible 使用LINEINFLE插入线,但未按预期工作,ansible,centos7,ansible-module,Ansible,Centos7,Ansible Module,我正在使用lineinfle在syslog文件中插入行。这是我的系统日志: /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { missingok sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null

我正在使用
lineinfle
在syslog文件中插入行。这是我的系统日志:

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
我想在
missingok
之后添加
compress
delaycompress
。这是我的密码:

-name:“在/etc/logrotate.d/syslog中添加压缩行”
线条填充:
路径:/etc/logrotate.d/syslog
插入者:“^missingok”
行:“压缩”
第一场比赛:是的
国家:现在
-名称:“在/etc/logrotate.d/syslog中添加延迟压缩行”
线条填充:
路径:/etc/logrotate.d/syslog
在“^SharedScript”之前插入
行:“延迟压缩”
第一场比赛:是的
国家:现在
但在文件末尾(最后一行)添加这两个选项。

注意:我在
compress
delaycompress
之前添加了4个空格,这是因为正则表达式中的插入符号与字符串开头匹配,而不使用任何字符

因为在
missingok
sharedscripts
之前有空格,所以您的
insertafter
insertbefore
regex

要解决此问题,您可以借助与任何空格、制表符或换行符匹配的
\s
,以及与零个或多个连续字符匹配的星号
*
,在行首只允许空格和空格

所以正确的正则表达式应该是

  • ^\s*missingok
    
  • ^\s*共享脚本
    
您的任务的解决方案是:

-name:“在/etc/logrotate.d/syslog中添加压缩行”
线条填充:
路径:/etc/logrotate.d/syslog
插入符:“^\\s*遗漏”
行:“压缩”
第一场比赛:是的
国家:现在
-名称:“在/etc/logrotate.d/syslog中添加延迟压缩行”
线条填充:
路径:/etc/logrotate.d/syslog
insertbefore:“^\\s*共享脚本”
行:“延迟压缩”
第一场比赛:是的
国家:现在

请注意,由于Ansible是一个Python应用程序,.

Ansible在“^\s*missingok”处失败。在Yamlint.cominded中验证抱歉我的不好,对于Ansible,在那些正则表达式中,你需要加倍反斜杠,回答更正。