web-dev-qa-db-ja.com

パペットで設定を元に戻す方法

私は/etc/rsyslog.d/60-custconfig.confにrup.logの設定を書き込むモジュールを、puppetを使用して作成しました。

ノードにモジュールを追加すると機能しますが、コメントを削除したり、ノードのモジュール呼び出しを削除したりすると、ファイルが削除されますか?そうでない場合、構成またはインストールをロールバックする方法はありますか?

5
DJYod

リソースを削除してPuppetが実行したアクションを元に戻すことはできません。リソースをマニフェストから削除することで、Puppetにそれを管理しないよう指示するだけです(もう)。

また、Puppetは単に前の状態を覚えていないため、元に戻すことはできません。システムをマニフェストで定義した状態に変更しようとするだけです。

ここで私が見る1つの方法は、fileリソースを再度含めることですが、今はensure => absent

file {
    '/etc/rsyslog.d/60-custconfig.conf':
    ensure => absent,
}

また、Puppetモジュールのデザインを次のように変更することもできます。

  • Rsyslogモジュール内のすべてのrsyslog構成ファイルを管理します。
  • Rsyslogの変更が必要な他のモジュールからvirtualカスタム定義タイプを作成します。
  • Rsyslogモジュールで、仮想構成スタンザを収集し、そのカスタムタイプの未定義のリソースをすべて削除するように指示します。

または puppetlabs-concat モジュールを使用して、仮想concat :: fragmentsをモジュールに定義し、それらをrsyslogモジュールに収集して「60-custconfig.conf」構成ファイルを構築するのも簡単です。その後、仮想リソースが他のモジュールから削除された場合、収集されたフラグメントは、管理されていないフラグメントのないファイルになります。事実上、これらはファイルから削除されます。

7
gertvdijk

元に戻したい特定のアクションを「元に戻す」コードを明示的に記述する必要があります。

たとえば、my_Apacheいくつかのパッケージをインストールし、いくつかのファイルを構成し、特定の状態を保証するモジュール。このモジュール内に別のクラスを記述し、それをmy_Apache::uninstall、他のモジュールが行った処理eachを取り消します。元に戻すクラスは、元のモジュールの内部または一部である必要はありません。完全に別のクラスにすることもできます。ホストに適用されるクラスを変更する良い方法は、 [〜#〜] enc [〜#〜] を使用することです。

2
Not Now

Puppetの設定変更を元に戻したり削除したりするための簡単な答えはありませんが、1つの簡単な方法は、Puppetが管理する設定ディレクトリを使用することです。

class rsyslog::config {

  file { '/etc/rsyslog.d':
    ensure  => directory,
    force   => true,
    purge   => true,
    recurse => true,
  }

  file { '/etc/rsyslog.conf':
    ensure  => present,
    content => template('rsyslog/rsyslog.conf.erb'),
  }

  file { '/etc/rsyslog.d/50-default.conf':
    ensure  => present,
    content => template('rsyslog/50-default.conf.erb'),
    require => File['/etc/rsyslog.d'],
  }

}

上記では、Puppetに/etc/rsyslog.d/内のすべてを完全に所有し、Puppetが管理していないものをすべて削除するように指示しています。サーバーが以前にhaproxyを実行していて、syslogにそのための構成がある場合、happroxyモジュールを削除すると、/ etc/rsyslog.d/40-haproxy.confへの参照が消え、Puppetがそれを構成ディレクトリから削除します。また、Puppetにsyslogを再起動させるために使用できる通知イベントも生成しますが、そのためにはサービスへの通知または〜>チェーンが必要です。

1
kashani

アンチモジュールでパターンを使用することは可能だと思います。例えば...

zookeeper_present

このモジュールは、飼育係のためにホストを完全に構成します

 zookeeper_not_present

このモジュールは、前のモジュールで行われたことをすべて逆にします。

lvs_present

このモジュールは、lvs用にホストを完全に構成します。

lvs_not_present

このモジュールは、前のモジュールで行われたことをすべて逆にします。

...等々

ただし、1つのpresent_moduleが何かを設定しようとし、1つのnot_present_moduleがその設定を元に戻そうとする、競合するモジュールで終了しないように注意してください。これは、同じものを必要とする2つのモジュールがある場合に発生する可能性があります。

それを解決する方法は、おそらくその共通設定を独自のモジュールに分割し、他の2つのモジュールをそのモジュールに依存させることでしょう。ただし、共通モジュールが不要になった場合は、site.ppファイルでそのモジュールのnot_present_versionと手動で交換する必要があります。

1

すでに投稿された回答について詳しく説明するには:Puppetはリソースを管理します。管理とは、リソースの状態を認識し、リソースが望ましい状態であることを確認することを意味します。 Puppetに何を管理し、どのように管理するかを指示します。そして、Puppetがリソースを認識しなくなると、明らかにそれを管理できなくなります。これがPuppetの機能です。

Puppetがもはや知らないリソースを単に削除した場合、システムに悪影響を与えると想像してください。それ自体はすでに逆説的なように聞こえます。知らないものをどのように削除しますか?しかし、Puppetがそれを行う方法があったとしても、システムを破壊する可能性があります。

0
daff