Distribuire VM usando ruoli e host in Ansible in base al sistema operativo


9

Sto riscontrando problemi nel capire come applicare al meglio host / ruoli a diversi sistemi operativi in ​​Ansible.

Attualmente sto utilizzando Ansible per generare macchine virtuali Windows / Mac / Linux e ciascuna delle macchine virtuali ha ruoli diversi che devono essere applicati a esse.

Ho letto le migliori pratiche e ho provato a seguirle, in particolare per utilizzare il metodo di raggruppamento, ma non sono ancora sicuro poiché menzionano principalmente server Web e server Web.


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

Ambienti / test / gruppi

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

ambienti / prova / hosts

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

ambienti / 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

Il environment/test/metafile di credo deve essere cambiato con la build_nodes:children, ma non sono sicuro di cosa. In precedenza, avevo appena avuto le macchine virtuali con tutti i ruoli creati con il seguente:

Vecchio site.yml

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

Ma poi ho capito che non volevo che tutto fosse costruito sulla stessa macchina. Nota build-machine-test-1ed 2entrambi hanno build separate per Windows / Mac / Linux in quanto rilevano cosa includere in base al sistema operativo.

Qualcuno può suggerire un modo migliore di separare le macchine virtuali in base ai sistemi operativi?

Risposte:


6

Così sono riuscito a mantenere approssimativamente la stessa struttura e sono riuscito a separare il modo in cui le macchine vengono generate, tuttavia è ancora un po 'sfocato e probabilmente può essere migliorato per essere più efficiente!


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

Ambienti / test / gruppi

[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

ambienti / prova / 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=......

ambienti / 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

Questa soluzione consente di generare più nodi di test con ruoli separati aggiunti ad essi e può essere semplicemente aggiunto al gruppo corretto per il provisioning della macchina.


1

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

main.yml

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

metti tutto ciò che è richiesto su debian come apt in Debian.yml e yum in Centos.yml.

In sintesi, è possibile consentire a tutti i tipi di SO di utilizzare lo stesso ruolo se le cose specifiche del SO sono inserite in file separati.

Questo è un esempio più completo https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml


L'ho già fatto a un livello inferiore, poiché ciascuno dei build-machine-test-1ruoli ha le proprie build separate basate su os_family. La mia domanda è per un livello superiore in cui le macchine di costruzione stesse devono essere separate prima che i ruoli vengano applicati ...
Rekovni,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.