como muitas pessoas, eu tenho um problema de dependência de classe com fantoche. Qualquer uma das classes é executada cedo demais ou acabo em um ciclo de dependência.
Após a configuração:
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
No meu entender, o nó foo
é executado, mas tem um requisito para base
, portanto, o fantoche continua executando o primeiro. A primeira linha de base
requer sources
para que o fantoche execute o primeiro. builddep
vem por último.
No entanto, faz exatamente o oposto. As fontes estão sendo executadas a qualquer momento sem qualquer lógica (como um recurso sem dependências). Muitas vezes após o builddep, o que resulta em um erro de fantoche, já que a fonte de que ele precisa ainda não está lá.
Quando defini as dependências do nó assim:
include "base"
include "somethingelse"
Class['base'] -> Class['somethingelse']
Ou adicione Class['sources']
como dependência para builddep, estou recebendo um ciclo de dependência semelhante a este:
(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])
O que estou fazendo de errado? Alguém pode me apontar para a direção correta?
O importante é que tudo na base (incluindo fontes) está sendo executado antes da classe somethingelse
(e, portanto, builddep)
EDITAR
Limitando. O problema é que o builddep não requer fontes para estar lá. Sem nenhum requisito, o builddep é executado antes de as fontes serem adicionadas, mas requer uma atualização do apt-get. Ao adicionar um requisito à minha classe de fontes, eu caio em um ciclo de dependência mais uma vez.
Está a experimentar este: Apt::Source <| |> -> Apt::Builddep <| |>
, o que resulta em
(Anchor[apt::source::puppetlabs] => Apt::Source[puppetlabs] => Apt::Builddep[foo] => Exec[apt-builddep-foo] => Exec[apt_update] => Class[Apt::Update] => Anchor[apt::source::puppetlabs])