我希望有人能帮帮我。
我在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参数是一个包含字符串的变量。
我怎么能那样做??然后如何调用修改后的方法?
谢谢! !
您应该将其作为参数添加,但是这意味着您需要在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) }
这将确保它们都不返回false条件。如果您想要运行它们并查找错误,您可以尝试:
failures = @hosts.reject { |h| host.puppetrun_oneClass!(@myDeploy) }
if (failures.empty?)
# Worked
else
# Had problems, failures contains list of failed `@hosts`
end
第一部分返回所有失败的@hosts
条目的数组。捕获此列表并使用它来生成更健壮的错误消息可能会很有用,可能会描述那些不工作的错误。