Загрузка зависимостей для пользовательских функций кукол

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

Другие вопросы по тегам