Ruby:使用脚本中的外部脚本进行比较
所以我得到了一个脚本(a),它为一个新的虚拟服务器找到了一个合适的IP地址。首先,它查看数据库,看看他选择的第一个ip是否已经被其他服务器占用。如果IP尚未使用,脚本将ping它。如果ping没有响应,那么我们进入下一步,这就是我遇到的问题 在下一步中,我必须检查IP地址是否已经在netscaler(路由器)中注册。为此,我必须在同一台机器上使用另一个脚本(B)。另一个脚本返回netscaler中定义的所有IP的列表。当我运行它时,输出如下所示Ruby:使用脚本中的外部脚本进行比较,ruby,comparison,ip,Ruby,Comparison,Ip,所以我得到了一个脚本(a),它为一个新的虚拟服务器找到了一个合适的IP地址。首先,它查看数据库,看看他选择的第一个ip是否已经被其他服务器占用。如果IP尚未使用,脚本将ping它。如果ping没有响应,那么我们进入下一步,这就是我遇到的问题 在下一步中,我必须检查IP地址是否已经在netscaler(路由器)中注册。为此,我必须在同一台机器上使用另一个脚本(B)。另一个脚本返回netscaler中定义的所有IP的列表。当我运行它时,输出如下所示 x.x.x.x x.x.x.x x.x.x.x (
x.x.x.x
x.x.x.x
x.x.x.x (and so on..).
我找到了许多方法来执行脚本B,但没有一种方法允许我做我想做的事情
我的目标是将我的脚本找到的ip与列出的所有ip进行比较,而不将最后的ip打印在屏幕上
所以,为了更清楚一点,让我们假设纸条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返回的所有内容进行比较,而不在屏幕上实际显示它们
多谢各位 我会将
scriptB
业务逻辑与scriptB
ui(CLI)逻辑分开:
将netscaler逻辑中定义的所有IP的列表提取到单独的类/方法中:
#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.
...
您可以使用backticks执行脚本B并返回输出:
ip_list = `scriptB`.split("\n")
这可以插入Alex的组织建议中。如果脚本B是您无法控制的非Ruby脚本,我会这样做
请注意,如果有任何前导或尾随空格,您可以在末尾添加一个.map(&:strip)
。非常感谢您的建议和解决方案。现在一切都很好!我以前从未在ruby中使用过类,也从未做过相关的工作。再次感谢!
ip_list = `scriptB`.split("\n")