Загрузка зависимостей для пользовательских функций кукол
Я написал пользовательскую функцию puppet, которая работает нормально и зависит от гема облачных серверов (клиентской библиотеки Rackspace). Это нормально, если я предварительно установил гем на сервере перед запуском puppet, но полностью ломается, если я не установил гем, так как функция, кажется, запускается во время очистки "компиляции" задолго до того, как мое определение пакета будет реализовано. Вот как выглядит мой.pp с get_hosts - функцией, которая требует гем облачных серверов.
package { "rubygems":
ensure => installed,
provider => "gem";
}
package { "cloudservers":
ensure => installed,
provider => "gem",
require => Package["rubygems"];
}
class hosts::us {
$hosts = get_hosts("us")
hostentry { $hosts: }
}
define hostentry() {
$parts = split($name, ',')
$address = $parts[0]
$ip = $parts[1]
$aliases = $parts[2]
host{ $address: ip => $ip, host_aliases => $aliases }
}
Есть ли способ остановить запуск функции так рано, или хотя бы ее запуск зависит от устанавливаемой библиотеки. В качестве альтернативы, есть ли способ, которым я могу добавить зависимости где-нибудь в папке функций, которые будут доступны для функции?
1 ответ
Все, что вы можете сделать, это обернуть require
в rescue LoadError
блок, который возвращает пустой список или что-то простое, не вызывающее ошибок возвращаемое значение. Это должно быть сделано внутри вашей функции, поскольку файл, в котором находится функция, будет загружен только один раз, но код внутри вашей функции будет запускаться каждый раз, когда вызывается функция.