Puppet: несколько экземпляров с разными параметрами - PullRequest
0 голосов
/ 30 апреля 2020

Я использую сервер с вики, который предоставляется с помощью 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'
    }
}

Это прекрасно работает. Теперь я хочу запустить вики (давайте назовем это 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' et c.).

Есть ли способ установить эти переменные, чтобы исходный класс wiki мог их использовать?

1 Ответ

1 голос
/ 01 мая 2020

Как упомянуто в комментариях, вам нужно использовать определенный тип, а не класс.

Заданные типы документированы в https://puppet.com/docs/puppet/latest/lang_defined_types.html.

Short версия в том, что вместо

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