ansible: структура ролей и переменные

Некоторое время я использую ansible с автономными плейбуками и теперь хотел бы настроить структуру ролей в своей среде. Это структура папок (пример, обобщение)

├── hosts
├── playbooks
│   ├── project1-staging.yml
│   └── project1-production.yml
├── roles
│   └── project1-compile
│       ├── files
│       │   └── project1.conf
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       │   └── main.yml
│       ├── tasks
│       │   └── main.yml
│       ├── templates
│       └── vars
│           └── main.yml
│   └── ec2-create
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       │   └── main.yml
│       ├── tasks
│       │   └── main.yml
│       ├── templates
│       └── vars
│           └── main.yml
│   └── project1-deploy
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       │   └── main.yml
│       ├── tasks
│       │   └── main.yml
│       ├── templates
│       └── vars
│           └── main.yml
├── vars.yml

Это выглядит просто. Я хотел бы выполнить playbook project1-staging.yml, чтобы создать новую промежуточную среду для конкретной версии, например; ansible-playbook project1-staging.yml -e 'версия = 1'

и плейбук ниже;

---
- name: deploy project1 (staging) {{ version }}
  hosts: local
  connection: local
  roles:
  #- project1-compile version={{ version }}
  - { role: ec2-create, project: project1,  count:1 }
  - { role: project1-compile, version: {{ version }}  }
  - { role: project1-deploy, version: {{ version }}, target: {{last_ec2}}  }

В этой структуре есть некоторые проблемы, и мне это тоже не нравится. - Это правильный путь? - как я могу использовать результат роли ec2-create, я хотел бы развернуть коды на только что созданном сервере, и я не знаю идентификатор. - есть ли другой способ передать параметры ролям?


person code_ada    schedule 25.06.2014    source источник


Ответы (1)


Взгляните на модули инвентаризации. В частности, модуль add_host.


Синопсис

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

Примеры

# add host to group 'just_created' with variable foo=42
- add_host: name={{ ip_from_ec2 }} groups=just_created foo=42

# add a host with a non-standard port local to your machines
- add_host: name={{ new_ip }}:{{ new_port }}

# add a host alias that we reach through a tunnel
- add_host: hostname={{ new_ip }}
            ansible_ssh_host={{ inventory_hostname }}
            ansible_ssh_port={{ new_port }}
person Mxx    schedule 26.06.2014
comment
Спасибо. как насчет переменных? Это правильный метод для передачи переменных в роли? - person code_ada; 26.06.2014
comment
@srknc, если вы не хотите указывать одну и ту же переменную в каждой отдельной роли, и если я что-то неправильно понимаю, если она определена глобально, вам не нужно явно указывать их каждый раз. Но в целом да, это правильный способ передачи переменных ролям. См. docs.ansible.com/playbooks_variables.html. - person Mxx; 26.06.2014