Ruby:使用脚本中的外部脚本进行比较

时间:2012-02-16 13:46:20

标签: ruby comparison ip

所以我得到了一个脚本(A),为新的虚拟服务器找到合适的IP地址。首先,它会查看数据库,看看他选择的第一个ip是否已经被另一台服务器占用。如果IP尚未使用,脚本将对其进行ping操作。如果ping没有响应,那么我们进入下一步,这就是我遇到问题的地方。

在下一步中,我必须检查IP地址是否已经在netscaler(路由器)中注册。为此,我必须在同一台机器上使用另一个脚本(B)。这个其他脚本返回netscaler中定义的所有ips的列表。当我运行它时,输出看起来像这样

x.x.x.x
x.x.x.x
x.x.x.x (and so on..).

我发现很多方法可以通过编写脚本A来执行脚本B,但是我发现的任何方法都不允许我做我想做的事。

我的目标是将找到的ip my script与列出的所有脚本进行比较,而不会在屏幕上打印最后的脚本。

所以,为了让它更清楚一点,让我们说A的脚本找到了IP:1.2.3.4

然后它将调用脚本B,它将返回脚本A此列表

1.2.3.5 1.2.4.5 1.2.5.1 等等。

然后A会将1.2.3.4与脚本B返回的所有内容进行比较,而不会在屏幕上显示它们。

非常感谢!

2 个答案:

答案 0 :(得分:2)

我会将scriptB业务逻辑与scriptB ui(CLI)逻辑分开:

scriptA.rb
scriptB.rb
netscaler.rb # extract logic here

list of all the ips defined in the netscaler逻辑提取到单独的类/方法中:

#netscaler.rb
class Netscaler
  def self.list_ips
    # return array of ips here
  end
end

#scriptB.rb
require_relative 'netscaler'

ips = Netscaler.list_ips
puts ips # script B may show these ips on the screen
...    

#scriptA.rb
require_relative 'netscaler'

ips = Netscaler.list_ips
# script A will not show them. Instead it will operate on the returned result.
...

答案 1 :(得分:0)

您可以使用反引号执行脚本B并返回输出:

ip_list = `scriptB`.split("\n")

这可以插入Alex的组织建议中。如果脚本B是你不能控制的非Ruby脚本,我会这样做。

请注意,如果有任何前导或尾随空格,您可以在末尾添加.map(&:strip)