Puppet:声明具有继承的类
我目前在Puppet:声明具有继承的类,puppet,Puppet,我目前在/etc/puppet/modules/params/manifests/init.pp class modulename ($variable_name = 'Any string') inherits modulename::params{ file { '/tmp/mytoplevelclass.sh' : mode => '644', ensure => 'present', content => $variable_name
/etc/puppet/modules/params/manifests/init.pp
class modulename ($variable_name = 'Any string') inherits modulename::params{
file { '/tmp/mytoplevelclass.sh' :
mode => '644',
ensure => 'present',
content => $variable_name
}
}
class modulename::params{
}
但是,我在/etc/puppet/manifests/site.pp
中声明这些类时遇到了一个问题。目前,我把它写成
node default { #client
class { 'modulename':}
class { 'modulename::params':}
}
我知道这是不正确的,因为当我在客户端上运行puppet代理-t
时,我会收到一个错误
在/etc/puppet/manifests/site.pp中找不到声明的类modulename
我尝试了几种不同的配置,但仍然不确定该怎么做 Puppet根据类的完全限定名确定希望在其中查找类定义的文件。文件对其进行了一些详细说明;特别是,您应该查看。(我猜您是在Puppet 3上,但我将要讨论的细节在Puppet 4中没有变化。) 假设
/etc/puppet/modules
是modulepath中的一个目录,它是安装(或编写)modulename
模块的好地方,正如您所指出的那样。如果它不在模块路径中,则需要将模块移动到模块路径中的某个目录,或者将该目录添加到模块路径中。我假设您将通过后一种方法解决此类问题,因此/etc/puppet/modules/modulename
是一个有效的模块目录
现在,“modulename”类有点特殊,因为它的名称也是一个模块名;因此,它应该在/etc/puppet/modules/modulename/manifests/init.pp
中定义。另一方面,类modulename::params
应遵循在/etc/puppet/modules/modulename/manifests/params.pp
中定义的正常模式。我预计,如果将定义放入正确的文件中,Puppet将找到定义
奖金建议:
- 在节点块中使用,而不是类似于资源的声明
- 您的节点块可能根本不应该声明
modulename::params
/etc/puppet/modules
是modulepath中的一个目录,它是安装(或编写)modulename
模块的好地方,正如您所指出的那样。如果它不在模块路径中,则需要将模块移动到模块路径中的某个目录,或者将该目录添加到模块路径中。我假设您将通过后一种方法解决此类问题,因此/etc/puppet/modules/modulename
是一个有效的模块目录
现在,“modulename”类有点特殊,因为它的名称也是一个模块名;因此,它应该在/etc/puppet/modules/modulename/manifests/init.pp
中定义。另一方面,类modulename::params
应遵循在/etc/puppet/modules/modulename/manifests/params.pp
中定义的正常模式。我预计,如果将定义放入正确的文件中,Puppet将找到定义
奖金建议:
- 在节点块中使用,而不是类似于资源的声明
- 您的节点块可能根本不应该声明
modulename::params