Tôi đang tạo cấu hình cho dịch vụ của mình trong thuộc tính đầu bếp. Tuy nhiên, tại một số điểm, tôi cần phải biến thuộc tính mash thành một băm ruby đơn giản. Điều này được sử dụng để làm việc tốt trong Chef 10:đầu bếp 11: bất kỳ cách nào để biến các thuộc tính thành một băm ruby?
node.myapp.config.to_hash
Tuy nhiên, bắt đầu với đầu bếp 11, điều này không hoạt động. Chỉ có cấp cao nhất của thuộc tính được chuyển đổi thành băm, sau đó các giá trị lồng nhau còn lại các đối tượng mash không thể thay đổi được. Sửa đổi chúng dẫn đến các lỗi như sau:
Đầu bếp :: Ngoại lệ :: ImmutableAttributeModification ---------------------------- -------------------- Thuộc tính nút là chỉ đọc khi bạn không chỉ định mức ưu tiên nào được đặt. Để thiết lập một mã sử dụng thuộc tính như `node.default [ "key"] = "giá trị"'
Tôi đã thử một loạt các cách để có được xung quanh vấn đề này mà không có tác dụng:
node.myapp.config.dup.to_hash
JSON.parse(node.myapp.config.to_json)
các json phân tích cú pháp hack, mà có vẻ như nó nên làm việc lớn, kết quả trong:
JSON::ParserError
unexpected token at '"#<Chef::Node::Attribute:0x000000020eee88>"'
có cách nào đáng tin cậy thực tế, viết tắt của bao gồm một chức năng phân tích lồng nhau trong mỗi sách dạy nấu ăn, để chuyển đổi thuộc tính cho một đơn giản , bình thường, đi od ruby cũ băm?
Tại sao bạn cần băm? –
tôi không cần nó - tôi có thể bỏ bất cứ lúc nào tôi muốn! nhưng nghiêm túc, tôi đang xây dựng một tập tin cấu hình ra khỏi rất nhiều thuộc tính khác nhau, và tôi cần phải sửa đổi chúng trước khi viết chúng vào tập tin cấu hình. nó thực sự hữu ích để chuyển đổi các thuộc tính thành một băm, thay đổi chúng, và sau đó sử dụng băm. –