Puppet:具有不同参数的多个实例

问题描述 投票:0回答:1

我正在运行带有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类可以使用它们?

class include puppet
1个回答
0
投票

如注释中所述,您需要使用定义的类型而不是类。

定义的类型记录在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'
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.