Как описано в предыдущей главе, функция предоставляет пользователю привилегию разработки пользовательских функций. 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
Когда пользователь объявил функцию, ее можно использовать в файле манифеста, как показано ниже.