Puppet 未将参数传递给自定义模块

Puppet 未将参数传递给自定义模块

所以我有一个自定义模块,只设置一个简单的 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您使用顶级范围类设置值。ufprovisioningprofile::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 建议使用的模式。

相关内容