自分に人形を教える。
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にこれを実行させるにはどうすればよいですか?
残念ながら、組み込みのリソースタイプでこれを行う良い方法はなく、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つ目は間違いなくより魅力的です。可能な限り組み込み型に固執できるのは素晴らしいことですが、依存関係が非常に多いパッケージを削除する場合は実用的ではありません。
Apacheパッケージが削除されたときにのみ実行されるexecリソースを持つことができます。
package { "Apache2":
ensure => absent,
}
exec { "remove-Apache-dependencies"
command => "apt-get -y autoremove",
subscribe => Package["Apache2"],
refreshonly => true,
}