【问题标题】:How define twice the same service in Puppet?如何在 Puppet 中定义两次相同的服务?
【发布时间】:2012-06-19 13:15:10
【问题描述】:

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

【问题讨论】:

    标签: service puppet


    【解决方案1】:

    尝试以下方法以消除重复错误,但您尝试做的是错误的。 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"],
    }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        相关资源
        最近更新 更多