Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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,我目前在/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

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