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が含まれている場合にのみ実行されます。

答え2

リダイレクト回線を削除するには、次を試してください。

file_line { 'remove_kiwi_forward2':

    保証=>欠席、
    match_for_absence =>実際には、
    パス=> $confファイル、
    一致 => '^.*50$',
    line => '\*.err;\*.emerg;\*.alert;\*.warning;\*.debug;\*.notice;\*.crit;\*.info.*@10.19.24.50' 、
    通知=>サービス[$serviceName],
}

答え3

さらに調査を行った後、私はこれがfile_line非侵害的なプロファイル管理のための最善の努力であることがわかりました。私と似たような不満を持っている人がたくさんいます。file_line読みやすい人形が必要な場合は、人形モジュールを使用するのが一般的ですが、問題の最初の兆候が現れたら、あきらめて他のすべての目的でAugeasを使い始めるようです。

私の一時的な人形モジュールの最終バージョン:

class kiwiprep {

  if ($::syslogng == "ABSENT"){

    case $::operatingsystemmajrelease {

      /^5/: {

        $serviceName="syslog"
        $confFile="/etc/syslog.conf"

      }

      /^(6|7)/: {

        $serviceName="rsyslog"
        $confFile="/etc/rsyslog.conf"

      }

      default:{
        fail("Platform Not Supported")
      }

    }

    service {$serviceName:
      ensure => running,
      enable => true,
    }

    file_line {'remove_kiwi_comment':

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

    }

    augeas {"kiwi forwarder 1":
      context => "/files$confFile",
      changes => ["rm *[descendant::hostname = '10.19.24.50']"],
    }

    augeas {"kiwi forwarder 2":
      context => "/files$confFile",
      changes => ["rm *[descendant::hostname = '10.18.104.50']"],
    }


  }

}

(これはRHEL専用です。SUSEまたはDebianに合わせて変更する必要があります。)

ご覧のとおり、私の最終モジュールにはfile_lineコメントがありますが、これは私にとってうまくいきます。その後、値が私のフォワーダーの1つと同じ子を持つ最上位オブジェクトを削除する操作に戻りますaugeashostnameこのモジュールは環境を整理するときに完全に機能します。file_lineこれで既存のレスポンダをクリーンアップしたので、戻って新しいレスポンダを適切な場所に追加します。

関連情報