所以我有一个自定义模块,只设置一个简单的 nginx 服务器,以学习如何正确制作 puppet 模块。
但是似乎我在声明类时的值没有被传递进去。它只是使用默认值。
下面是我重要的类代码片段,以及base.pp
我在控制库中使用的代码。
基类 init.pp
:
class ufprovisioning (
$webserver_manage = $ufprovisioning::params::webserver_manage,
$site_name = $ufprovisioning::params::site_name,
) inherits ufprovisioning::params {
contain ufprovisioning::install
contain ufprovisioning::config
contain ufprovisioning::service
Class['::ufprovisioning::install'] -> Class['::ufprovisioning::config'] ~> Class['::ufprovisioning::service']
Class['::ufprovisioning::install'] ~> Class['::ufprovisioning::service']
}
参数类 params.pp
:
class ufprovisioning::params {
$site_name = "webserver.test"
$webserver_manage = true
}
配置类 config.pp
:
class ufprovisioning::config {
assert_private()
$webserver_manage = $::ufprovisioning::params::webserver_manage
$site_name = $::ufprovisioning::params::site_name
nginx::resource::server { 'cclloyd.com':
ensure => present,
server_name => [$site_name],
www_root => "/var/www/${site_name}",
listen_port => 80,
ssl => false,
}
}
控制类 base.pp
:
class profile::base {
class { '::ntp': }
class { 'ufprovisioning':
site_name => "examplesite.test",
webserver_manage => true,
}
}
答案1
您的ufprovisioning::config
类直接从 设置变量值,但是在 中声明它时,ufprovisioning::params
您使用顶级范围类设置值。ufprovisioning
profile::base
让我换一种说法,以防这没有意义。您正在通过 base.pp 设置 init.pp 的参数值,base.pp 从 params.pp 获取默认值。但是,这种逻辑是不正确的,因为 config.pp 获取值直接地来自 params.pp。为了解决这个问题,config.pp 应该从 init.pp 继承值。
您可以通过将变量移动到ufprovisioning::config
从顶级范围类继承的类参数来修复它,如下所示;
class ufprovisioning::config (
$webserver_manage = $::ufprovisioning::webserver_manage
$site_name = $::ufprovisioning::site_name
) inherits ufprovisioning {
assert_private()
nginx::resource::server { 'cclloyd.com':
ensure => present,
server_name => [$site_name],
www_root => "/var/www/${site_name}",
listen_port => 80,
ssl => false,
}
}
但是,请注意,这不再是较新版本的 Puppet 和 Hiera 5 建议使用的模式。