2014-09-11 3 views
1

Я получил основной анзибль пьес, как так:анзибль EC2 только предоставление требуются серверы

--- 

- name: Provision ec2 servers 
    hosts: 127.0.0.1 
    connection: local 
    roles: 
    - aws 

- name: Configure {{ application_name }} servers 
    hosts: webservers 
    sudo: yes 
    sudo_user: root 
    remote_user: ubuntu 
    vars: 
    - setup_git_repo: no 
    - update_apt_cache: yes 
    vars_files: 
    - env_vars/common.yml 
    - env_vars/remote.yml 
    roles: 
    - common 
    - db 
    - memcached 
    - web 

со следующей инвентаризации:

[localhost] 
127.0.0.1 ansible_python_interpreter=/usr/local/bin/python 

Положение EC2 серверов задач делает то, что вы ожидаете , Он создает экземпляр ec2; он также создает группу хостов [webservers] и добавляет к нему созданный экземпляр экземпляра.

Затем настраивается сервер Configure {{application_name}}, который настраивает этот сервер, устанавливая все, что мне нужно.

Пока все хорошо, все это делает именно то, что я хочу, и все работает.

Вот, где я застрял. Я хочу иметь возможность запускать экземпляр ec2 для разных ролей. В идеале я бы создал dbserver, веб-сервер и, возможно, сервер memcached. Я хотел бы иметь возможность развернуть любую часть (-ы) этой инфраструктуры отдельно, например. создавать и предоставлять только серверы db

Единственные способы, которые я могу придумать, чтобы сделать эту работу ... ну, они не работают.

Я попытался просто объявляя группы компьютеров без хозяев в инвентаре:

[webservers] 

[dbservers] 

[memcachedservers] 

но это ошибка синтаксиса.

я бы хорошо с явно инициализации каждого сервера и объявить принимающей группы это для, например, так:

- name: Provision webservers 
    hosts: webservers 
    connection: local 
    roles: 
    - aws 

- name: Provision dbservers 
    hosts: dbservers 
    connection: local 
    roles: 
    - aws 

- name: Provision memcachedservers 
    hosts: memcachedservers 
    connection: local 
    roles: 
    - aws 

, но эти группы не не существует до тех пор, после того, как соответствующий шаг завершен, поэтому я не Думаю, это тоже сработает.

Я видел много о динамических запасах, но я не мог понять, как это мне поможет. Я также просмотрел бесчисленные примеры незавершенных проектов обеспечения ec2, они все равно либо предоставляют ранее существовавшие экземпляры ec2, либо просто создают один экземпляр и устанавливают на нем все.

+0

Вы можете найти модуль [ 'add_host'] (http://docs.ansible.com/add_host_module.html) полезно. Вы можете создать экземпляр EC2, зарегистрировать свой IP-адрес для переменной, добавить его в инвентарь в памяти с помощью 'add_host', а затем запустить свои задачи обеспечения. –

+0

@Ben Whaley. У меня уже есть эта часть, которую я боюсь (она скрыта в роли aws). Моя проблема заключается не в добавлении экземпляров к узлам, а в том, чтобы создавать экземпляры только для соответствующих групп хостов (те, которые выбраны шаблоном -limit). Я на самом деле закончил то, что хотел сделать, и сейчас невозможно и по-другому. Я скоро отправлю ответ. –

ответ

1

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

Мой файл удаленных хостов остался в основном таким же, как указано выше. Пример одного из playbooks для определенной части стеки:

--- 

- name: Provision ec2 apiservers 
    hosts: apiservers #important bit 
    connection: local #important bit 
    vars: 
    - host_group: apiservers 
    - security_group: blah 
    roles: 
    - aws 

- name: Configure {{ application_name }} apiservers 
    hosts: apiservers:!127.0.0.1 #important bit 
    sudo: yes 
    sudo_user: root 
    remote_user: ubuntu 
    vars_files: 
    - env_vars/common.yml 
    - env_vars/remote.yml 
    vars: 
    - setup_git_repo: no 
    - update_apt_cache: yes 
    roles: 
    - common 
    - db 
    - memcached 
    - web 

Это означает, что первый шаг игры каждого слоя добавляет новый узел к группе apiservers, со второй стадией (Настройка .. . apiservers), а затем возможность исключить localhost без получения ошибки совпадения хостов.

Оберточная сборник пьес мертв просто,:

--- 

- name: Deploy all the {{ application_name }} things! 
    hosts: all 

- include: webservers.yml 
- include: apiservers.yml 

Я очень начинающий ж/касаемо анзибль, поэтому, пожалуйста, примите это за то, что она есть, попытка какого-то парня, чтобы найти что-то, что работает. Там могут быть лучшие варианты, и это может нарушить передовой опыт повсюду.

1

ec2_module поддерживает свойство «exact_count», а не только свойство «count».

Он будет создавать (или прекратить!) Экземпляры, которые соответствуют указанным тегам ("instance_tags")

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