I am running a server with a wiki, which is provisioned using Puppet. Here's a simplified version of my wiki
class:
class wiki($name, $repo, $username, $password) {
# details omitted
}
I am using it currently as follows:
class profiles::my_wiki_server {
class { 'wiki' :
name => 'wiki',
repo => 'wiki',
username => 'admin',
passowrd => 'topsecret'
}
}
This works fine. Now I want to run a second wiki (let's call it jokes
) on the same server. Unfortunately, using another class { 'wiki' :
declaration doesn't work, as I saw it already documented in other questions.
So my workaround is to create two 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
}
I can use those as follows:
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'
}
}
However, when I do so, the variables are not set (Error: expects a value for parameter 'name'
etc.).
Is there a way to set those variables so that the original wiki
class can use them?
As mentioned in the comments, you need to use a defined type rather than a class.
Defined types are documented at https://puppet.com/docs/puppet/latest/lang_defined_types.html.
The short version is that, rather than
class wiki ($name, $repo, $username, $password) {
# details omitted
}
you want
define wiki ($name, $repo, $username, $password) {
# details omitted
}
You can then use the defined type as many times as you want:
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'
}
}