我只是在学习Puppet(我们在本地拥有Puppet Enterprise)。我想了解“角色和配置文件”模式。请原谅任何命名滑倒。
如何使用配置文件的多个实例创建角色,其中配置文件实例仅因参数而异?我猜Hiera适合这个,但我不确定如何。
例如:
Puppetfile:
mod 'puppetlabs-apache', '2.3.0'
apache.pp个人资料
class profile::apache (
String $port = '80',
) {
class { 'apache':
listen => $port,
}
}
twoapaches.pp role
class role::twoapaches {
include profile::apache
include profile::apache
}
我想要一个twoapaches角色的实例在端口90和100上有一个apache - 我该怎么做?
答案 0 :(得分:4)
你实际上不能在Puppet中使用这样的类;一个类只能按节点声明一次。
您可能需要模块中的部分defined types。当您需要在单个节点上多次声明用户定义的“资源”时,将使用定义的类型。
E.g。个人资料可能是:
class profile::two_vhosts {
apache::vhost { 'ip1.example.com':
ip => ['127.0.0.1','169.254.1.1'],
port => '80',
docroot => '/var/www/ip',
}
apache::vhost { 'ip2.example.com':
ip => ['127.0.0.1'],
port => '8080',
docroot => '/var/www/ip',
}
}
角色可能是:
class role::two_vhosts {
include profile::two_vhosts
include profile::other_stuff
...
}
如果您需要然后传入端口,则可能有:
class profile::two_vhosts (
String $ip1_port,
String $ip2_port,
) {
apache::vhost { 'ip1.example.com':
ip => ['127.0.0.1','169.254.1.1'],
port => $ip1_port,
docroot => '/var/www/ip',
}
apache::vhost { 'ip2.example.com':
ip => ['127.0.0.1'],
port => $ip2_port,
docroot => '/var/www/ip',
}
}
您可以然后将您的角色设为:
class role::two_vhosts {
class { 'profile::two_vhosts':
ip1_port => '80',
ip2_port => '8080',
}
include profile::other_stuff
...
}
但在实践中,人们将此处使用自动参数查找功能与Hiera(puppetlabs/apache)结合使用。
答案 1 :(得分:1)
我也会使用Hiera作为参数。这样,您可以根据需要轻松更改端口,并遵守不放置classes inside the roles的规则:
class role::two_vhosts {
include profile::two_vhosts
include profile::other_stuff
...
}
包含角色时的Hiera配置将是这样的:
profile::two_vhosts::ip1_port: '80'
profile::two_vhosts::ip2_port: '8080'