Puppet:移除包并确保停止

vpe*_*son 7 ubuntu puppet

我对 Puppet 还很陌生,但到目前为止我真的很喜欢它。现在我正在设置它来自动化一个小型架构。

但是我有一个问题——我想删除一个包,并确保它被停止。为此,我的清单中有以下条目:

package { 'supervisor':
    ensure => absent,
}

service { 'supervisor':
    ensure     => stopped,
    enable     => false,
    hasstatus  => true,
}
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,一旦将清单应用于节点一次,我在下次运行时会收到以下错误:

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'
Run Code Online (Sandbox Code Playgroud)

有没有办法做某种条件语句,这样停止过程只在包确实存在时才执行(然后在包删除之前运行)?

hay*_*lci 3

在基于 debian 的系统上(我假设也在 rpm 系统上),删除软件包会在删除文件之前停止其服务(deb 软件包中的 prerm 阶段)。

但是您所要求的可以通过插入带有“require”的依赖项来实现

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

service { 'supervisor':
    ensure     => stopped,
    enable     => false,
    hasstatus  => true,
}
Run Code Online (Sandbox Code Playgroud)