Лучший макет Ansible с несколькими средами

Я совершенно не понимаю, как управлять несколькими средами (prod / dev) с помощью ansible. Я также использую молекулу для локального тестирования.

Итак, вот мой макет проекта на данный момент.

|----inventories/   
|    |   
|    |--dev/
|    |  |
|    |  |--group_vars/...
|    |  |
|    |  |--host_vars/...
|    |  
|    |--prod/
|       |
|       |--group_vars/...
|       |
|       |--host_vars/
|            |
|            |--my_playbook_hostname_vars.yml
|     
|----roles/...     
|     
|----hosts.yml    
|
|----my_playbook.yml  
|  

Это структура каталогов в соответствии с документом

Теперь у меня есть файл с молекулой, в котором я могу просто связать каталоги разработчиков, как это

# molecule.yml
provisioner:
  name: ansible
  inventory:
    links:
      group_vars: ../../../../inventories/dev/group_vars/
      host_vars: ../../../../inventories/dev/host_vars/

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

Но как мне запустить my_playbook.yml? Когда я использую ansible-playbook my_playbook.yml, он не знает, где искать вары, поскольку есть две среды. Как я могу сказать Ansible, чтобы он смотрел в разделах inventory / prod / group_vars & inventory / prod / host_vars, а затем разрешал дальнейшие действия через имя хоста и группы, как это определено в hosts.yml, без ущерба для настройки моей молекулы?

Когда я просто устанавливаю group_vars / & host_vars / в корневом каталоге, он работает


person Lukas B    schedule 17.01.2020    source источник
comment
Измените вопрос, включив в него: Ваш playbook, полную команду и ошибку при запуске playbook, а также пример конфигурации инвентаря (как получить хосты в инвентаре).   -  person Andy Shinn    schedule 19.01.2020


Ответы (1)


Согласно документации:

-i, --inventory
    specify inventory host path or comma separated host list.

Один из вариантов - создать отдельный файл hosts для каждой среды (почти так же, как в предоставленной вами ссылке на документацию). Нравится:

|-- inventories
|   |-- dev
|   |  |-- group_vars/
|   |  |-- host_vars/
|   |  |-- hosts
|   |-- prod
|      |-- group_vars/
|      |-- host_vars/
|      |-- hosts
|-- roles/
|-- my_playbook.yml 

... а затем вызовите ansible-playbook с помощью -i

ansible-playbook my_playbook.yml -i inventories/dev/hosts
# or 
ansible-playbook my_playbook.yml -i inventories/prod/hosts
person Sten S.    schedule 06.02.2020