У меня есть базовая инструкция по использованию Ansible, например:
---
- 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; он также создает группу хостов [веб-серверы] и добавляет к ней созданный IP-адрес экземпляра.
На этапе настройки серверов {{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, либо просто создают один экземпляр и устанавливают все на нем.
add_host
. Вы можете создать свой экземпляр EC2, зарегистрировать его IP-адрес в переменной, добавить его в инвентарь в памяти с помощьюadd_host
, а затем запустить задачи подготовки. - person Ben Whaley   schedule 13.09.2014