tom*_*ics 5 puppet dependencies
我希望在服务 nginx 之后创建文件“运行”,但如果文件运行发生更改,我也想通知服务 nginx。通知意味着它在 nginx 之前运行。
用例如下。我们使用 dj bernsteins daemontools 来管理 nginx。由于我们需要执行一些步骤(创建 /etc/service,添加运行文件..),我们构建了一个定义的类型来执行这些操作。现在我们不希望我们的 nginx 模块与 daemontools 模块有任何连接,这就是我们不想订阅 daemontools 文件的原因。订阅也将扭转依赖循环。我正在寻找类似的东西,只有在模块 nginx 完全完成时才运行模块。
class { daemontools:
file {'run':
require => Service[nginx],
notify => Service[nginx]; # <<< this wont do :(
}
}
class { nginx:
service { 'nginx': }
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
托马斯
这不是一件容易的事,因为问题在第一次运行后就发生了变化。我的问题中描述的问题仅适用于必须配置的服务器是全新的时。
首次运行:等待所有文件复制完成(class nginxcomplete)然后放置运行文件
第二次运行:采用对运行文件进行通知的常用方法。这次它可以在服务之前运行。这在第一次运行时不起作用。
所以我们通过添加一个名为 nginx-ready 的额外“状态”文件来解决这个问题
所以在我们定义的类型add_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}"],
}
}
Run Code Online (Sandbox Code Playgroud)
在我们的模块中,我们创建了准备好的文件,该文件取决于所有必要的内容。
class nginx ( ... params) {
...
file { '/var/run/nginx-ready':
require => [ Package[$nginx_dependencies], File[$nginx_files] ],
before => Service['nginx'],
content => 'ready file for daemontools',
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助!