Puppet - Пользовательские функции
Как описано в предыдущей главе, функция предоставляет пользователю привилегию разработки собственных функций. Puppet может расширить возможности интерпретации с помощью пользовательских функций. Пользовательская функция помогает увеличить и расширить возможности модулей Puppet и файлов манифеста.
Написание пользовательской функции
Есть несколько вещей, о которых нужно помнить перед написанием функции.
В Puppet функции выполняются компиляторами, что означает, что все функции выполняются на мастере Puppet, и им не нужно иметь дело с каким-либо клиентом Puppet для того же. Функции могут взаимодействовать только с агентами при условии, что информация представлена в виде фактов.
Мастер Puppet перехватывает пользовательские функции, что означает, что нужно перезапустить мастер Puppet, если вы вносите некоторые изменения в функцию Puppet.
Функция будет выполняться на сервере, что означает, что любой файл, в котором она нуждается, должен присутствовать на сервере, и нельзя ничего делать, если функция требует прямого доступа к клиентской машине.
Доступны совершенно два разных типа функций: одна - это функция Rvalue, которая возвращает значение, и функция оператора, которая ничего не возвращает.
Имя файла, содержащего функцию, должно совпадать с именем функции в файле. В противном случае он не загрузится автоматически.
Место для размещения пользовательской функции
Все кастомные функции реализованы как отдельные .rbфайлы и распределяются по модулям. Нужно поместить пользовательские функции в lib / puppet / parser / function. Функции могут быть загружены из.rb файл из следующих мест.
- $libdir/puppet/parser/functions
- подкаталоги puppet / parser / functions в вашем Ruby $ LOAD_PATH
Создание новой функции
Новые функции создаются или определяются с помощью newfunction метод внутри puppet::parser::Functionsмодуль. Нужно передать имя функции как символ вnewfunctionметод и код для запуска в виде блока. В следующем примере показана функция, которая используется для записи строки в файл внутри каталога / 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
После того, как пользователь объявил функцию, ее можно использовать в файле манифеста, как показано ниже.
write_line_to_file('/user/vipin.txt, "Hello vipin!")