1

我有这个木偶课

class project::className(
  $program_name = '',
  $command = ''
) {
   ....
}

我像这样使用它

class { 'project::classname':
  program_name => 'programe_name',
  command => 'ls /dev/'
}

这很好用,但是当我像这样使用它两次时

class { 'project::classname':
  program_name => 'programe_name',
  command => 'ls /dev/'
}

class { 'project::classname':
  program_name => 'programe_name2',
  command => 'ls /dev/'
}

Vagrant Provision 给了我这个错误

错误:重复声明:Class[project::classname] 已在文件中声明..

所以我的问题是我怎样才能重用这个类?

谢谢!

4

1 回答 1

0

您需要了解类和定义类型的区别。

类与定义的类型

不应以类的“面向对象”含义来考虑类。这意味着机器属于特定类别的机器。

例如,通用网络服务器将是一个类。您可以将该类作为任何需要构建为通用网络服务器的节点的一部分。该类将放入它需要做的任何包等。

另一方面,定义的类型(用'define'创建)可以在一台机器上有很多实例,并且可以封装类和其他资源。它们可以使用用户提供的变量创建。例如,为了管理 iptables,定义的类型可以将每个规则包装在 iptables 文件中,并且 iptables 配置可以由这些定义的类型生成的片段构建。

除了内置托管类型之外,类和定义类型的使用对于拥有可管理的 Puppet 基础设施非常有帮助。

参考:https ://web.archive.org/web/20160305195130/https://docs.puppetlabs.com/guides/best_practices.html

于 2015-09-30T03:46:52.220 回答