web-dev-qa-db-ja.com

PuppetUbuntuはパッケージを削除する必要がなくなりました

自分に人形を教える。

Ubuntu 11.10 Puppet 2.7.1の使用(aptから直接)

単一のノードでいくつかのテストスクリプトを実行します(以下 http://docs.puppetlabs.com/learning/manifests.html )。

Apache2パッケージをインストールして起動するマニフェストを作成しました...すべて問題ありません。

これを逆にしたいので、Apache2パッケージをパージするマニフェストを作成します。これは正常に完了します。問題は、puppetがApache2パッケージを削除するだけで、Apache2が取り込むすべてのパッケージではないことです(Apache2.2-binがメインパッケージだと思います)...したがって、Apache2サービスはまだインストールされて実行されていますシステム上。

Apt-getでこれを行っている場合は、「apt-get autoremove」を実行しますが、puppetにこれを実行させるにはどうすればよいですか?

4
sMoZely

残念ながら、組み込みのリソースタイプでこれを行う良い方法はなく、2つのあまり良くないオプションがあります。

「適切な」方法では、削除するすべてのパッケージに対してpackageリソースを定義します。

package { 'Apache2.2-common':
    ensure => purged,
}
package { 'Apache2-utils':
    ensure => purged,
}
# etc ...

そして、「不適切」であるがはるかに管理しやすい方法は、Apache2パッケージが削除されたときに依存パッケージの自動削除を実行するようにexecリソースを設定することです。

package { 'Apache2':
    ensure => purged,
}
exec { 'autoremove':
    command => '/usr/bin/apt-get autoremove --purge -y',
    # We don't want this running every time the puppet agent runs, 
    # so we'll set it to only run when the Apache2 purge actually happens.
    # Note that this would not run on your node that already has the
    # Apache2 package removed, since it won't trigger any more changes
    # to the package.
    refreshonly => true,
    subscribe => Package['Apache2'],
}

これらの2つのオプションを考えると、2つ目は間違いなくより魅力的です。可能な限り組み込み型に固執できるのは素晴らしいことですが、依存関係が非常に多いパッケージを削除する場合は実用的ではありません。

7
Shane Madden

Apacheパッケージが削除されたときにのみ実行されるexecリソースを持つことができます。

package { "Apache2":
  ensure => absent,
}

exec { "remove-Apache-dependencies"
  command => "apt-get -y autoremove",
  subscribe => Package["Apache2"],
  refreshonly => true,
}
2
sciurus