我有一对 Puppet 自定义函数,其中一个,即 am_func_cluster,返回当前运行实例的数组哈希(读取文件作为输入),第二个调用该函数,遍历数组并返回第一个成功的监听端口 22。这是第二个功能:
module Puppet::Parser::Functions
newfunction(:am_func_head, :type => :rvalue ) do |args|
Puppet::Parser::Functions.function('am_func_cluster')
mCls = function_am_func_cluster(['/opt/running-inst.txt'])
cls = args[0].to_sym if args[0].is_a? String
require 'socket'
require 'timeout'
mCls[cls].each do |dns|
begin
Timeout::timeout(1) { TCPSocket.new(dns, 22)
return (dns if mCls.key?(cls)) || 'undefined'
}
break
rescue SocketError
rescue Timeout::Error
end
end
end
end
运行时,它返回此错误:
错误:无法从远程服务器检索目录:服务器上的错误 400:返回无法跨节点 ip-10-0-9-130.xxx 上 /etc/puppet/manifests/nodes.pp:19 的线程跳转
如果我在脚本中注释掉该begin ... end
位,它就可以正常工作。到目前为止,谷歌在这种情况下并没有给予太多帮助。有谁知道这个错误是什么意思或者我做错了什么。仍然没有发现自己非常有效地理解 Ruby 返回的错误。任何指针都非常感谢。干杯!!