我希望有人能帮助我。
我在ruby中有这个方法:
def puppetrun_oneClass!
ProxyAPI::Puppet.new({:url => puppet_proxy.url}).runSingle fqdn
end
然后我在其他方法中调用:
def update_multiple_puppetrun_oneClass_deploy
if @hosts.map(&:puppetrun_oneClass!).uniq == [true]
notice "Successfully executed, check reports and/or log files for more details"
else
error "Some or all hosts execution failed, Please check log files for more information"
end
end
其中 @hosts 是一个主机名数组。
现在,我想扩展 puppetrun_oneClass!以接受 @myDeploy 参数,其中 @myDeploy 参数是包含字符串的变量。
我怎么能这样做?然后我该如何调用修改后的方法?
谢谢!
答案 0 :(得分:0)
您应该将其添加为参数,但这意味着您需要向map
循环声明一个长格式块。
新方法:
def puppetrun_oneClass!(deploy)
# ... Code using `deploy` variable
end
新来电:
@hosts.map { |h| host.puppetrun_oneClass!(@myDeploy) }.uniq
请注意,uniq
是一个非常严厉的方法,如果您只想查看其中是否有任何失败。你可能想尝试find
,它会在第一个失败而不是盲目地执行它们时停止:
!@hosts.find { |h| !host.puppetrun_oneClass!(@myDeploy) }
这将确保他们都没有返回错误的条件。如果您想要全部运行它们并查找错误,您可以尝试:
failures = @hosts.reject { |h| host.puppetrun_oneClass!(@myDeploy) }
if (failures.empty?)
# Worked
else
# Had problems, failures contains list of failed `@hosts`
end
第一部分返回失败的任何@hosts
条目的数组。捕获此列表并使用它来生成更强大的错误消息(可能描述那些不起作用的消息)可能很有用。