Учебники

Кукольный — Пользовательские функции

Как описано в предыдущей главе, функция предоставляет пользователю привилегию разработки пользовательских функций. Puppet может расширить свои возможности интерпретации с помощью пользовательских функций. Пользовательская функция помогает увеличить и расширить возможности модулей Puppet и файлов манифеста.

Написание пользовательских функций

Есть несколько вещей, которые нужно иметь в виду, прежде чем писать функцию.

  • В Puppet функции выполняются компиляторами, что означает, что все функции выполняются на Puppet master, и им не нужно иметь дело с любым из клиентов Puppet для одного и того же. Функции могут взаимодействовать только с агентами, если информация представлена ​​в форме фактов.

  • Мастер Puppet улавливает пользовательские функции, что означает, что необходимо перезапустить мастер Puppet, если кто-то вносит изменения в функцию Puppet.

  • Функция будет выполняться на сервере, что означает, что любой файл, который необходим этой функции, должен присутствовать на сервере, и никто не может ничего сделать, если функция требует прямого доступа к клиентскому компьютеру.

  • Доступны два совершенно разных типа функций: функция Rvalue, которая возвращает значение, и функция оператора, которая ничего не возвращает.

  • Имя файла, содержащего функцию, должно совпадать с именем функции в файле. В противном случае он не будет загружен автоматически.

В Puppet функции выполняются компиляторами, что означает, что все функции выполняются на Puppet master, и им не нужно иметь дело с любым из клиентов Puppet для одного и того же. Функции могут взаимодействовать только с агентами, если информация представлена ​​в форме фактов.

Мастер Puppet улавливает пользовательские функции, что означает, что необходимо перезапустить мастер Puppet, если кто-то вносит изменения в функцию Puppet.

Функция будет выполняться на сервере, что означает, что любой файл, который необходим этой функции, должен присутствовать на сервере, и никто не может ничего сделать, если функция требует прямого доступа к клиентскому компьютеру.

Доступны два совершенно разных типа функций: функция Rvalue, которая возвращает значение, и функция оператора, которая ничего не возвращает.

Имя файла, содержащего функцию, должно совпадать с именем функции в файле. В противном случае он не будет загружен автоматически.

Расположение для размещения пользовательской функции

Все пользовательские функции реализованы в виде отдельных файлов .rb и распределены между модулями. Нужно поместить пользовательские функции в lib / puppet / parser / function. Функции могут быть загружены из файла .rb из следующих мест.

  • $ LIBDIR / кукольный / СА / функции
  • подкаталоги 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

Когда пользователь объявил функцию, ее можно использовать в файле манифеста, как показано ниже.