Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在puppet模块中重写参数_Puppet - Fatal编程技术网

在puppet模块中重写参数

在puppet模块中重写参数,puppet,Puppet,我想覆盖基本节点的参数。我想得到的是这样一种模式: # File manifests/nodes.pp node myDefault { class { 'my::common::puppet_setup': service => 'enable', pushable => 'disable', } # Do lots of default things ... } node 'myFirstNode' inherits my

我想覆盖基本节点的参数。我想得到的是这样一种模式:

# File manifests/nodes.pp
node myDefault {
    class { 'my::common::puppet_setup': 
        service => 'enable',
        pushable => 'disable',
    }
    # Do lots of default things ...
}
node 'myFirstNode' inherits myDefault {
    # Do something ...
}
node 'mySecondNode' inherits myDefault {
    class { 'my::common::puppet_setup::params':
        service => 'disable',
        pushable => 'enable',
    }
}
# File modules/my/manifests/common/puppet_setup.pp
class my::common::puppet_setup (
    $pushable = $my::common::puppet_setup::params::pushable,
    $service  = $my::common::puppet_setup::params::service,
) inherits my::common::puppet_setup::params {
    # package that configures puppet node

    # input value validation
    validate_re($pushable, ['^enable$', '^disable$', '^ignore$', ])
    validate_re($service, ['^enable$', '^disable$', '^ignore$', '^cron$', ])

    # setup puppet, start or disable agent, put ssh keys for push ...

}

class my::common::puppet_setup::params {
    $pushable = 'enable'
    $service  = 'enable'
    $puppetserver = 'puppet.my.site.de'
    case $::osfamily {
        'Debian': {
        }
        default: {
            fail("not implemented yet for {::operatingsystem}")
        }
    }
}
我了解puppet文档,我可以这样编写我的模块:

# File manifests/nodes.pp
node myDefault {
    class { 'my::common::puppet_setup': 
        service => 'enable',
        pushable => 'disable',
    }
    # Do lots of default things ...
}
node 'myFirstNode' inherits myDefault {
    # Do something ...
}
node 'mySecondNode' inherits myDefault {
    class { 'my::common::puppet_setup::params':
        service => 'disable',
        pushable => 'enable',
    }
}
# File modules/my/manifests/common/puppet_setup.pp
class my::common::puppet_setup (
    $pushable = $my::common::puppet_setup::params::pushable,
    $service  = $my::common::puppet_setup::params::service,
) inherits my::common::puppet_setup::params {
    # package that configures puppet node

    # input value validation
    validate_re($pushable, ['^enable$', '^disable$', '^ignore$', ])
    validate_re($service, ['^enable$', '^disable$', '^ignore$', '^cron$', ])

    # setup puppet, start or disable agent, put ssh keys for push ...

}

class my::common::puppet_setup::params {
    $pushable = 'enable'
    $service  = 'enable'
    $puppetserver = 'puppet.my.site.de'
    case $::osfamily {
        'Debian': {
        }
        default: {
            fail("not implemented yet for {::operatingsystem}")
        }
    }
}
网站上的文档说明: 当一个派生类被声明时,它的基类会首先被自动声明(如果它还没有在别处声明的话)

但是我得到了这个错误(添加了一些缩进):

我已经读了一周了,我想我的理解在某些地方是完全错误的,尽管我以puppetlabs ntp模块为例


我遗漏了什么?

您应该从中检查继承部分

Puppet将节点定义视为类。它不会将两者混合在一起,然后编译混合;相反,它编译基类,然后编译派生类,派生类获得父作用域和从基类修改资源属性的特殊权限

其中一个很好的解决方案是使用角色和配置文件,有一篇很棒的博客文章:
您可以使用虚拟资源:


它不能解决我的需要,但它告诉我我做错了什么。这是一个很好的链接。我做完工作回来了。再次感谢!两年前,每当我编辑一些行时,我就开始从我的puppet配置中删除节点继承。差不多了。我现在使用角色来配置节点。我不需要配置文件,我只有一个(或两个)从每种服务器。谢谢。