Назад | Перейти на главную страницу

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

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

Есть ли способ остановить запуск функции так рано или, по крайней мере, запустить ее, в зависимости от устанавливаемой библиотеки. В качестве альтернативы, есть ли способ добавить зависимости где-нибудь в папке функций, которые будут доступны для функции?

Все, что вы можете сделать, это завернуть require в rescue LoadError блок, который возвращает пустой список или любое другое простое возвращаемое значение, не вызывающее ошибок. Это должно быть сделано внутри вашей функции, так как файл, в котором находится функция, будет загружен только один раз, но код внутри вашей функции будет запускаться каждый раз при вызове функции.