Ba giải pháp để cấu trúc một triển khai với Ansible?


7

Tôi hiện đang triển khai một sản phẩm mới và gặp một số vấn đề để cấu trúc Playbook và Vai trò của tôi. Tôi có ba giải pháp khác nhau và hy vọng nhận được một số thông tin đầu vào mà đường dẫn có thể là tốt nhất.

Sản phẩm này là một ứng dụng web trên máy chủ windows. Các bước sau đây là cần thiết để triển khai (mức cao):

  • cài đặt javajdk
  • cài đặt tomcat
  • cài đặt win_service
  • cấu hình regkes java
  • cấu hình tomcat
  • cài đặt ứng dụng web
  • bắt đầu dịch vụ

Tôi sử dụng hàng tồn kho tĩnh cho prod và staging, group_vars, vai trò (được tạo bằng ansible-galaxy) nên có một số loại cấu trúc.


Giải pháp 1 Đặt mọi thứ vào một vở kịch lớn. Điều đó nghe có vẻ không tốt, nhưng có lợi thế là bạn biết các biến từ các cài đặt trước đó, ví dụ như tomcatcần biết nơi đó JAVA_HOMElà ... với javajdkcài đặt, do có nhiều hơn một java trên các máy không có JAVA_HOME...


Giải pháp 2 Phá vỡ tất cả trong các vai trò nhỏ. Âm thanh tuyệt vời nhưng vai trò nên độc lập với nhau. Tôi không tìm thấy một phương pháp để tách các nhiệm vụ. Sẽ có ý nghĩa khi có các vai trò duy nhất install_tomcat, ví dụ , config_tomcatvà thiết lập một vở kịch có các vai trò được đề cập theo trình tự?

Nhưng làm thế nào để một vai trò biết về nó, ví dụ như một tên đường dẫn cần thiết trong vai trò tiếp theo. -> Cài đặt thiết lập đường dẫn, cấu hình cần biết .. Tôi thực sự không chắc chắn để làm cho vai trò độc lập.


Giải pháp 3 Loại giải pháp 2. Có một vở kịch chính chỉ chứa các vai trò, phân chia càng nhiều càng tốt cho các vai trò. Có tên biến độc lập trong./roles/vars/main.yml

Bằng cách nào đó (?) Tìm thấy một vị trí cao hơn trong ưu tiên biến đổi với playbook nơi tất cả các varđịnh nghĩa cần thiết đi. Trong nội bộ, đường dẫn một biến đến vai trò hoặc đơn giản là vượt quá quy tắc một biến vai trò.

Ví dụ: một sản phẩm có một dịch vụ, tên dịch vụ thường là một phần của tên đường dẫn tomcat. Các tomcattên không nên phụ thuộc vào dịch vụ, vì vậy cần có một tomcat_install_pathtrong những vai trò mà còn là một service_namevới sản phẩm. Vì vậy, trong trường hợp playbook cho sản phẩm được gọi là tên dịch vụ nên là một phần của tên, tomcat_installthì tên được gọi với tổng triển khai khác nhau sẽ không có vấn đề gì với tên dịch vụ.


Tôi sẽ đi với Giải pháp 3 nhưng tôi chưa tìm được cách thiết lập. Ý kiến ​​của các chuyên gia là gì, giải pháp 3 có thể thực hiện được không, là một trong những giải pháp khác tốt hơn một lần hay là giải pháp thứ 4?

Câu trả lời:


3

Tôi muốn giới thiệu cấu trúc mã như được định nghĩa trong tài liệu Thực tiễn tốt nhất Ansible :

nhập mô tả hình ảnh ở đây

và để tuân theo cấu trúc mà những người đóng góp chính cho nền tảng thiên hà ansible sử dụng, như ge Muffguy .

Nếu một người sẽ theo một cấu trúc khác biệt đáng kể thì trong tương lai sẽ rất khó để sử dụng lại vai trò từ cộng đồng thiên hà vô hình và người ta phải phát minh lại bánh xe.


Cảm ơn. Và cụ thể liên quan đến câu hỏi của tôi: Làm thế nào bạn sẽ tách rời và tái sử dụng, ví dụ như cài đặt javajdk và tái sử dụng nó trong cài đặt tomcat? Khi chúng được tách rời hơn các biến, ví dụ: pat với javaddk sẽ cần phải "nhập" vai trò. Làm thế nào để bạn xử lý điều này trong một cài đặt tomcat với các biến thay đổi ở khắp mọi nơi? Có một khái niệm phổ biến để sử dụng ưu tiên biến? Có phải vậy không?
MBushveld

Tôi sẽ kiểm tra thiên hà ansible và cài đặt vai trò jdk và tomcat. Tôi sẽ không tự viết một vai trò trừ khi nó không có sẵn. Ví dụ: github.com/silpion/ansible-tomcatansiblebit.oracle-java
030

Lưu ý rằng tôi đã không kiểm tra vai trò tomcat. Bạn có thể kiểm tra vai trò tomcat cục bộ. Nếu điều đó không hiệu quả, bạn có thể sử dụng một vai trò tomcat khác từ thiên hà.
030

1

Trả lời ngắn gọn: Bạn làm lập trình ở đây. Xem xét các tiêu chuẩn lập trình (mã sạch) như "gói theo tính năng" và xây dựng vai trò có thể tái sử dụng và thể hiện lý do của vai trò. ví dụ

roles:
  - role: jdk
  - role: tomcat  
      (contains tasks with 'install tomcat', 'configure tomcat' ) 
      (requires jdk)
  - role: the_wepapp 
      (requires tomcat)

Futhermore: Vai trò cơ bản, ví dụ như jdk không bao giờ nên biết về vai trò tomcat, v.v ...

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.