Puppet使用ENC报'Could not load external node results for'(2)

可以清楚的看到一个判断,然后抛出异常,没有任何的重试机制....,为此我很确信我的web,它如果能有一次重试的机会,那么下一次一定能正常获得返回值,  然后我就给了它很多次的机会。。。
 

#raise "Error retrieving node #{certname}: #{res.class}" unless res.code == "200"

while res.code != "200"

res = http.start { |http| http.request(req) }

puts "Error retrieving node #{certname}: #{res.class}"    sleep 3

end


这时有些人可能会想,while 循环,加3秒重试,,如果一直不成功怎么办?

在脚本最开头会有配置timeout的地方,在timeout到了之后,会关闭http连接,然后读取cache。
 

# query External node

begin

result = ""

timeout(tsecs) do

result = enc(certname)

cache(certname, result)

end

rescue TimeoutError, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED

# Read from cache, we got some sort of an error.

result = read_cache(certname)


这段代码可以很清晰的看出,在timeout没超时时会调用enc这个方法返回结果,然后在调用cache方法写入到cache文件

如果超时或http错误,则读取cache,但是这里的异常不包括...,HTTP的...,如果如果是4XX的错误,不会触发读取cache的异常..

Puppet 学习系列:

Puppet 学习一:安装及简单实例应用

Puppet学习二:简单模块配置和应用

相关阅读:

有关Puppet agent端三种备份恢复方案探讨研究
选择更安全的方式注册你的Puppet节点
通过配置SSH深刻理解Puppet的语法及工作机制
Puppet利用Nginx多端口实现负载均衡
CentOS(5和6)下Puppet的C/S模式实例

Puppet 的详细介绍请点这里
Puppet 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e8514e8feb7f69e744b3eaa410f818c4.html