2014-05-21 2 views
2

Я пытаюсь получить голову вокруг ткани.ткань для «дерева», как развертывание

у нас разные машины:

     +--+ b2b (+config)    
     +------+ api --+      
     |    +--+ b2c (+config)    
     |         
     |    +---+ service1 (+config) 
     |    |      
     |    +---+ service2 (+config) 
all +---------+ web --+      
     |    +---+ service3 (+config)   
     |    |      
     |    +---+ service4 (+config)    
     |         
     |         
     +------+ db (+config)   

из командной строки я хочу, чтобы добиться чего-то вроде этого:

fab -R prod prepare:all 

здесь -R прод определяет пользовательские и целевые хосты, что-то вроде этого:

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

Эта карта рассматривается как конфигурация и прикреплена к каждому узлу.

сейчас, когда я выполняю эту команду, я хочу, чтобы этот узел «все» вызывал все его дети, и они называют своих детей, пока все не выполнит задачу подготовки.

fab -R prod prepare:api.b2b 

должен только подготовить узел b2b, не более того.

Я уже построил все это в python (иерархия объектов) и так далее.

проблема: как я могу построить весь словарь «env», когда каждый подкласс работает, это метод «подготовить».

В соответствии с моделью исполнения вся «env.host_string» уже создана, как только я дойду до подклассов, и я не могу переопределить их.

так что это оставляет мне мышление - это ткань подходящего инструмента для меня?

любая помощь очень ценится.

веселит Marcel

EDIT

, похоже, может попробовать что-то вроде:

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. Я также могу назвать каждый узел отдельно.

Что вы думаете?

Marcel

ответ

0

В целом, я рекомендовал бы единую точку входа, например, что один fab командной строки будет делать все, что вы хотите. Он может состоять из группы из разных task s и argument s с теми task s, но, как правило, это будет единственная командная строка.

Что я вообще делаю это следующее:

  1. Определение task, представляющий определение среды для каждой машины
  2. Определение task, представляющий каждое действие, я хочу взять
  3. (Необязательно) определяют task s, которые определяют groupings, т. Е. сервис, который в свою очередь вызывает все task s для ваших сервисных машин, отключая окружающую среду в betwee n каждый.

Таким образом, вы можете использовать одну fab команду, чтобы задать различные комбинации, так как в любой среде и действие само по себе является task, который действительно является основной ячейкой от которого Fabric работы (и по существу только Python, вокруг которой существует инфраструктура, которая помогает при удаленном выполнении и т. Д.).

Команда fab бы тогда сочетание: fab <env1> <task1> <task2> <env2> <task1> <task2> и т.д.

Вы можете сплести иерархию в концепцию, а также, я думаю, на основе grouping task сортов, как службы один I упомянутое выше.

Вопрос: Что это такое, что prepare.sh и execute.sh делают?

Смежные вопросы