Puppet:声明一个继承的类

时间:2017-01-20 18:51:07

标签: 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
  }
}

class modulename::params{

}

但是,我在/etc/puppet/manifests/site.pp声明这些类时遇到了问题。目前,我把它写成

node default { #client
  class { 'modulename':}
  class { 'modulename::params':}
}

我知道这是不正确的,因为当我在客户端上运行puppet agent -t时,我收到一条错误说明

  

在/etc/puppet/manifests/site.pp找不到声明的类模块名

我尝试了几种不同的配置,但仍然不确定该怎么做。

1 个答案:

答案 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会找到定义。

奖金建议: