我们有一个基本的“nginx”类,节点的类包含这个基类并在/etc/nginx/conf.d下添加它们的配置文件
我希望 nginx 服务在单个位置订阅 /etc/nginx/conf.d,这样编写节点类的人就不必记住添加notify => Service['nginx']
。我尝试使用下面的 Puppet 代码,但它不起作用(即,在我修改 application.conf 后,nginx 服务没有重新加载)。
这可能吗?
模块/nginx/init.pp
class nginx {
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
hasstatus => true,
hasrestart => true,
require => Package['nginx'],
subscribe => File['/etc/nginx', '/etc/nginx/conf.d'],
}
file { ['/etc/nginx', '/etc/nginx/conf.d']:
ensure => directory,
owner => application,
group => application,
recurse => true,
}
}
模块/应用程序/init.pp
class application {
file {'/etc/nginx/conf.d/application.conf':
ensure => present,
owner => application,
group => application,
source => 'puppet:///modules/application/application.conf',
require => Package['nginx'],
}
}
答案1
使用 Puppet 我发现,如果你正在做的事情没有立即奏效,那么你可能正在尝试做一些你不应该做的事情。在这种情况下,你可能不希望每个单独的站点只将配置文件放入 nginx/conf.d 中。相反,您需要创建一个代表 nginx vhost 的定义资源。在该资源中,您需要负责将正确的配置文件放入 conf.d 中,并通知 nginx 服务。
这样做的一个好处是您可以标准化所有需要的配置。例如,大多数 nginx 站点都需要启用 gzip。假设您忘记了这一点,您是宁愿在默认模板中进行此更改,还是必须找到每个定义的 nginx 配置进行更改?或者假设在用于 HTTPS 的密码中发现了另一个漏洞。使用一个标准 nginx 配置,您需要更改它。由于每个应用程序都会删除自己的配置文件,因此您将在各个地方进行更改。
答案2
如果你需要将通用功能抽象为可重用的功能,最好的选择是创建一个定义的类型。类似这样的方法应该可行:
define nginx::config_fragment (
$group,
$owner,
$source,
) {
file { "/etc/nginx/conf.d/${title}.conf":
ensure => 'file',
group => $group,
owner => $owner,
source => $source,
}
}
然后,在site.pp
您的资源类型上设置默认值:
Nginx::Config_fragment {
group => 'application',
owner => 'application',
notify => Service['nginx'],
}
每当触发刷新时,都会file
通知封闭的定义类型,然后安排 nginx 服务重新加载。
答案3
不确定这是否有效,但是如何创建一个简单的 exec,根据受监控目录的内容生成一个文件,订阅该文件,然后触发重启...
例如:
class nginx {
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
hasstatus => true,
hasrestart => true,
require => Package['nginx'],
subscribe => File['/etc/nginx', '/etc/nginx/conf.d'],
}
file { ['/etc/nginx', '/etc/nginx/conf.d']:
ensure => directory,
owner => application,
group => application,
recurse => true,
}
exec { "/tmp/nginx-config-checksum":
path => "/usr/local/bin/:/bin:/usr/sbin",
command => 'find /etc/nginx/conf.d | xargs md5sum > /tmp/nginx-config-checksum',
}
file { "/tmp/nginx-config-checksum"
notify => Service['nginx']
}
}