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

Зависимости класса / узла Puppet

как и многие люди, у меня проблема с классовой зависимостью марионетки. Либо один класс выполняется слишком рано, либо я попадаю в цикл зависимости.

После настройки:

node foo:
  require base
  include somethingelse

class base:
  require sources // <- class defines package sources needed for everything

class somethingelse
  apt::builddep { 'foo': } // <- requires some package sources

Насколько я понимаю, узел foo выполняется, но требует base, поэтому марионетка выполняет это первой. baseпервая строка требует sources так что марионетка выполнит это первой. builddep идет последним.

Однако это происходит с точностью до наоборот. Источники запускаются в любое время без какой-либо логики (например, ресурс без зависимостей). Много раз после builddep, что приводит к ошибке марионетки, так как источник, который ему нужен, еще не существует.

Когда я определил зависимости узлов следующим образом:

include "base"
include "somethingelse"

Class['base'] -> Class['somethingelse']

Или добавить Class['sources'] как зависимость от builddep, я получаю цикл зависимости, подобный этому:

(Anchor[apt::source::puppetlabs] => Apt::Source[puppetlabs] => Class[Sources] => Class[Base] => Cron[execute-puppet] => Class[Base] => Class[somethingelse] => Apt::Builddep[foo] => Exec[apt-builddep-foo] => Exec[apt_update] => Class[Apt::Update] => Anchor[apt::source::puppetlabs])

Что я делаю не так? Может ли кто-нибудь указать мне правильное направление? Важно то, что все в базе (включая исходники) выполняется до класса somethingelse (и, следовательно, builddep)

РЕДАКТИРОВАТЬ

Сужая его. Проблема в том, что builddep не требует наличия исходных кодов. Без каких-либо требований builddep запускается до добавления источников, но требует обновления apt-get. При добавлении требования к моему классу источников я снова попадаю в цикл зависимости.

Сейчас пробую это: Apt::Source <| |> -> Apt::Builddep <| |> что приводит к

(Anchor[apt::source::puppetlabs] => Apt::Source[puppetlabs] => Apt::Builddep[foo] => Exec[apt-builddep-foo] => Exec[apt_update] => Class[Apt::Update] => Anchor[apt::source::puppetlabs])

Я пришел к выводу, что это ошибка в apt. builddep уведомляет apt-get update вместо того, чтобы требовать этого, что, на мой взгляд, не имеет большого смысла. Вы хотите apt-get update быть выполненным перед установка зависимостей сборки.

Я исправил, чтобы требовать apt-get update, который решает мой цикл зависимости. Представил запрос на вытягивание чтобы увидеть, что говорят разработчики.