比方说,我有3台服务器,这3台服务器都安装了apache。 对于它们中的每一个,我必须实例化几个apache :: vhost定义的资源。
有没有办法而不是那样做
node 'srv1.example.com' inherit webserver {
apache::vhost { 'toto1' :
... => ... ,
}
apache::vhost { 'toto2' :
... => ... ,
}
apache::vhost { 'toto3' :
... => ... ,
}
}
可以使用以下模式执行某些操作(承认我定义的资源只是名称可以执行所需的操作)
node 'srv1.example.com' inherit webserver {
$vhost = ['toto1', 'toto2', 'toto3'];
??????
}
答案 0 :(得分:4)
是
node 'srv1.example.com' inherit webserver {
$vhosts = ['toto1', 'toto2', 'toto3'];
apache::vhost { [$vhosts]:
... => ... ,
}
}
当然,这要求所有内容都相同或基于名称(在apache :: vhost定义中可用$name
)。
如果你想保持apache :: vhost作为一个简单的定义,并且仍然做一些更复杂的事情来计算名称中的参数,你可以使用中间定义来完成它们:
define blah::vhost {
$wwwroot = "/var/www/html/blah/${name}"
$wwwhostname = "${name}.example.com"
if ! defined(File[$wwwroot]) {
file { $wwwroot:
ensure => directory,
mode => 0775,
}
}
apache::vhost { $name:
path => $wwwroot,
aliases => [$name],
hostname => $wwwhostname,
require => File[$wwwroot],
}
}
blah::vhost { [$vhosts]: }