Ruby: использовать внешний скрипт из скрипта для сравнения - PullRequest
0 голосов
/ 16 февраля 2012

Итак, я получил скрипт (A), который находит подходящий IP-адрес для нового виртуального сервера.Сначала нужно просмотреть базу данных, чтобы узнать, не выбрал ли первый выбранный им ip другой сервер.Если IP-адрес еще не используется, скрипт проверяет его.Если пинг не отвечает, тогда мы переходим к следующему шагу, и именно здесь у меня возникает проблема.

На следующем шаге я должен проверить, зарегистрирован ли IP-адрес вNetscaler (маршрутизатор) или нет.Чтобы сделать это, я должен использовать другой скрипт на том же компьютере (B).Этот другой скрипт возвращает список всех ips, определенных в netscaler.Когда я запускаю его, вывод выглядит так:

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

Я нашел много способов выполнить сценарий B путем отбеливания сценария A, но ничего из того, что я нашел, не позволяет мне делать то, что я хотел бы.

Моя цель - сравнить найденный мной ip-скрипт со всеми перечисленными, без вывода последних на экран.

Итак, чтобы было немного понятнее,скажем, сценарий A нашел IP: 1.2.3.4

Затем он вызвал бы сценарий B, который вернул бы сценарию A этот список

1.2.3.5 1.2.4.5 1.2.5.1 и т. д.on.

, а затем A сравнивает 1.2.3.4 со всеми, возвращенными сценарием B, фактически не отображая их на экране.

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Я бы отделил scriptB бизнес-логику от scriptB пользовательского интерфейса (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.
...
0 голосов
/ 16 февраля 2012

Вы можете использовать обратные пометки, чтобы выполнить скрипт B и вернуть вывод:

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

Это может быть включено в организационное предложение Алекса.Я бы сделал это, если скрипт B - это скрипт не-Ruby, который вы не контролируете.

Обратите внимание, что если есть пробелы в начале или в конце, вы можете добавить .map(&:strip) в конец.

...