Gọi hàm rối từ mẫu rối?


13

Kể từ 0.24.8, mẫu Puppet có thể gọi hàm Puppet không?

Tôi có thể có được chức năng tương tự bằng cách gọi hàm trong tệp kê khai của mình, gán giá trị trả về cho một biến và sau đó sử dụng lookupvar ('biến') trong mẫu, nhưng tôi muốn loại bỏ người trung gian.

Câu trả lời:


18

Bên trong các mẫu bạn có quyền truy cập vào một đối tượng phạm vi. Tất cả các hàm mà bạn có thể truy cập trong bảng kê khai con rối có thể được truy cập thông qua đối tượng phạm vi đó, mặc dù không thông qua cùng tên. Chuẩn bị "function_"cho phần đầu của tên hàm. Ví dụ, ở đây tôi đã bao gồm một mẫu bên trong một mẫu khác:<%= scope.function_template("template2.erb") %>

http://reducteelsabs.com/trac/puppet/wiki/PuppetTemplating có tài liệu tuyệt vời về đối tượng phạm vi bên trong các mẫu. Để biết thông tin thực sự sâu sắc về mẫu và chức năng, bạn có thể nhìn vào bên trong lib/puppet/parser/templatewrapper.rblib/puppet/parser/functions.rb.


Cảm ơn rất nhiều. Lời cảnh báo cho bất kỳ ai sử dụng hàm template () trong một mẫu: bạn vẫn phải đủ điều kiện giống như bạn làm trong bảng kê khai con rối (ví dụ: scope.feft_template ("module / template.erb")).
sh-beta

Có thể sử dụng một biến cho tên của tệp mẫu để tải cho lệnh gọi hàm mẫu trong mẫu không? Ví dụ:<%= scope.function_template("sites/$domain/config.erb") %>
Gary

Chắc chắn rồi. Chỉ cần lưu ý rằng bạn đang làm việc trong Ruby, không phải DSL của Puppet, vì vậy tên biến (và quy tắc nội suy) là khác nhau. Chuỗi của bạn nên được <%= scope.function_template("sites/#{domain}/config.erb") %>.
jgoldschrafe

3

Hãy để tôi mở rộng câu hỏi cũng cho các chức năng tùy chỉnh . Về cơ bản, bạn gọi các hàm tùy chỉnh giống như các hàm dựng sẵn (sử dụng tiền tố function_), nhưng hãy đảm bảo bạn vượt qua tất cả các tham số trong một mảng:

module Puppet::Parser::Functions
  newfunction(:namegoeshere, :type => :rvalue) do |args|
    # ...
  end
end

<%= scope.function_namegoeshere(["one","two"]) %>

Xin lưu ý rằng nó cũng hoạt động mà không có dấu ngoặc vuông trên một số phiên bản Puppet. Thông tin thêm: http://docs.puppetlabs.com/guides/custom_fifts.html#references-custom-fifts-in-temsheet

Một điều quan trọng khác là có một lỗi (hoặc tính năng) trong Puppet 2.6 trở lên trong đó các chức năng tùy chỉnh không được tự động tải vào phạm vi mẫu. Bạn cần tải chúng bằng tay , nếu không chức năng sẽ không được tìm thấy!

<% Puppet::Parser::Functions::function('namegoeshere') %>

Thông tin thêm: http://projects.puppetlabs.com/issues/7991


-2

Tôi không hoàn toàn chắc chắn ý của bạn về chức năng Puppet, nhưng các mẫu rối được nhúng Ruby, vì vậy bạn có thể làm bất cứ điều gì trong các mẫu mà bạn có thể có trong Ruby.


Các hàm rối gốc là những thứ như fqdn_rand (), sha1 (), được gắn thẻ (), v.v ... Các hàm rối tùy chỉnh được lưu trữ dưới các mô-đun / modulename / plugins / Puppet / Parser / tests /. Chúng có thể được gọi từ trong một mẫu không?
sh-beta
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.