2016-02-01 13 views
7

Tôi đang xây dựng một kiểu tùy chỉnh và tôi không thể để có được quyền truy cập vào các hiera phạm vi từ một defaultto khốiTiếp cận hiera phạm vi từ Múa rối kiểu tùy chỉnh

module Puppet 
    require 'puppet/parser/functions/hiera' 
    newtype(:my_type) do 

    ensurable 

    newparam(:myparam) do 
     defaultto { Puppet::Parser::Functions.hiera('myparam') } 
    end 
    newproperty(:value) do 
     desc "Value of the item." 
    end 
    end 
end 

Nhưng tôi nhận được

Error: undefined method `hiera' for Puppet::Parser::Functions:Module 

tôi đang thực sự sử dụng Múa rối 3.8 và phân tích cú pháp tương lai

là một workaround, chúng tôi sử dụng

$my_vals = hiera_hash('mytype_vals') 
    create_resource(my_type, $myvals, {myparam => hiera('myparam')}) 

đó làm việc tốt, nhưng my_type đối tượng dự kiến ​​sẽ được khởi tạo bất cứ nơi nào trong danh mục, một myparam dự kiến ​​sẽ được giống nhau trên tất cả các trường. Vì vậy, không cần phải khai báo nhiều giá trị mặc định.

cách tiếp cận khác sẽ được đặt

My_type{ 
    myparam => hiera('myparam') 
} 

Trong manifest nút. Điều đó cũng có thể làm điều này, nhưng chúng tôi đang phát triển một mô-đun, và biểu hiện chính nằm ngoài phạm vi của chúng tôi

+0

Tôi không thể giải thích được vấn đề "phương pháp chưa xác định", nhưng tôi không nghĩ cách tiếp cận này (1) có ý nghĩa hoặc (2) có thể hiệu quả cho bạn ngay cả khi bạn có thể thực hiện cuộc gọi Hiera. Nói chủ yếu sau này, loại của bạn cần phải được đánh giá cả trên tổng thể * và trên tác nhân *; trong trường hợp thứ hai, bạn (có thể) không có sẵn Hiera để vẽ. –

+0

Đối với điểm thứ hai, chúng tôi sử dụng một kiến ​​trúc vô chủ, và sử dụng con rối áp dụng, do đó, các nút có quyền truy cập vào thông tin hiera của họ. Lần đầu tiên, tôi sẽ cố gắng giải thích trường hợp sử dụng của chúng tôi trong câu hỏi –

Trả lời

2

Bạn không thể truy cập dữ liệu hiera từ nhà cung cấp, vì nhà cung cấp chạy đại lý bên và hiera chạy bên chính.

Bạn đã đề cập đến việc chạy masterless trong các nhận xét của mình, điều này không liên quan vì vẫn còn chạy "master" để biên soạn danh mục Con rối và đánh giá các giá trị hiera và chạy "agent" áp dụng danh mục sử dụng nhà cung cấp.

Hãy tưởng tượng con rối chạy như một loạt các bước sau:

  • Agent gửi chủ một danh sách các sự kiện
  • Thạc sĩ biên dịch các trang web manifest để tìm ra danh sách các lớp bao gồm cho nút
  • Thạc sĩ đánh giá tất cả các thông số và các biến hiera
  • Thạc sĩ biên dịch các module vào một cửa hàng
  • Thầy sẽ gửi catalogue đến đại lý
  • Đại lý áp dụng danh mục bằng cách cung cấp thông số cho các nhà cung cấp

Vì vậy, tốt nhất là đặt nhà cung cấp theo loại xác định. Sử dụng lớp xác định để đặt mặc định hiera và chuyển chúng cho nhà cung cấp, trong khi cho phép mặc định được ghi đè.

Các vấn đề liên quan