OpenTofu 1.12 ra mắt: Tính năng mà Terraform chưa bao giờ triển khai

Phần mềm21 tháng 5, 2026·4 phút đọc

Cộng đồng OpenTofu đã phát hành phiên bản 1.12.0, mang đến tính năng prevent_destroy động và cải thiện đáng kể quy trình làm việc cho các đội ngũ DevOps. Bản cập nhật này giải quyết các vấn đề tồn đọng suốt nhiều năm mà Terraform chưa từng khắc phục, đồng thời tối ưu hóa việc xử lý checksum và xuất dữ liệu JSON.

OpenTofu 1.12 ra mắt: Tính năng mà Terraform chưa bao giờ triển khai

Cộng đồng OpenTofu đã phát hành phiên bản 1.12.0 vào ngày 14/5/2026. Mặc dù đây không phải là một bản viết lại hoàn toàn, nhưng bản cập nhật này đã giải quyết được một số vấn đề mà các đội ngũ quản trị hạ tầng phải đối mặt từ lâu nay.

Tính năng được bàn tán nhiều nhất trong bản phát hành này là dynamic prevent_destroy (ngăn chặn xóa động). Trước đây, nếu bạn muốn bảo vệ một tài nguyên khỏi việc bị xóa nhầm, bạn bắt buộc phải hard-code quyết định đó trong cấu hình. Cách làm này hoạt động tốt khi bạn sở hữu một môi trường duy nhất, nhưng lại gặp rắc rối ngay lập tức trong các thiết lập module chia sẻ — nơi cùng một module được sử dụng lại cho môi trường dev, staging và production.

Giải pháp thay thế trước đây thường là "nhân đôi module" hoặc "chấp nhận rằng cơ sở dữ liệu dev cũng vô tình được bảo vệ". Cả hai cách đều không tối ưu. OpenTofu 1.12 cho phép kết nối prevent_destroy với một biến, để workspace production có thể đặt nó thành true trong khi workspace dev để là false, mà không cần phải fork module. Đối với các đội ngũ quản lý hàng chục môi trường từ mã nguồn module chia sẻ, đây thực sự là một thay đổi lớn.

Sự đối lập với Terraform ở điểm này đáng được chú ý. Các yêu cầu về việc kết nối prevent_destroy với một biến đã tồn tại từ thời Terraform 0.7 vào năm 2016. Trong nhiều năm, trình theo dõi vấn đề (issue tracker) đã thu nhận nhiều chủ đề về vấn đề này. Các đội ngũ thường gặp lỗi như "Variables may not be used here" khi cố gắng áp dụng mẫu mà giờ đây đã trở thành tiêu chuẩn trong OpenTofu 1.12. HashiCorp chưa bao giờ tung ra tính năng này, và OpenTofu đã giải quyết nó trong phiên bản 1.12, khoảng một thập kỷ sau khi yêu cầu đầu tiên được đưa ra.

OpenTofu cũng đã thay đổi cách xử lý checksum của OperProvider. Tệp khóa dependency (dependency lock file) từ lâu đã là nguồn gây ra các xung đột nhỏ trong nhóm — cụ thể là trong các thiết lập sử dụng bộ nhớ đệm plugin provider chia sẻ hoặc mirror cục bộ. Việc chạy tofu init trước đây sẽ điền vào tệp khóa với các mã băm zh:, nhưng bạn sau đó cần một lệnh tofu providers lock riêng biệt để lấy các mã băm h1: cần thiết cho bộ nhớ đệm hoặc mirror. OpenTofu 1.12 khắc phục điều này ở cấp độ registry: OpenTofu Registry giờ đây trả về một bộ checksum đầy đủ ở cả hai định dạng, giúp tofu init điền mọi thứ chỉ trong một lần chạy.

Thêm đáng chú ý thứ ba là cờ -json-into=TEN_TEP. Trước đây, nếu bạn muốn đầu ra có thể đọc được bằng máy từ các lệnh OpenTofu, bạn sử dụng -json. Điều này thay thế hoàn toàn đầu ra đầu cuối thân thiện với con người, buộc bất kỳ ai xây dựng công cụ dựa trên đầu ra của OpenTofu phải tái tạo toàn bộ giao diện người dùng trước khi có thể cung cấp bất kỳ thứ gì hữu ích. Cờ mới này gửi luồng JSON đến một tệp (hoặc named pipe, hoặc /dev/fd/N để tiêu thụ đồng thời) trong khi vẫn giữ nguyên đầu ra đầu cuối bình thường. Nếu bạn đang tạo giao diện người dùng cho một nền tảng nội bộ hiển thị tiến độ ứng dụng theo thời gian thực, tính năng này giúp việc tích hợp sạch sẽ hơn nhiều.

Có một meta-argument mới: destroy = false. Tính năng này loại bỏ một tài nguyên khỏi trạng thái (state) mà không hủy đối tượng thực tế. Đây là một cách đơn giản hơn để đạt được những gì người dùng từng phải làm với các giải pháp thay thế terraform state rm.

Về các tính năng bị loại bỏ, hỗ trợ cho provisioner WinRM đang được dần loại bỏ trong 1.12 với các cảnh báo, và sẽ bị xóa hoàn toàn trong 1.13. Các thư viện Go hỗ trợ nó đã không được bảo trì, và khuyến nghị là chuyển sang OpenSSH cho Windows. Nếu bạn vẫn đang chạy provisioner qua WinRM, bây giờ là thời điểm hợp lý để bắt đầu quá trình chuyển đổi thay vì chờ đợi. Các bản dựng chính thức cho kiến trúc 32-bit cũng đang được loại bỏ dần, với các cảnh báo lỗi thời dự kiến trong 1.13 trước khi các gói này ngừng được phân phối hoàn toàn.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗