Назад | Перейти на главную страницу

Марионетка не передает параметр в настраиваемый модуль

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