加载自定义 Puppet 函数的依赖项

加载自定义 Puppet 函数的依赖项

我编写了一个自定义 puppet 函数,它运行良好,依赖于 cloudservers gem(Rackspace 客户端库)。如果我在运行 puppet 之前在服务器上预先安装了 gem,那么这很好,但如果我没有安装 gem,那么就会完全崩溃,因为该函数似乎在“编译”扫描期间运行,远在我的包定义实现之前。这是我的 .pp 的样子,get_hosts 是需要 cloudservers gem 的函数。

package { "rubygems":
    ensure   => installed,
    provider => "gem";
}

package { "cloudservers":
    ensure   => installed,
    provider => "gem",
    require  => Package["rubygems"];
}

class hosts::us {

    $hosts = get_hosts("us")

    hostentry { $hosts: }
}

define hostentry() {
  $parts   = split($name, ',')
  $address = $parts[0]
  $ip      = $parts[1]
  $aliases = $parts[2]
  host{ $address: ip => $ip, host_aliases => $aliases }
}

有没有办法阻止函数过早运行,或者至少让它的运行依赖于正在安装的库。或者,有没有办法在函数文件夹中的某个位置添加可供函数使用的依赖项?

答案1

您所能做的就是将 包装require在一个rescue LoadError块中,该块返回一个空列表或任何简单的、不会引起错误的返回值。这必须在您的函数内部完成,因为函数所在的文件只会加载一次,但函数内部的代码将在每次调用该函数时运行。

相关内容