Déploiement de machines virtuelles à l'aide de rôles et d'hôtes dans Ansible en fonction du système d'exploitation

9

Je rencontre des problèmes pour déterminer comment appliquer au mieux les hôtes / rôles à différents systèmes d'exploitation dans Ansible.

J'utilise actuellement Ansible pour générer des machines virtuelles Windows / Mac / Linux, et chacune des machines virtuelles a des rôles différents qui doivent leur être appliqués.

J'ai lu les meilleures pratiques et j'ai essayé de les suivre, en particulier pour utiliser la méthode de regroupement, mais je ne suis toujours pas sûr car elles mentionnent principalement les serveurs Web et les 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

environnements / test / groupes

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

environnements / test / hôtes

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

environnements / test / méta

[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

Le environment/test/metafichier selon moi, doit être changé avec le build_nodes:children, mais je ne suis pas sûr de quoi. Auparavant, je faisais simplement en sorte que les machines virtuelles aient tous les rôles créés avec les éléments suivants:

Ancien site.yml

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

Mais j'ai réalisé que je ne voulais pas que tout soit construit sur la même machine. Remarque, build-machine-test-1et les 2deux ont des versions Windows / Mac / Linux distinctes car ils détectent les éléments à inclure en fonction du système d'exploitation.

Quelqu'un peut-il suggérer une meilleure façon de séparer les machines virtuelles en fonction des systèmes d'exploitation?

Rekovni
la source

Réponses:

6

J'ai donc réussi à garder la même structure à peu près, et j'ai réussi à séparer la façon dont les machines sont générées, mais est toujours un peu floue et peut probablement être améliorée pour être plus efficace!


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

environnements / test / groupes

[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

environnements / test / hôtes

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

environnements / test / méta

[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

Cette solution permet de générer plus de nœuds de test avec des rôles distincts qui leur sont ajoutés et peut simplement être ajouté au groupe approprié pour la machine à provisionner.

Rekovni
la source
1

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

main.yml

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

mettez tout ce qui est requis sur debian comme apt dans Debian.yml et yum dans Centos.yml.

En résumé, il est possible de laisser tous les types de système d'exploitation utiliser le même rôle si les éléments spécifiques au système d'exploitation sont placés dans des fichiers distincts.

Il s'agit d'un exemple plus complet https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

030
la source
J'ai déjà fait cela à un niveau inférieur, car chacun des build-machine-test-1rôles a ses propres versions distinctes basées sur os_family. Ma question est pour un niveau supérieur où les machines de construction elles-mêmes doivent être séparées avant que les rôles ne soient appliqués ...
Rekovni