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

Итак, у меня есть специальный модуль, который просто настраивает простой сервер 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,
    }
}
1
задан 6 March 2018 в 05:13
1 ответ

Ваш класс 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.

0
ответ дан 4 December 2019 в 04:13

Теги

Похожие вопросы