所以我得到了一个脚本(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返回的所有内容进行比较,而不会在屏幕上显示它们。
非常感谢!
答案 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)
。