2011-09-07 75 views
0

我有一個capfile,它在頂部定義了一個角色,下面有一些任務。它工作的很好,但我希望能夠輕鬆(並以編程方式)更新角色列表中的計算機。我知道我能做到這一點的地方,但爲了安全起見,我希望能夠到我的capfile拆分爲(基本上)兩個文件:主機和任務我可以分開我的Capistrano capfile嗎?

目前(一般):

role :machines, 
"machine1", 
"machine2" 

desc "This is task 1" 
task :task1 do 
    # stuff 
end 

我希望能有像下面這樣(忽略「語法」):

role :machines ==> {Get this information from 'hosts.cap' or something} 

desc "This is task 1" 
task :task1 do 
    # stuff 
end 

有沒有辦法打破capfile嗎?或者我需要潛入源代碼來做到這一點?

回答

0

香草Capfile曾用於與load 'config/deploy'行 - 可能你可以利用它來加載多個文件。

1

由於Capfile只是Ruby,因此您可以使用Ruby代碼來執行您想要的操作。例如,如果你的hosts.cap文件是這樣的:

db-master.example.com 
db-slave1.example.com 

你會得到它與這個Ruby代碼的數組:

File.read('hosts.cap').strip.split 

,並把它適當地分給role通話,使用提示圖標(*)運算符:

role :db_hosts, *File.read('hosts.cap').strip.split 

雖然我會建議把它分爲兩個部分,因爲它是清晰的:

machines = File.read('hosts.cap').strip.split 
role :db_hosts, *machines