Могу ли я получить информацию о сервере из символа роли в Capistrano? - PullRequest
1 голос
/ 05 октября 2011

Я использую Capistrano для нестандартного развертывания приложения, и у меня есть очень большой файл, который я загружаю на несколько серверов через шлюз. Я хотел бы вместо того, чтобы capistrano загружал этот файл с компьютера-развертки на каждый сервер в списке, чтобы загрузить его на сервер шлюза, а затем отсканировать его по локальной сети оттуда (это гораздо быстрее, когда я проверяю его вручную) .

У меня проблемы с поиском способа заставить капистрано сделать это. Я могу использовать что-то вроде:

myservers = find_servers_for_task(current_task)
myservers.each do |server|
  run "scp HARDCODED_GATEWAY:/remote/file /local/file", :hosts => server.host
end

Мне не нравятся жестко закодированные шлюзы; Я определил это в роли с именем: шлюз. Есть ли способ извлечь имя хоста из символа: gateway? Я знаю, что в роли может быть несколько серверов, но я был бы рад получить информацию о сервере только для первого сервера в массиве ролей - или последнего; для моих целей в нем всегда будет только один сервер, но какой сервер может измениться.

Ответы [ 2 ]

1 голос
/ 04 февраля 2014

Я довольно новичок в ruby, так что я могу неправильно это прочитать, но я думаю, что вы можете получить хост из роли с roles[:gateway].servers[0].host. Похоже, это отвечает на вопрос, который вы задали.

0 голосов
/ 05 октября 2011

Вы можете установить переменные, специфичные для рецепта капистрано, с помощью

set :gateway, "HARDCODED_GATEWAY:/remote/file"

и позже используйте его:

myservers = find_servers_for_task(current_task)
myservers.each do |server|
  run "scp #{gateway} /local/file", :hosts => server.host
end

Если вы хотите ввести его во время выполнения, используйте следующее:

set(:gateway) { Capistrano::CLI.ui.ask("gateway: ") }

Дополнительную информацию можно найти в capistrano wiki .

...