2014-05-21 4 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'] 
     } 

이 맵은 구성처럼 처리되어 각 노드에 연결됩니다.

이제이 명령을 실행할 때 노드 "all"이 모든 자식을 호출하고 모든 노드가 작업 준비를 수행 할 때까지 자식을 호출해야합니다.

fab -R prod prepare:api.b2b 

은 b2b 노드 만 준비하면됩니다.

저는 이미 파이썬 (객체 계층 구조)으로 모든 것을 구축했습니다.

문제 : 각 하위 클래스가 '준비'메소드를 실행할 때 어떻게 전체 '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 명령 줄은 당신이 원하는 무엇이든 할 것 같은 것을 하나의 진입 점을 가지고 추천 할 것입니다. 그것은 tasks와 s에 대해 arguments의 무리로 구성 될 수 있지만, 일반적으로 단일 명령 행이됩니다.

은 내가 일반적으로 할 것이는 다음과 같다 :

  1. 내가 먹고 싶어 각 작업을 나타내는 task을 정의 각 시스템
  2. 에 대한 환경의 정의를 나타내는 task을 정의
  3. (선택적으로) 정의 taskgroupings, 즉 서비스을 정의하고 서비스 기계에 대한 모든 task을 호출하고 그 사이의 환경을 전환합니다 각각 하나씩. 그런 식으로

, 당신은 모든 환경 때문에 다양한 조합을 지정하는 하나의 fab 명령을 사용할 수 있습니다 행동은 기본 단위가 정말 떨어져있는 Fabric 작품 인하는 task 자체 (본질적으로 단지입니다 원격 실행과 관련하여 도움이되는 프레임 워크가있는 Python 함수 등).

fab 명령은 다음의 조합이 될 것입니다 : fab <env1> <task1> <task2> <env2> <task1> <task2>

당신은뿐만 아니라, 개념에 계층 구조를 짜 수 나는 서비스 하나의 I와 같은 종류의 grouping task에 따라, 생각 위에 언급했듯이.

질문 :prepare.shexecute.sh이하고있는 그 것이 무엇입니까?