私はPuppetにかなり慣れていませんが、これまでのところ本当に気に入っています。現在、小さなアーキテクチャを自動化するように設定しています。
ただし、問題が1つあります。パッケージを削除して、確実に停止したいのです。これを実現するために、マニフェストに次のエントリがあります。
package { 'supervisor':
ensure => absent,
}
service { 'supervisor':
ensure => stopped,
enable => false,
hasstatus => true,
}
この問題は、マニフェストがノードに一度適用されると、次の実行時に次のエラーが発生することです。
debug: Service[supervisor](provider=debian): Could not find supervisor in /etc/init.d
debug: Service[supervisor](provider=debian): Could not find supervisor.sh in /etc/init.d
err: /Stage[main]/Screenly_core/Service[supervisor]: Could not evaluate: Could not find init script for 'supervisor'
パッケージが実際に存在する場合にのみstop-procedureが実行される(そしてパッケージが削除される前に実行される)ような、ある種の条件ステートメントを実行する方法はありますか?
Debianベースのシステム(そして私はrpmシステムでも想定しています)では、パッケージを削除すると、ファイルを削除する前にサービスが停止します(debパッケージの事前フェーズ)。
しかし、あなたが求めることは、「require」で依存関係を挿入することによって達成することができます
package { 'supervisor':
ensure => absent,
require => Service["supervisor"],
}
service { 'supervisor':
ensure => stopped,
enable => false,
hasstatus => true,
}