2015-01-21 2 views
0

У меня проблемы с реализацией конфигурации в Capistrano v3 на несколько серверов за один этап. Или я хочу чего-то, что невозможно.Capistrano 3 несколько серверов ленивые переменные overriding

Я создал тестовое задание в deploy.rb показано ниже:

namespace :test do 
    task :run do 
    on roles(:all) do 
     print "\nenvcode:\n" 
     p fetch(:envcode) 
     print "\nglobal_var:\n" 
     p fetch(:global_var) 
     print "\nssh_options:\n" 
     p fetch(:ssh_options) 
     print "\nmain_domain_name:\n" 
     p fetch(:main_domain_name) 
    end 
    end 
end 

И вот конфиг, который определяет для серверов средства моделирования той же стадии:

role :app, %w{ip1 ip2} 
role :web, %w{ip1 ip2} 
role :db, %w{ip1 ip2} 

set :main_domain_name, "#{fetch(:envcode)}.mytestdomain.com" 
set :global_var, 'foobar' 

set :ssh_options, -> do 
    { 
    user: 'userip0' 
    } 
end 

server 'ip1', 
    roles: %w{web db app}, 
    ssh_options: { user: 'userip1' }, 
    user: 'userip1', 
    envcode: "envip1", 
    dbname: 'userip1', 
    dbuser: 'userip1', 
    dbpass: 'password', 
    dbhost: 'localhost' 

server 'ip2', 
    roles: %w{web db app}, 
    ssh_options: { user: 'userip2' }, 
    user: 'userip2', 
    envcode: "envip2", 
    dbname: 'userip2', 
    dbuser: 'userip2', 
    dbpass: 'password', 
    dbhost: 'localhost' 

Когда я бегу колпачком Пробный тест: запустить. Я получаю этот вывод, что означает, что capistrano полностью игнорирует мои серверные ошибки:

envcode: 
nil 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip0"} 
envcode: 
nil 

main_domain_name: 
".mytestdomain.com" 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip0"} 

main_domain_name: 
".mytestdomain.com" 

Я wa ы в надежде получить:

envcode: 
envip1 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip1"} 
envcode: 
envip2 

main_domain_name: 
"envip1.mytestdomain.com" 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip2"} 

main_domain_name: 
"envip2.mytestdomain.com" 

я делаю что-то неправильно, или это мое понимание о том, что я могу сделать с этим сервером конфигурации массивов неправильными?

ответ

0

envcode является собственностью всего сервера, вы не можете использовать метод fetch для получения значения.

namespace :test do 
    task :run do 
    on roles(:all) do |server| 
     puts "envcode: #{server.properties.fetch(:envcode)}\n" 
     puts "global_var: #{fetch(:global_var)}\n" 
     puts "ssh_options: #{server.properties.fetch(:ssh_options)}\n" 
     puts "main_domain_name: #{server.properties.fetch(:envcode)}.mytestdomain.com\n" 
    end 
    end 
end 
Смежные вопросы