Implantando VMs usando funções e hosts no Ansible com base no sistema operacional

9

Estou tendo problemas para descobrir a melhor maneira de aplicar hosts / funções a diferentes sistemas operacionais no Ansible.

Atualmente, estou usando o Ansible para gerar VMs Windows / Mac / Linux, e cada uma delas possui funções diferentes que precisam ser aplicadas a elas.

Li as práticas recomendadas e tentei segui-las, principalmente para usar o método de agrupamento, mas ainda não tenho certeza, pois elas mencionam principalmente servidores web e 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

ambientes / teste / grupos

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

ambientes / teste / hosts

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

ambientes / teste / 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

O environment/test/metaarquivo que eu acredito que precisa ser alterado com o arquivo build_nodes:children, mas não sei ao certo o que fazer. Anteriormente, eu tinha apenas as VMs com todas as funções criadas com o seguinte:

Site.yml antigo

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

Mas então percebi que não queria que tudo fosse construído na mesma máquina. Note, build-machine-test-1e 2ambos têm separado Windows / Mac / Linux aumenta à medida que eles detectam o que incluir baseado no sistema operacional.

Alguém pode sugerir uma maneira melhor de separar as VMs com base em sistemas operacionais?

Rekovni
fonte

Respostas:

6

Então, consegui manter a mesma estrutura aproximadamente e consegui separar como as máquinas são geradas, mas ainda é um pouco confuso e provavelmente pode ser melhorado para ser mais 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

ambientes / teste / 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

ambientes / teste / 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=......

ambientes / teste / 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

Essa solução permite que mais nós de teste sejam gerados com funções separadas adicionadas a eles e pode ser adicionado apenas ao grupo correto para o provisionamento da máquina.

Rekovni
fonte
1

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

main.yml

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

coloque tudo o que é necessário no debian como apt no Debian.yml e yum no Centos.yml.

Em resumo, é possível permitir que todos os tipos de SO usem a mesma função se as coisas específicas do SO forem colocadas em arquivos separados.

Este é um exemplo mais abrangente https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

030
fonte
Eu já fiz isso em um nível inferior, pois cada uma das build-machine-test-1funções tem suas próprias compilações separadas com base os_family. Minha pergunta é para um nível mais alto, onde as próprias máquinas de compilação precisam ser separadas antes que as funções sejam aplicadas ...
Rekovni