Menyebarkan VM menggunakan peran dan host di Ansible berdasarkan sistem operasi

9

Saya mengalami masalah saat mengetahui cara terbaik menerapkan host / peran ke sistem operasi yang berbeda di Ansible.

Saat ini saya menggunakan Ansible untuk menghasilkan VM Windows / Mac / Linux, dan masing-masing VM memiliki peran berbeda yang perlu diterapkan pada mereka.

Saya telah membaca praktik terbaik dan telah mencoba mengikuti mereka, terutama untuk menggunakan metode pengelompokan, tetapi saya masih tidak yakin karena mereka kebanyakan menyebutkan webservers dan 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

lingkungan / uji / kelompok

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

lingkungan / uji / host

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

lingkungan / uji / 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

The environment/test/metafile I percaya perlu diubah dengan build_nodes:children, tapi aku tidak yakin apa yang. Sebelumnya saya hanya meminta VM memiliki semua peran yang dibangun untuk itu dengan yang berikut:

Situs lama .yml

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

Tetapi kemudian menyadari bahwa saya tidak ingin semuanya dibangun di mesin yang sama. Catatan, build-machine-test-1dan 2keduanya memiliki build Windows / Mac / Linux yang terpisah saat mereka mendeteksi apa yang harus dimasukkan berdasarkan sistem operasi.

Adakah yang bisa menyarankan cara yang lebih baik untuk memisahkan VM berdasarkan sistem operasi?

Rekovni
sumber

Jawaban:

6

Jadi saya berhasil menjaga struktur yang sama secara kasar, dan berhasil memisahkan bagaimana mesin dihasilkan, namun masih sedikit kabur dan mungkin dapat ditingkatkan agar lebih efisien!


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

lingkungan / uji / kelompok

[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

lingkungan / uji / host

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

lingkungan / uji / 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

Solusi ini memungkinkan lebih banyak node uji yang dihasilkan dengan peran terpisah yang ditambahkan padanya, dan hanya dapat ditambahkan ke grup yang benar untuk mesin yang akan disediakan.

Rekovni
sumber
1

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

main.yml

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

letakkan semua yang dibutuhkan pada debian seperti apt di Debian.yml dan yum di Centos.yml.

Singkatnya, dimungkinkan untuk membiarkan semua tipe OS menggunakan peran yang sama jika hal-hal spesifik OS dimasukkan ke dalam file terpisah.

Ini adalah contoh yang lebih komprehensif https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

030
sumber
Saya sudah melakukan ini di tingkat yang lebih rendah, karena masing-masing build-machine-test-1peran memiliki bangunan terpisah berdasarkan os_family. Pertanyaan saya adalah untuk tingkat yang lebih tinggi di mana mesin pembuat sendiri perlu dipisahkan sebelum peran diterapkan ...
Rekovni