Tôi muốn có thể xác định một tài nguyên nhẹ với 3 tham số, hai tham số là các tham số cơ bản/tiểu học và thứ ba là sự kết hợp của hai tham số này. Tôi cũng muốn cung cấp khả năng tùy chỉnh tham số thứ ba. Ví dụ:Làm thế nào để thực hiện một thuộc tính động mặc định trong định nghĩa đầu bếp LWRP
Làm thế nào để sửa đổi mã sau đây để đạt được trên hành vi cho full_name
thuộc tính: định nghĩa
tài nguyên:
actions :install
attribute :name, :kind_of => String, :name_attribute => true
attribute :version, :kind_of => String
attribute :full_name, :kind_of => String
nhà cung cấp định nghĩa:
action :install do
Chef::Log.info "#{new_resource.full_name}"
end
tôi muốn xem các kết quả đầu ra khác nhau chỉ thị nguồn ent, ví dụ .:
resource "abc" do
version "1.0.1"
end
sẽ dẫn đến abc-1.0.1
, nhưng:
resource "def" do
version "0.1.3"
full_name "completely_irrelevant"
end
sẽ dẫn đến completely_irrelevant
.
Có khả năng xác định hành vi này trong định nghĩa tài nguyên (có thể thông qua tham số default
) hoặc tôi có thể làm điều đó trong định nghĩa nhà cung cấp không? Nếu thứ hai là đúng, thì tôi có thể lưu trữ giá trị được tính trong thuộc tính full_name
của đối tượng hay không (lớp có vẻ thiếu định nghĩa phương thức full_name=
) hoặc tôi phải lưu trữ giá trị đó trong biến cục bộ?
Cập nhật
Nhờ gợi ý của Draco, tôi nhận ra rằng tôi có thể tạo ra một phương pháp accessor trong tập tin tài nguyên và tính giá trị full_name
on the fly khi được yêu cầu. Tôi muốn một giải pháp sạch hơn nhưng nó tốt hơn nhiều so với tính toán nó trong thực hiện hành động.
Chef phiên bản Chef: 10.16.4
Thật không may có vẻ như biến thành viên 'phiên bản' là' nil' vào thời điểm này ngay cả khi được chỉ định trong chỉ thị tài nguyên. Dường như giá trị thuộc tính được chỉ định trong một công thức không được gán cho thành viên, nhưng (khi tôi đăng nhập giá trị của nó trong trình xử lý hành động nó có một giá trị thích hợp). –
@DariuszWalczak Tôi đã sửa câu trả lời. Bây giờ nên làm việc. –