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!")