假设,以下 Puppet 代码:
define apache::base($pkgver = '2.4.10') {
$apache_ver = $pkgver
...
}
define apache::vhost($instance) {
...
$apache_ver = getvar(......)
}
apache::base{ "static-files":}
apache::base{ "dynamic": pkgver => '2.4.8' }
apache::vhost{ "static.example.com": instance => "static-files"}
中的代码如何apache::vhost
引用相应的$pkgver
(参数)或(变量) ?$apache_ver
apache::base
我们的 stdlib 太旧了(我们的 Puppet 仍然是 2.7.x),没有getparam()
。getvar()
应该能够做到这一点 —— 但怎么做呢? 在这种情况下,变量的全名是什么?
我尝试过getvar("apache::base[$instance]::apache_ver")
但getvar("apache::base::$instance::apache_ver")
无济于事——getvar 返回一个空字符串...什么是正确的方法?
答案1
你不知道。
要获得这样的值,你必须参考实例您定义的类型,例如
Apache::Vhost['main-site']::server_alias
但这样的事情并未实现。
您需要重构模型。在您的模块中,apache::vhost
不能独立于apache::base
。相反,您需要将资源哈希传递给,apache::base
以便它可以声明虚拟主机本身。
define apache::base($pkgver = '2.4.10', $vhosts = {}) {
$apache_ver = $pkgver
...
create_resources('apache::vhost', $vhosts, { instance => $title })
}
并像使用它一样
apache::base{ "static-files":
vhosts => {
"static.example.com" => {
# attributes for Apache::Vhost["static.example.com"] go here
},
}
}