Лучший Ansible макет с несколькими средами - PullRequest
0 голосов
/ 17 января 2020

Я совершенно не понимаю, как управлять несколькими средами (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  
|  

Это структура каталогов в соответствии с document

Теперь у меня есть мой файл молекулы, в котором я могу просто связать каталоги dev следующим образом:

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

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

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

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

1 Ответ

0 голосов
/ 06 февраля 2020

В соответствии с документацией :

-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 -плейбук с -i

ansible-playbook my_playbook.yml -i inventories/dev/hosts
# or 
ansible-playbook my_playbook.yml -i inventories/prod/hosts
...