web-dev-qa-db-ja.com

人形:パッケージの取り外しと停止を確認します

私は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が実行される(そしてパッケージが削除される前に実行される)ような、ある種の条件ステートメントを実行する方法はありますか?

7
vpetersson

Debianベースのシステム(そして私はrpmシステムでも想定しています)では、パッケージを削除すると、ファイルを削除する前にサービスが停止します(debパッケージの事前フェーズ)。

しかし、あなたが求めることは、「require」で依存関係を挿入することによって達成することができます

package { 'supervisor':
    ensure => absent,
    require => Service["supervisor"],
}

service { 'supervisor':
    ensure     => stopped,
    enable     => false,
    hasstatus  => true,
}
3
hayalci