我想要在服务nginx后创build文件“运行”,但也想通知服务nginx如果文件运行的变化。 通知意味着它在nginx之前运行。
用例如下。 我们使用dj bernsteins daemontools来pipe理nginx。 由于我们需要做一些步骤(创build/ etc / service,添加运行文件..),我们build立一个定义的types来完成这些事情。 现在我们不希望我们的nginx模块与daemontools模块有任何连接,这就是为什么我们不想订阅daemontools文件。 也订阅会扭转依赖周期。 我正在寻找类似的东西,只有在模块nginx完成时才运行模块。
class { daemontools: file {'run': require => Service[nginx], notify => Service[nginx]; # <<< this wont do :( } } class { nginx: service { 'nginx': } }
有任何想法吗?
托马斯
如果你的用例可以处理它的限制,你可以尝试使用阶段 。
stage { 'first': before => Stage['main'], } stage { 'last': } Stage['main'] -> Stage['last'] class { daemontools: stage => last; file {'run': require => Service[nginx], notify => Service[nginx]; } } class { nginx: stage => last; service { 'nginx': } }
这并不是一件容易的事情,因为问题在第一次运行后就会改变。 我的问题中描述的问题仅适用于必须configuration的服务器是全新的。
首先运行:等待所有文件被复制(完成nginx类),然后放置运行文件
第二次运行:对运行文件采取通常的通知方式。 这次它可以在服务之前运行。 这在第一次运行时不起作用。
所以我们通过添加一个名为nginx-ready的“状态”文件来解决这个问题
所以在我们定义的typesadd_daemontools.pp
define daemontools::add_service { file { "/etc/service/${service}/run": ensure => file, mode => 0755, owner => root, group => root, content => template("daemontools/service.erb"), path => "/etc/service/$service/run", # create run file when service is ready require => File["/var/run/${service}-ready"], # notify implies before notify => Service["${service}"], } }
在我们的模块中,我们创build了准备好的文件,这取决于所有必要的东
class nginx ( ... params) { ... file { '/var/run/nginx-ready': require => [ Package[$nginx_dependencies], File[$nginx_files] ], before => Service['nginx'], content => 'ready file for daemontools', } }
非常感谢您的帮助!