как многие люди, у меня есть проблема зависимости от класса с марионеткой. Или один класс выполняется слишком рано, или я заканчиваю в цикле зависимости.
Следующая установка:
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::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])
Я пришел к выводу, что это жучок. builddep
уведомляет apt-get update
вместо того, чтобы требовать его, что, на мой взгляд, не имеет смысла. Вы хотите, чтобы apt-get update
было выполнено до установки зависимостей сборки. Я исправил apt, чтобы потребовать apt-get update
, что решает мой цикл сборки зависимостей. Отправил запрос pull request на apt, чтобы посмотреть, что говорят разработчики