我目前在/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 agent -t
时,我收到一条错误说明
在/etc/puppet/manifests/site.pp找不到声明的类模块名
我尝试了几种不同的配置,但仍然不确定该怎么做。
答案 0 :(得分:2)
Puppet根据类的完全限定名称确定希望在其中找到类定义的文件。文档详细介绍了它;特别是,您应该查看Module Fundamentals。 (我猜你是在Puppet 3上,但是我要讨论的细节在Puppet 4中没有改变。)
假设/etc/puppet/modules
是模块路径中的一个目录,它是安装(或编写)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