Con rối - Chức năng tùy chỉnh

Như đã mô tả trong chương trước, hàm cung cấp cho người dùng đặc quyền phát triển các hàm tùy chỉnh. Con rối có thể mở rộng khả năng diễn giải của nó bằng cách sử dụng các chức năng tùy chỉnh. Chức năng tùy chỉnh giúp tăng và mở rộng sức mạnh của mô-đun Con rối và tệp kê khai.

Viết chức năng tùy chỉnh

Có một số điều cần ghi nhớ trước khi viết một hàm.

  • Trong Puppet, các hàm được thực thi bởi trình biên dịch, có nghĩa là tất cả các hàm đều chạy trên Puppet master và chúng không cần phải xử lý giống nhau với bất kỳ ứng dụng Puppet nào. Các chức năng chỉ có thể tương tác với các tác nhân, thông tin được cung cấp ở dạng dữ kiện.

  • Bộ điều khiển con rối nắm bắt các chức năng tùy chỉnh, có nghĩa là người ta cần khởi động lại bộ điều khiển con rối, nếu người đó thực hiện một số thay đổi trong chức năng Con rối.

  • Hàm sẽ được thực thi trên máy chủ có nghĩa là bất kỳ tệp nào mà hàm cần phải có trên máy chủ và người ta không thể làm gì nếu hàm yêu cầu quyền truy cập trực tiếp vào máy khách.

  • Có hai loại hàm hoàn toàn khác nhau có sẵn, một là hàm Rvalue trả về giá trị và hàm câu lệnh không trả về bất kỳ thứ gì.

  • Tên của tệp chứa hàm phải giống với tên của hàm trong tệp. Nếu không, nó sẽ không được tải tự động.

Vị trí để đặt chức năng tùy chỉnh

Tất cả các chức năng tùy chỉnh được triển khai riêng biệt .rbvà được phân phối giữa các mô-đun. Người ta cần đặt các hàm tùy chỉnh trong lib / rối / phân tích cú pháp / hàm. Các chức năng có thể được tải từ.rb tập tin từ các vị trí sau.

  • $libdir/puppet/parser/functions
  • các thư mục con rối / phân tích cú pháp / các hàm trong Ruby $ LOAD_PATH của bạn

Tạo một chức năng mới

Các chức năng mới được tạo hoặc xác định bằng cách sử dụng newfunction phương pháp bên trong puppet::parser::Functionsmô-đun. Người ta cần chuyển tên hàm làm ký hiệu chonewfunctionvà mã để chạy dưới dạng một khối. Ví dụ sau đây là một hàm, được sử dụng để ghi một chuỗi vào tệp bên trong thư mục / user.

module Puppet::Parser::Functions 
   newfunction(:write_line_to_file) do |args| 
      filename = args[0] 
      str = args[1] 
      File.open(filename, 'a') {|fd| fd.puts str } 
   end 
end

Khi người dùng đã khai báo hàm, nó có thể được sử dụng trong tệp kê khai như hình dưới đây.

write_line_to_file('/user/vipin.txt, "Hello vipin!")