Развертывание виртуальных машин с использованием ролей и хостов в Ansible на основе операционной системы

9

У меня возникли проблемы при разработке способов наилучшего применения хостов / ролей к различным операционным системам в Ansible.

В настоящее время я использую Ansible для генерации виртуальных машин Windows / Mac / Linux, и у каждой виртуальной машины есть разные роли, которые необходимо применить к ним.

Я читал лучшие практики и пытался следовать им, особенно для использования метода группировки, но я все еще не уверен, поскольку они в основном упоминают веб-серверы и серверы баз данных.


site.yml

- name: Apply common configuration to all nodes
  hosts: all
  roles:
    - common

- name: Configure and deploy test node 1
  hosts: build-test-node
  roles:
    - build-machine-test-1

- name: Configure and deploy test node 2
  hosts: build-test-node-2
  roles:
    - build-machine-test-2

Среды / тест / групп

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

Среды / тест / хостов

win_build_machine_1   ansible_host=......
win_build_machine_2   ansible_host=......
mac_build_machine_1   ansible_host=......

среда / испытание / мета-

[mac_build_nodes]
[win_build_nodes]

[win:children]
win_build_nodes

[mac:children]
mac_build_nodes

[linux:children]

[build_nodes:children]
win_build_nodes
mac_build_nodes

environment/test/metaФайл я считаю , должен быть изменен с build_nodes:children, но я не уверен , что. Ранее у меня были только виртуальные машины, на которых были построены все роли со следующим:

Старый site.yml

- name: Apply everything
  hosts: build_nodes
  roles:
    - common
    - build-machine-test-1
    - build-machine-test-2

Но потом понял, что я не хочу, чтобы все строилось на одной машине. Обратите внимание, build-machine-test-1и 2оба имеют отдельные сборки Windows / Mac / Linux, так как они определяют, что включать в зависимости от операционной системы.

Кто-нибудь может предложить лучший способ разделения виртуальных машин на основе операционных систем?

Rekovni
источник

Ответы:

6

Таким образом, мне удалось приблизительно сохранить ту же структуру, и мне удалось отделить способ генерации машин, однако он все еще немного размыт и, возможно, может быть улучшен для повышения эффективности!


site.yml

- name: Apply common configuration to all nodes
  hosts: all
  roles:
    - common

- name: Configure and deploy test node 1
  hosts: build-test-node
  roles:
    - build-machine-test-1

- name: Configure and deploy test node 2
  hosts: build-test-node-2
  roles:
    - build-machine-test-2

Среды / тест / групп

[win_test_1_nodes]
win_build_machine_1

[mac_test_1_nodes]
mac_build_machine_1

[win_test_2_nodes]
win_build_machine_2

[mac_test_2_nodes]
mac_build_machine_2

Среды / тест / хостов

win_build_machine_1   ansible_host=......
win_build_machine_2   ansible_host=......
mac_build_machine_1   ansible_host=......
mac_build_machine_2   ansible_host=......

среда / испытание / мета-

[win_test_1_nodes]
[mac_test_1_nodes]
[win_test_2_nodes]
[mac_test_2_nodes]

[win:children]
win_test_1_nodes
win_test_2_nodes

[mac:children]
mac_test_1_nodes
mac_test_2_nodes

[build-machine-test-1:children]
win_test_1_nodes
mac_test_1_nodes

[build-machine-test-2:children]
win_test_2_nodes
mac_test_2_nodes

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

Rekovni
источник
1

https://github.com/030/ansible-certbot

main.yml

- include: Debian.yml
when: ansible_os_family == 'Debian'

поместите все, что требуется для Debian, например apt в Debian.yml и yum в Centos.yml.

Таким образом, можно разрешить всем типам ОС использовать одну и ту же роль, если специфичные для ОС вещи помещены в отдельные файлы.

Это более полный пример https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

030
источник
Я уже сделал это на более низком уровне, поскольку каждая из build-machine-test-1ролей имеет свои собственные отдельные сборки на основе os_family. У меня вопрос к более высокому уровню, на котором сами машины сборки должны быть выделены перед применением ролей ...
Rekovni