我已经写了一个自定义的puppet函数,它工作正常,取决于cloudservers gem(一个Rackspace客户端库)。 如果我在运行puppet之前在服务器上预先安装了gem,但是如果我没有安装gem,就好像在“编译”扫描过程中似乎正在运行的function完全中断,而且在我的包定义已经实现之前就完成了。 这是我的.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 } }
有没有办法阻止这么早运行的function,或者至less运行取决于正在安装的库。 另外,有没有办法,我可以添加依赖关系的function文件夹中的某个地方将可用的function?
你所能做的就是把这个require包装在一个rescue LoadError块中,它返回一个空的列表或者一个简单的,非错误的返回值。 这必须在你的函数内部完成,因为函数所在的文件只能被加载一次,但是函数内部的代码每次调用时都会运行。