Rhel

Puppet 不會忽略空格

  • April 25, 2016

我有一個條目可能會出現也可能不會出現在/etc/rsyslog.conf

# Added for Kiwi
*.err;*.emerg;*.alert;*.warning;*.debug;*.notice;*.crit;*.info          @10.19.24.50

由於其中一些伺服器會手動鍵入此內容,因此我不能假設空格是統一的(並且在我發現的至少兩台伺服器上確實有所不同)。我正在嘗試編寫一個木偶模組來刪除這些行。

該模組的相關部分:

 file_line {'remove_kiwi_comment':

   ensure => absent,
   path   => $confFile,
   match  => "^#.*Kiwi$",
   line   => "# Added for Kiwi",
   match_for_absence => true,

 }

 file_line {'remove_kiwi_forward2':

   ensure => absent,
   match_for_absence => true,
   path   => $confFile,
   match  => '^.*50$',
   line   => '*.err;*.emerg;*.alert;*.warning;*.debug;*.notice;*.crit;*.info @10.19.24.50',
   notify => Service[$serviceName],

 }

上面成功地從其中一個 DEV 伺服器中刪除了評論,但實際的重定向似乎沒有被刪除。我玩弄了正則表達式match=>無濟於事,我不確定我還能嘗試什麼來刪除該行。rsyslog如果我添加了足夠的空格,它將刪除它,但我不希望我的模組假設任何數量的空格,只是為了載入存在一些空格。

Stdlib 模組版本為 4.11,master 為 3.3,此伺服器的客戶端節點為 3.6

file_line類型有一個 after 選項,它應該適合你。唯一的問題是您需要確保在評論之前刪除規則。

file_line {'remove_kiwi_comment':
   ensure => absent,
   path   => $confFile,
   match  => '^#.*Kiwi$',
   line   => '# Added for Kiwi',
   match_for_absence => true,
}

file_line {'remove_kiwi_forward2':
   ensure => absent,
   path   => $confFile,
   line   => '# Added for Kiwi',
   after  => '^#.*Kiwi$',
   before => File_line['remove_kiwi_comment'],
   notify => Service[$serviceName],
}

如果您不能相信評論會在文件中,我能想到的最簡單的解決方案是使用execwith sed

exec { 'remove-kiwi-rsyslog-line-with-sed':
   command => "sed -i '/@10\.19\.24\.50$/d' $confFile",
   path    => '/usr/bin:/bin',
   onlyif  => "grep -q '@10.19.24.50$' $confFile",
}

如果 ip 地址 10.19.24.50 在文件中,這只會執行 exec。

要刪除重定向行,請嘗試使用此行,

file_line {'remove_kiwi_forward2':

確保 => 缺席,
match_for_absence => 真,
路徑 => $conf文件,
匹配 => '^.*50$',
行 => '\*.err;\*.emerg;\*.alert;\*.warning;\*.debug;\*.notice;\*.crit;\*.info.*@10.19.24.50' ,
通知 => 服務[$serviceName],
}

引用自:https://unix.stackexchange.com/questions/276546