Wdrażanie maszyn wirtualnych za pomocą ról i hostów w Ansible w zależności od systemu operacyjnego

9

Mam problemy z ustaleniem, jak najlepiej zastosować hosty / role do różnych systemów operacyjnych w Ansible.

Obecnie używam Ansible do generowania maszyn wirtualnych Windows / Mac / Linux, a każda z maszyn wirtualnych ma różne role, które należy do nich zastosować.

Przeczytałem najlepsze praktyki i starałem się ich przestrzegać, szczególnie w celu zastosowania metody grupowania, ale wciąż nie jestem pewien, ponieważ najczęściej wspominają o serwerach WWW i 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

środowiska / test / grupy

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

środowiska / test / hosts

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

środowiska / test / meta

[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/metaPlik wierzę, musi być zmieniony z build_nodes:children, ale nie jestem pewien, co do. Wcześniej miałem tylko maszyny wirtualne z wbudowanymi wszystkimi rolami w następujący sposób:

Stary site.yml

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

Ale potem zdałem sobie sprawę, że nie chcę, aby wszystko było budowane na tej samej maszynie. Uwaga, build-machine-test-1i 2oba mają oddzielne Windows / Mac / Linux buduje jak wykryć, co należy uwzględnić w zależności od systemu operacyjnego.

Czy ktoś może zaproponować lepszy sposób rozdzielenia maszyn wirtualnych w oparciu o systemy operacyjne?

Rekovni
źródło

Odpowiedzi:

6

Udało mi się więc z grubsza zachować tę samą strukturę i udało mi się rozdzielić sposób generowania maszyn, jednak nadal jest trochę niewyraźny i prawdopodobnie można go poprawić, aby był bardziej wydajny!


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

środowiska / test / grupy

[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

środowiska / test / hosts

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

środowiska / test / meta

[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

To rozwiązanie pozwala na generowanie większej liczby węzłów testowych z dodanymi osobnymi rolami i można je po prostu dodać do odpowiedniej grupy, aby umożliwić obsługę komputera.

Rekovni
źródło
1

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

main.yml

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

umieść wszystko, co jest wymagane w debian, np. apt w Debian.yml i yum w Centos.yml.

Podsumowując, możliwe jest, aby wszystkie typy systemów operacyjnych miały tę samą rolę, jeśli elementy specyficzne dla systemu operacyjnego zostaną umieszczone w osobnych plikach.

Jest to bardziej kompleksowy przykład https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

030
źródło
Zrobiłem to już na niższym poziomie, ponieważ każda z build-machine-test-1ról ma własne osobne wersje os_family. Moje pytanie dotyczy wyższego poziomu, w którym same maszyny do budowania muszą zostać oddzielone przed zastosowaniem ról ...
Rekovni