如何从一个定义中获取另一个定义中的变量?

如何从一个定义中获取另一个定义中的变量?

假设,以下 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_verapache::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
    },
  }
}

相关内容