如何在Puppet中定义两次相同的服务?

时间:2012-06-19 13:15:11

标签: service puppet

为了使用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类中管理服务的最佳做法是什么?划分多个类,或者有一个“重命名”服务的选项可以多次声明它?

2 个答案:

答案 0 :(得分:3)

尝试以下方法以消除重复错误,但您尝试做的是错误的。 Puppet将系统带到某个一致的状态 - 所以告诉停止服务X,做一些工作,启动服务X - 它超出正确的木偶使用范围,如果服务所依赖的某些文件被修改,则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"],
}
}

答案 1 :(得分:1)

将exec与服务重启一起用作"部署文件"的钩子(通知)。行动(包/另一个执行官)。将服务本身定义为仅运行一次,因为这是您通常想要保证的。 Puppet用于描述目标状态。