1

为了使用 Puppet 类部署 Varnish,我需要停止 Varnish 以移动和部署文件,然后在最后确保启动 Varnish。

我的问题很简单,如何在 Puppet 类中定义两次服务,以便在不同的步骤停止或启动服务?

class varnish::install (

    (...)

    service { "varnish":
        ensure => "stopped",
        require => Package['varnish'],
        before => Exec['mv-lib-varnish'],
    }

    (...)

    service { "varnish":
        ensure => "running",
        require => File["$varnishncsa_file"],
    }
}

我有一个Duplicate definition: Service[varnish] (...)错误,这是合乎逻辑的......

在 Puppet 类中管理服务的最佳实践是什么?划分为多个类,或者可以选择“重命名”服务以多次声明它?

4

2 回答 2

3

尝试以下方法以消除重复错误,但您尝试做的是错误的。Puppet 使系统处于某种一致的状态 - 所以告诉停止服务 X,做一些工作,启动服务 X - 它超出了适当的 puppet 使用范围,如果服务所依赖的某些文件被修改,puppet 更像是重新启动服务。

class varnish::install (

(...)

service { "varnish-stop":
    name => "varnish"
    ensure => "stopped",
    require => Package['varnish'],
    before => Exec['mv-lib-varnish'],
}

(...)

service { "varnish-start":
    name => "varnish"
    ensure => "running",
    require => File["$varnishncsa_file"],
}
}
于 2012-06-19T18:27:05.417 回答
1

使用 exec 和 service restart 作为“部署文件”操作(包/另一个 exec)的钩子(通知)。仅将服务本身定义为运行一次,因为这是您通常想要保证的。Puppet 用于描述目标状态。

于 2016-07-18T09:10:51.903 回答