Sendmailをアンインストールして、Postfixの最新版をインストールするマニフェスト。
Sendmailのアンインストール部分でハマったのでメモ。
ハマって試行錯誤した部分は後述するとして、
完成品のマニフェスト
# Postfixのインストール package { 'postfix': ensure => latest, } # Sendmailのアンインストール package { 'sendmail': ensure => purged, } # Postfixの自動起動設定 service {'postfix': name => 'postfix', enable => 'true', ensure => running, require => Package['postfix'], } # Sendmailを削除してPostfixしかMTAがないけど一応alternativesコマンドで設定しておく exec { 'alternativesmta': path => ['/usr/bin', '/usr/sbin'], command => 'alternatives --set mta /usr/sbin/sendmail.postfix', require => Package['postfix'], } # /etc/postfix/main.cfのテンプレートファイル配布 file { '/etc/postfix/main.cf': content => template('/etc/puppet/manifests/templates/etc/postfix/main.cf'), owner => 'root', group => 'root', mode => 644, notify => Service['postfix'], }
ハマった部分
ハマった部分はSendmailをアンインストールする↓この部分(これだと想定通りアンインストールされました。)
# Sendmailのアンインストール package { 'sendmail': ensure => purged, }
当初はensureを以下のようにabsentにしていました。(これだと想定通りアンインストールされませんでした。)
# Sendmailのアンインストール package { 'sendmail': ensure => absent, }
調べた
何でかなと思い、調べました。
pakageリソースタイプのensureに指定出来るパラメータは
absentしか知らなかったのですが、↓を参照してpurgedがあることを発見!
http://www.puppetcookbook.com/posts/remove-package.html
# remove a package but leave its config files alone package { "screen": ensure => "absent" } # remove a package and purge its config files package { "screen": ensure => "purged" }
Removing a package via Puppet is as simple as installing one.
Simply setting “ensure” to “absent” will remove the package.
If your platforms package provider supports purging packages (you can check in the table under packages then you can specify “Purged” as a value and it should remove the config files along with the package.
absentとpurgedの違いは何だろうと思ったら、
どうも設定ファイルが含まれるパッケージの場合、purgedを指定しないとパッケージはアンインストールされないっぽい。(っぽいっていうかされませんでした。)
まとめるとこんな感じか?
設定ファイル有り | 設定ファイル無し | |
absent | アンインストールされない | アンインストールされる |
purged | アンインストールされる | アンインストールされる |
試しに設定ファイルの無い単体のパッケージにensureにpurgedを指定したマニフェストを適用してみたらアンインストールされました。
なので、パッケージをアンインストールするマニフェストを作成する時は、
packageのensureはpurgedにしておくと間違いないっぽいです。