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'
    }
}