Capistrano 3: использовать пользовательскую переменную сервера в задаче

У меня есть многоэтапная настройка нескольких серверов, и в моей задаче мне нужно использовать имя сервера, например. в stagin.rb у меня есть:

set :stage, :staging
# Define servers
server 'xxx.xx.xx.xxx', user: 'deploy', roles: %w{app}, name: 'app1'
server 'xxx.xx.xx.yyy', user: 'deploy', roles: %w{app}, name: 'app2'

и я хочу использовать эту переменную «имя» в своей задаче:

task :configure do
  on roles(:app), in: :parallel do
  # how do I get server name here?
  end
end

person a.yastreb    schedule 20.01.2014    source источник


Ответы (1)


Если вы хотите вернуть имя хоста/IP, то это будет

task :configure do
  on roles(:app), in: :parallel do |server|
    p server.hostname # server hostname should be in here
  end
end

Если вы хотите получить доступ к пользовательским свойствам, таким как :name в данном конкретном случае, они хранятся в хэше properties объекта конфигурации server: просто используйте server.properties.name вместо server.hostname.

person bredikhin    schedule 20.01.2014
comment
на самом деле это возвращает имя задачи :) если я изменю имя переменной в определении сервера на имя приложения и попытаюсь ввести server.appname, я получу неопределенный метод «имя приложения» для ‹Rake::Task... - person a.yastreb; 21.01.2014
comment
@a.yastreb Извините, мой плохой, неуместный параметр. Исправил ответ, спасибо за наводку. - person bredikhin; 21.01.2014