File phân tích của OpenUpgrade liệt kê mọi model, trường và module đã đổi giữa các phiên bản Odoo. Một API và một trang web giúp tra cứu chúng, kèm YAML cho odoo-module-migrator.
Giới thiệu OpenUpgrade: nền móng của việc nâng cấp Odoo
OpenUpgrade là một dự án mã nguồn mở quan trọng của Odoo Community Association (OCA). Mục đích chính của nó là cung cấp các script để nâng cấp database qua các phiên bản lớn của Odoo (ví dụ từ 17.0 lên 18.0).
Trong quá trình đó, OpenUpgrade sinh ra hai file log rất giá trị:
- upgrade_analysis.txt (ví dụ): file này chứa danh sách chi tiết các thay đổi phá vỡ tương thích ngược giữa hai phiên bản, gồm các model, trường và bản ghi XML đã được thêm, gỡ bỏ hoặc đổi tên.
- apriori.py (ví dụ): file này chứa danh sách chi tiết các thay đổi ở cấp module, bao gồm những trường hợp sau:
- Module đổi tên: khi tên kỹ thuật của một module thay đổi giữa các phiên bản (ví dụ note được đổi thành project_todo)
- Module bị gộp: khi một module được gộp vào một module khác
- Không cần nữa: một số module đã được thu vào các tính năng gốc của Odoo trong quá trình phát triển
- Module chuyển chỗ: một số module được chuyển sang repository khác. Ví dụ, module ed_oca chuyển từ OCA/edi sang OCA/edi-framework giữa 15.0 và 16.0.
Chúng tôi tin những thông tin trên rất hữu ích khi làm việc với Odoo. Vì vậy, chúng tôi quyết định phân tích các file này thành nhiều database có cấu trúc, để dữ liệu truy vấn được dễ dàng qua một API và duyệt được bằng một giao diện người dùng.
Một giao diện để duyệt các file phân tích dễ hơn
OpenUpgrade API chuẩn hóa toàn bộ luồng xử lý dữ liệu (ETL: Extract – Transform – Load) cho các thay đổi khi nâng cấp, rồi phơi chúng ra qua một REST API tiện dụng. Nó hoạt động như sau:
- Extract: tự động kéo mọi script nâng cấp thẳng từ các nhánh của OpenUpgrade (ví dụ 16.0, 17.0, 18.0).
- Transform: phân tích và “dịch” phần văn bản thô trong các file upgrade_analysis.txt (ví dụ) thành một cấu trúc dữ liệu sạch và thống nhất (ChangeRecord).
- Load: lưu dữ liệu đã chuẩn hóa vào một database SQLite, tách bạch rõ theo từng phiên bản lớn (ví dụ 16.0, 17.0, 18.0). Mỗi file DB là một ảnh chụp độc lập.
- API: cung cấp các endpoint để bạn dễ dàng truy vấn dữ liệu thay đổi theo module, model và phiên bản.
Các mục tiêu chính của OpenUpgrade API là:
- Gom về một mối và chuẩn hóa mọi phát hiện từ OpenUpgrade thành một nguồn duy nhất, dễ truy vấn.
- Cung cấp một REST API để lập trình viên và chuyên viên tư vấn tra cứu nhanh các thay đổi khi lập kế hoạch chuyển đổi.
- Tự động sinh các file YAML tương thích với Odoo Module Migrator để tự động hóa các thao tác đổi tên và gỡ bỏ.
- Làm backend cho các công cụ của cộng đồng, chẳng hạn cổng tra cứu openupgrade.trobz.com.
Nâng mức tự động hóa cùng Odoo Module Migrator
Đây là tính năng mạnh nhất! OpenUpgrade API tự sinh được các file YAML mà Odoo Module Migrator hiểu được. Bạn tạo các file này bằng lệnh get:
- Lấy danh sách các model bị gỡ bỏ ở phiên bản 18.0:
python manage.py get --object-type removed --object models --versions 18.0 --output-directory output - Lấy danh sách các trường bị gỡ bỏ ở phiên bản 18.0:
python manage.py get --object-type removed --object fields --versions 18.0 --output-directory output - Tương tự với model và trường đã đổi tên:
python manage.py get --object-type renamed --object models --versions 18.0 --output-directory outputvàpython manage.py get --object-type renamed --object fields --versions 18.0 --output-directory output
Các file YAML sẽ được sinh ra trong thư mục output với cấu trúc rõ ràng. Việc bạn phải làm chỉ là:
- Sinh các file YAML cho phiên bản bạn đang chuyển đổi tới (ví dụ 17.0 → 18.0).
- Chép các file đó vào repository chuyển đổi của bạn.
- Chạy odoo-module-migrator, và nó sẽ tự áp dụng các thay đổi dựa trên dữ liệu bạn cung cấp.
Giao diện web: openupgrade.trobz.com
Để bổ trợ cho OpenUpgrade API, chúng tôi làm OpenUpgrade Explorer, một giao diện web gọn gàng và thân thiện, giúp dữ liệu chuyển đổi đã được cấu trúc trở nên dễ tiếp cận. Nó giúp lập trình viên và chuyên viên tư vấn đi nhanh qua các thay đổi phá vỡ tương thích ngược và các thay đổi ở cấp module, mà không phải vật lộn trực tiếp với API hay log thô.
Với nó, bạn có thể:
- Soi nhanh các thay đổi theo module/model/trường qua các phiên bản Odoo.
- Kiểm chứng các thao tác quan trọng như đổi tên/gỡ bỏ/gộp/lỗi thời/chuyển chỗ trước khi lập kế hoạch chuyển đổi.
- Chia sẻ đường dẫn tra cứu với đội của bạn hoặc với khách hàng.
Xem thử tại: openupgrade.trobz.com