在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配置中删除节点继承。差不多了。我现在使用角色来配置节点。我不需要配置文件,我只有一个(或两个)从每种服务器。谢谢。