İşletim sistemine bağlı olarak Ansible'da rolleri ve ana bilgisayarları kullanarak VM'leri dağıtma


9

Ansible'daki farklı işletim sistemlerine en iyi ana bilgisayarların / rollerin nasıl uygulanacağı konusunda sorun yaşıyorum.

Şu anda Ansible'ı Windows / Mac / Linux VM'leri oluşturmak için kullanıyorum ve VM'lerin her birinin kendilerine uygulanması gereken farklı rolleri var.

En iyi uygulamaları okudum ve özellikle gruplama yöntemini kullanmak için bunları takip etmeye çalıştım, ancak çoğunlukla web sunucuları ve dbservers'den bahsettiklerinden emin değilim.


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

ortamları / test / grupları

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

ortamları / test / ana

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

ortamları / 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

environment/test/metaBen ihtiyaçlarını inanıyoruz dosya ile değiştirilmesi build_nodes:children, ama emin ne değilim. Daha önce sadece VM'lerin aşağıdaki rolleri oluşturmuştu:

Eski site.yml

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

Ama sonra her şeyin aynı makinede inşa edilmesini istemediğimi fark ettim. Not build-machine-test-1ve 2her ikisinin de işletim sistemine bağlı olarak neleri ekleyeceklerini tespit ettikleri için ayrı Windows / Mac / Linux sürümleri vardır.

VM'leri işletim sistemlerine göre ayırmanın daha iyi bir yolu önerilebilir mi?

Yanıtlar:


6

Bu yüzden aynı yapıyı kabaca tutmayı başardım ve makinelerin nasıl üretildiğini ayırmayı başardım, ancak yine de biraz bulanık ve muhtemelen daha verimli olacak şekilde geliştirilebilir!


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

ortamları / test / grupları

[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

ortamları / test / ana

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

ortamları / 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

Bu çözüm, kendilerine ayrı roller ekleyerek daha fazla test düğümünün oluşturulmasına izin verir ve makinenin sağlanması için doğru gruba eklenebilir.


1

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

main.yml

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

Debian.yml'de debian gibi debian'da gerekli olan her şeyi ve Centos.yml'de yum'u koyun.

Özetle, işletim sistemine özgü şeyler ayrı dosyalara konulursa tüm işletim sistemi türlerinin aynı rolü kullanmasına izin vermek mümkündür.

Bu daha kapsamlı bir örnektir https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml


build-machine-test-1Rollerin her birinin kendi ayrı yapılarına dayalı olduğu için bunu daha düşük bir seviyede yaptım os_family. Sorum, roller uygulanmadan önce yapı makinelerinin kendilerinin ayrılması gereken daha yüksek bir seviye için ...
Rekovni
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.