Розгортання VM за допомогою ролей та хостів у Ansible на основі операційної системи


9

У мене виникають проблеми з розробкою, як найкраще застосувати хости / ролі до різних операційних систем в Ansible.

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

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


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, але я не впевнений , що. Раніше у мене просто було встановлено, що у ВМС є всі ролі, створені для цього:

Старий сайт.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, коли вони визначають, що включати на основі операційної системи.

Чи може хто-небудь запропонувати кращий спосіб розділення ВМ на основі операційних систем?

Відповіді:


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

Це рішення дозволяє генерувати більше тестових вузлів з окремими ролями, що додаються до них, і їх можна просто додати до правильної групи для роботи машини, яка буде забезпечена.


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


Я вже робив це на більш низькому рівні, оскільки кожна з build-machine-test-1ролей має свої окремі побудови os_family. Моє запитання стосується вищого рівня, коли самі машини для складання потрібно відокремити, перш ніж застосовувати ролі ...
Rekovni
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.