Итак, у меня есть специальный модуль, который просто настраивает простой сервер nginx, чтобы узнать, как правильно создавать марионеточные модули.
Но кажется, что мои значения, когда я объявляю класс, не передаются. Вместо этого он просто использует значения по умолчанию.
Ниже приведены важные фрагменты кода класса и 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,
}
}
Ваш класс ufprovisioning :: config
устанавливает значения переменных непосредственно из ufprovisioning :: params
, но вы устанавливаете значения с помощью ufprovisioning
класс верхней области видимости, когда вы объявляете его в profile :: base
.
Позвольте мне сформулировать его несколько иначе, если это не имеет смысла. Вы устанавливаете значения параметров для 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.