Implementación de máquinas virtuales utilizando roles y hosts en Ansible según el sistema operativo

9

Tengo problemas para encontrar la mejor manera de aplicar hosts / roles a diferentes sistemas operativos en Ansible.

Actualmente estoy usando Ansible para generar máquinas virtuales Windows / Mac / Linux, y cada una de las máquinas virtuales tiene diferentes roles que deben aplicarse.

He leído las mejores prácticas y he tratado de seguirlas, especialmente para usar el método de agrupación, pero todavía no estoy seguro, ya que mencionan principalmente servidores web y servidores de base de datos.


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

entornos / prueba / grupos

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

entornos / prueba / hosts

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

entornos / prueba / 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

El environment/test/metaarchivo Creo que hay que cambiar con el build_nodes:children, pero no estoy seguro de qué. Anteriormente solo estaba haciendo que las máquinas virtuales tuvieran todos los roles incorporados con lo siguiente:

Sitio antiguo.yml

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

Pero luego me di cuenta de que no quería que todo se construyera en la misma máquina. Tenga en cuenta, build-machine-test-1y 2ambos tienen separada de Windows / Mac / Linux se basa ya que detectan qué incluir basado en el sistema operativo.

¿Alguien puede sugerir una mejor manera de separar las máquinas virtuales en función de los sistemas operativos?

Rekovni
fuente

Respuestas:

6

Así que logré mantener la misma estructura aproximadamente, y logré separar cómo se generan las máquinas, sin embargo, todavía es un poco confuso y probablemente pueda mejorarse para que sea más eficiente.


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

entornos / prueba / grupos

[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

entornos / prueba / 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=......

entornos / prueba / 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

Esta solución permite que se generen más nodos de prueba con roles separados agregados a ellos, y solo se puede agregar al grupo correcto para que se aprovisione la máquina.

Rekovni
fuente
1

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

main.yml

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

ponga todo lo que se requiere en debian como apt en Debian.yml y yum en Centos.yml.

En resumen, es posible permitir que todos los tipos de SO utilicen la misma función si las cosas específicas del SO se colocan en archivos separados.

Este es un ejemplo más completo https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

030
fuente
Ya he hecho esto en un nivel inferior, ya que cada uno de los build-machine-test-1roles tiene sus propias construcciones separadas basadas en os_family. Mi pregunta es para un nivel superior donde las propias máquinas de construcción deben separarse antes de que se apliquen los roles ...
Rekovni