Bereitstellen von VMs mithilfe von Rollen und Hosts in Ansible basierend auf dem Betriebssystem

9

Ich habe Probleme, herauszufinden, wie Hosts / Rollen in Ansible am besten auf verschiedene Betriebssysteme angewendet werden können.

Ich verwende derzeit Ansible, um Windows- / Mac- / Linux-VMs zu generieren, und jede der VMs hat unterschiedliche Rollen, die auf sie angewendet werden müssen.

Ich habe die Best Practices gelesen und versucht, sie zu befolgen, insbesondere um die Gruppierungsmethode zu verwenden, aber ich bin mir immer noch nicht sicher, da sie hauptsächlich Webserver und DBServer erwähnen.


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

Umgebungen / Test / Gruppen

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

Umgebungen / Test / Hosts

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

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

Die environment/test/metaDatei, von der ich glaube, dass sie mit der geändert werden muss build_nodes:children, aber ich bin mir nicht sicher, was ich tun soll. Zuvor hatte ich nur die VMs mit allen Rollen wie folgt aufgebaut:

Alte site.yml

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

Aber dann wurde mir klar, dass ich nicht wollte, dass alles auf derselben Maschine gebaut wird. Beachten Sie , build-machine-test-1und 2beide haben separates Windows / Mac / Linux aufbaut , wie sie erkennen , was basierend auf dem Betriebssystem enthalten.

Kann jemand einen besseren Weg vorschlagen, die VMs basierend auf Betriebssystemen zu trennen?

Rekovni
quelle

Antworten:

6

Also habe ich es geschafft, ungefähr die gleiche Struktur beizubehalten und zu trennen, wie die Maschinen generiert werden, ist aber immer noch etwas unscharf und kann wahrscheinlich verbessert werden, um effizienter zu sein!


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

Umgebungen / Test / Gruppen

[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

Umgebungen / 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=......

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

Mit dieser Lösung können mehr Testknoten mit separaten Rollen generiert und einfach der richtigen Gruppe für den zu bereitstellenden Computer hinzugefügt werden.

Rekovni
quelle
1

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

main.yml

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

Setzen Sie alles, was auf debian benötigt wird, wie apt in Debian.yml und yum in Centos.yml.

Zusammenfassend ist es möglich, dass alle Betriebssystemtypen dieselbe Rolle verwenden, wenn die betriebssystemspezifischen Elemente in separaten Dateien abgelegt werden.

Dies ist ein umfassenderes Beispiel: https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

030
quelle
Ich habe dies bereits auf einer niedrigeren Ebene getan, da jede der build-machine-test-1Rollen ihre eigenen Builds hat os_family. Meine Frage ist für eine höhere Ebene, wo die Build-Maschinen selbst getrennt werden müssen, bevor die Rollen angewendet werden ...
Rekovni