Puppet:具有不同参数的多个实例
Puppet: Multiple Instances with Different Parameters
我正在 运行 连接一个带有 wiki 的服务器,它是使用 Puppet 提供的。这是我的 wiki
class:
的简化版本
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' :
声明不起作用,正如我在其他问题中看到的那样。
所以我的解决方法是创建两个 classes:
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
class 可以使用它们?
如评论中所述,您需要使用定义的类型而不是 class。
定义的类型记录在 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'
}
}
我正在 运行 连接一个带有 wiki 的服务器,它是使用 Puppet 提供的。这是我的 wiki
class:
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' :
声明不起作用,正如我在其他问题中看到的那样。
所以我的解决方法是创建两个 classes:
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
class 可以使用它们?
如评论中所述,您需要使用定义的类型而不是 class。
定义的类型记录在 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'
}
}