Dependências da classe Puppet / node

1

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])
    
por dvcrn 05.07.2014 / 18:21

1 resposta

2

Concluí que isso é um bug no apt. builddep notifica apt-get update em vez de exigir, o que não faz muito sentido na minha opinião. Você deseja que apt-get update seja executado antes de instalar as dependências de construção.

Eu atualizei o apt para exigir apt-get update , o que resolve meu ciclo de dependência. Enviou uma solicitação de pull ao apt para ver o que os desenvolvedores dizem.

    
por 06.07.2014 / 05:23

Tags