Итак, у меня есть специальный модуль, который просто настраивает простой сервер 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.