Triển khai máy ảo bằng cách sử dụng vai trò và máy chủ lưu trữ trong Ansible dựa trên hệ điều hành


9

Tôi đang gặp vấn đề về cách áp dụng tốt nhất các máy chủ / vai trò cho các hệ điều hành khác nhau trong Ansible.

Tôi hiện đang sử dụng Ansible để tạo Windows / Mac / Linux VM và mỗi VM có vai trò khác nhau cần được áp dụng cho chúng.

Tôi đã đọc các thực tiễn tốt nhất và đã cố gắng làm theo chúng, đặc biệt là sử dụng phương pháp nhóm, nhưng tôi vẫn không chắc chắn vì chúng chủ yếu đề cập đến máy chủ web và máy chủ dbservers.


trang web.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

môi trường / kiểm tra / nhóm

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1

môi trường / kiểm tra / máy chủ

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

môi trường / kiểm tra / 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

Các environment/test/metatập tin tôi tin rằng cần phải được thay đổi với build_nodes:children, nhưng tôi không biết phải làm gì. Trước đây tôi chỉ có các máy ảo có tất cả các vai trò được xây dựng với nó như sau:

Trang web cũ.yml

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

Nhưng sau đó nhận ra tôi không muốn mọi thứ được xây dựng trên cùng một máy. Lưu ý build-machine-test-12cả hai đều có các bản dựng Windows / Mac / Linux riêng biệt khi chúng phát hiện những gì cần bao gồm dựa trên hệ điều hành.

Bất cứ ai cũng có thể đề xuất một cách tốt hơn để tách các VM dựa trên các hệ điều hành?

Câu trả lời:


6

Vì vậy, tôi đã cố gắng giữ nguyên cấu trúc tương tự và quản lý để phân tách cách tạo ra các máy, tuy nhiên vẫn hơi mờ và có thể được cải thiện để hiệu quả hơn!


trang web.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

môi trường / kiểm tra / nhóm

[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

môi trường / kiểm tra / máy chủ

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

môi trường / kiểm tra / 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

Giải pháp này cho phép tạo ra nhiều nút kiểm tra hơn với các vai trò riêng biệt được thêm vào chúng và chỉ có thể được thêm vào nhóm chính xác để máy được cung cấp.


1

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

chính.yml

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

đặt mọi thứ cần thiết cho debian như apt trong Debian.yml và yum trong Centos.yml.

Tóm lại, có thể cho phép tất cả các loại HĐH sử dụng cùng một vai trò nếu những thứ cụ thể của HĐH được đặt trong các tệp riêng biệt.

Đây là một ví dụ toàn diện hơn https://github.com/ge Muffguy/ansible-role-mysql/blob/master/t task / main.yml


Tôi đã thực hiện điều này ở cấp độ thấp hơn, vì mỗi build-machine-test-1vai trò có các bản dựng riêng dựa trên cơ sở os_family. Câu hỏi của tôi là ở cấp độ cao hơn, nơi các máy xây dựng cần phải được tách ra trước khi các vai trò được áp dụng ...
Rekovni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.