Puppetはスペースを無視しません。

Puppetはスペースを無視しません。

次に表示または表示されない可能性がある項目があります/etc/rsyslog.conf

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

これらのサーバーのいくつかは手動で入力するため、スペースが均一であるとは考えられません(そして私が見つけた少なくとも2つのサーバーによって異なります)。この行を削除するために、パペットモジュールを作成しようとしています。

このモジュールの関連部分:

  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サーバーの1つからコメントを正常に削除しましたが、実際のリダイレクトは削除されていないようです。私は成功せずに正規表現を試してみましたが、match=>行を削除するために何を試すことができるのかわかりません。十分なスペースを追加すると削除されますが、モジュールはスペースを占有しませんrsyslog

Stdlibモジュールのバージョンは4.11、マスターは3.3、このサーバーのクライアントノードは3.6です。

ベストアンサー1

このfile_lineタイプには、あなたに適した将来のオプションがあります。唯一の問題は、コメントする前にルールを削除したことを確認する必要があることです。

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",
}

execは、ファイルにIPアドレス10.19.24.50が含まれている場合にのみ実行されます。

おすすめ記事