我正在运行带有Wiki的服务器,该维基是使用Puppet设置的。这是我的wiki
类的简化版本:
class wiki($name, $repo, $username, $password) {
# details omitted
}
我目前正以如下方式使用它:
class profiles::my_wiki_server {
class { 'wiki' :
name => 'wiki',
repo => 'wiki',
username => 'admin',
passowrd => 'topsecret'
}
}
这很好。现在,我想在同一台服务器上运行第二个Wiki(我们将其称为jokes
)。不幸的是,使用另一个class { 'wiki' :
声明不起作用,正如我在其他问题中所记录的那样。
所以我的解决方法是创建两个类:
class wiki($name, $repo, $username, $password) {
# details omitted
}
class wiki::default($name, $repo, $username, $password) {
include wiki
}
class wiki::jokes($name, $repo, $username, $password) {
include wiki
}
我可以如下使用它们:
class profiles::my_wiki_server {
class { 'wiki::default' :
name => 'wiki',
repo => 'wiki',
username => 'admin',
passowrd => 'topsecret'
}
class { 'wiki::jokes' :
name => 'jokes',
repo => 'jokes',
username => 'admin',
passowrd => 'topsecret'
}
}
但是,当我这样做时,未设置变量(错误:expects a value for parameter 'name'
等)。
是否可以设置这些变量,以便原始wiki
类可以使用它们?
答案 0 :(得分:2)
如评论中所述,您需要使用定义的类型而不是类。
定义的类型记录在https://puppet.com/docs/puppet/latest/lang_defined_types.html。
简短的版本是,而不是
class wiki ($name, $repo, $username, $password) {
# details omitted
}
您想要的
define wiki ($name, $repo, $username, $password) {
# details omitted
}
然后您可以根据需要多次使用定义的类型:
class profiles::my_wiki_server {
wiki { 'wiki':
name => 'wiki',
repo => 'wiki',
username => 'admin',
passowrd => 'topsecret'
}
wiki { 'wiki::jokes':
name => 'jokes',
repo => 'jokes',
username => 'admin',
passowrd => 'topsecret'
}
}