2013-12-02 3 views
6

Я пытаюсь создать несколько загрузочных плееров, которые будут обеспечивать среду (n баз данных, m веб-серверов и т. Д.) И сохранить эти узлы на потом, чтобы я мог запускать их развертывания , Лучшее, что я могу придумать, - https://gist.github.com/geowa4/7686681 (скопировано ниже). Это работает в том, что он создает машины для разных типов серверов и сохраняет их в файле hosts. Мои сценарии развертывания, для которых я буду использовать только что созданный файл hosts, убедитесь, что правильные пакеты установлены и настроены правильно, прежде чем развертывать исходный код. Это единственный способ выполнить настройку и развертывание с помощью Ansible? Что делать, если я хочу динамически добавлять новый веб-сервер в микс? Должен ли я вручную редактировать статические файлы хостов? До сих пор с динамическим сценарием инвентаризации для Rackspace он просто перечисляет целую группу серверов, не имея возможности группировать их по типу. Если бы я мог это понять, я был бы в восторге.Ansible Playbook для предоставления и сохранения хостов для более поздних версий

hosts.j2:

[a] 
{% for a in a_provision.instances %} 
{{ a.rax_accessipv4 }} 
{% endfor %} 

[b] 
{% for b in b_provision.instances %} 
{{ b.rax_accessipv4 }} 
{% endfor %} 

main.yml:

--- 
- name: a - build request 
    local_action: 
    module: rax 
    username: username 
    api_key: key 
    name: test-a 
    count: 1 
    flavor: 3 
    image: a-image-id 
    files: 
     /root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub 
    state: present 
    wait: yes 
    wait_timeout: 1000 
    networks: 
    - private 
    - public 
    register: a_provision 

- name: b - build request 
    local_action: 
    module: rax 
    username: username 
    api_key: key 
    name: test-b 
    flavor: 5 
    image: b-image-id 
    files: 
     /root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub 
    state: present 
    wait: yes 
    wait_timeout: 1000 
    networks: 
    - private 
    - public 
    register: b_provision 

- name: add new nodes to hosts configuration 
    template: 'src=hosts.j2 dest=provisioned_hosts' 
+2

Привет @ geowa4 мы изучаем это, мы поможем вам. – rdodev

ответ

5

Модуль Rackspace и динамический инвентаризации в последних версиях анзибль (я использую 1.4.1), дайте группировать серверы!

Модуль rax принимает "group" parameter, который хранится в метаданных созданного сервера, который динамический инвентаризации плагин Rackspace будет extract to create Ansible groups, поэтому последующие игры могут использовать имена групп, которые вы указали.

Однако, похоже, что инвентаризация запрашивается только в начале игры. Для работы с вновь запущенных серверов в пределах одной и той же перспективе, вы должны будете использовать add-host модуль, чтобы добавить их в инвентаре во время выполнения:

- name: build webservers 
    local_action: 
    module: rax 
    name: webserver 
    group: webservers 
    exact_count: true 
    credentials: ~/.rackspace_cloud_credentials 
    flavor: 2 
    image: df27d481-63a5-40ca-8920-3d132ed643d9 
    files: 
     /root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub 
    state: present 
    disk_config: manual 
    wait: yes 
    wait_timeout: 10000 
    register: webserversvar 

- name: add newly provisioned webservers to a group 
    local_action: add_host hostname={{ item.accessIPv4 }} groupname=webservers 
    with_items: webserversvar.instances 

- name: build databases 
    local_action: 
    module: rax 
    name: database 
    group: databases 
    exact_count: true 
    credentials: ~/.rackspace_cloud_credentials 
    flavor: 2 
    image: df27d481-63a5-40ca-8920-3d132ed643d9 
    files: 
     /root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub 
    state: present 
    disk_config: manual 
    wait: yes 
    wait_timeout: 10000 
    register: databasesvar 

- name: add newly provisioned databases to a group 
    local_action: add_host hostname={{ item.accessIPv4 }} groupname=databases 
    with_items: databasesvar.instances 

Там в writeup about doing this on AWS, который охватывает много такого же высокого уровня концепций, хотя поставщик отличается.

+0

А, это хорошо. Я не знал о переменной метаданных группы. Поскольку я буду создавать такие среды ad hoc, я думаю, что буду называть мои группы «{{env}} - database». Я просто обновил Ansible до 1.4.1, и я попробую это завтра утром. – geowa4

+0

Спасибо за помощь. Я думаю, что все это началось. – geowa4

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