2014-05-21 34 views
2

我想讓我的頭繞着面料。面料「樹」像部署

,我們有不同的機器:

fab -R prod prepare:all 

這裏-R督促定義用戶和目標主機,這樣的事情:

     +--+ b2b (+config)    
     +------+ api --+      
     |    +--+ b2c (+config)    
     |         
     |    +---+ service1 (+config) 
     |    |      
     |    +---+ service2 (+config) 
all +---------+ web --+      
     |    +---+ service3 (+config)   
     |    |      
     |    +---+ service4 (+config)    
     |         
     |         
     +------+ db (+config)   
從我想要實現這樣的命令行

'prod': 
     { 
      'user': 'some_prod_user', 
      'hosts': ['some_prod_host1', 'some_prod_host2'] 
     } 

此映射被視爲配置並附加到每個節點。

現在當我執行這個命令時,我希望節點「全部」調用它的所有子節點,並且他們調用子節點,直到所有節點都執行完任務準備。

fab -R prod prepare:api.b2b 

應該只准備B2B節點,僅此而已。

我已經在Python(對象層次結構)等中構建了整個事情。

問題:如何在每個子類運行時構建整個'env'字典,這是'準備'方法。

根據執行模型,當我到達子類並且我不能重新定義它們時,整個'env.host_string'就已經建立了。

所以這讓我覺得 - 織物是我的正確工具?

任何幫助高度讚賞。

歡呼 燙髮

編輯

看起來像它可以嘗試像:

all 
prepare.sh 
execute.sh 
- api 
    prepare.sh -> calls [b2b|bc2]/prepare.sh 
    execute.sh -> calls [b2b|bc2]/execute.sh 
    - b2b 
    fabfile.py 
    prepare.sh -> invokes fab 
    execute.sh -> invokes fab 
    - b2c 
    fabfile.py 
    prepare.sh -> invokes fab 
    execute.sh -> invokes fab 
- web 
    prepare.sh 
    execute.sh -> invokes fab 
    - service1 
    fabfile.py 
    prepare.sh -> invokes fab 
    execute.sh -> invokes fab 
    - service2 
    fabfile.py 
    prepare.sh -> invokes fab 
    execute.sh -> invokes fab 
... you get the idea 

現在我能叫prepare.sh在頂層和向下級聯兒童連鎖店。每個孩子都會調用所有的子模塊prepare.sh。我也可以單獨調用每個節點。

你覺得呢?

燙髮

回答

0

在一般情況下,我會建議有一個單一入口點,使得單個fab命令行會做你想做的。它可能包含一堆不同的task s和argument s到那些task s,但通常是單一命令行。

我通常做的是以下幾點:

  1. 定義task表示每個機器
  2. 環境的定義定義task代表每個動作我想借此
  3. (可選)定義task s,它定義了groupings各種類型,即服務,它依次調用所有服務機器的task,切換環境inbetween每一個。

這樣一來,你可以使用一個fab命令來指定不同的組合,因爲每個環境和行動本身就是一個task,這是真正的主單元,其Fabric作品(並且,實際上只是一個Python函數週圍有一個框架,可以幫助遠程執行等)。

fab命令將隨即成爲組合:fab <env1> <task1> <task2> <env2> <task1> <task2>

你可以編織你的層次入的概念,還有,我認爲,基於種種像服務一個我的grouping task上文提到的。

問題:它是什麼,prepare.shexecute.sh在做什麼?