Como quebrar o ciclo de dependência no Puppet ao incluir classes

7

Eu tenho as seguintes definições:

class nginx::install{
  ...
}

class nginx::service{
  ...
}

class nginx::config{
  ...
}

class nginx{
  include nginx::install, nginx::service, nginx::config
}

class jenkins::nginx{
  include nginx

  file{'/etc/nginx/sites-enabled/jenkins':
    source => ...,
    require => Class['nginx'],
  }
}

Mas quando eu corro isso, Puppet me diz que eu tenho um ciclo:

err: Could not apply complete catalog: Found 1 dependency cycle:
(Class[Jenkins::Nginx] => File[/etc/nginx/sites-available/jenkins] => Class[Jenkins::Nginx])
Try the '--graph' option and opening the resulting '.dot' file in OmniGraffle or GraphViz

A referência simples ao nginx em jenkins :: nginx faz referência a si mesmo. Como posso dizer ao Puppet que eu dependo da classe nginx de nível superior?

Eu tentei mudar minha dependência para Class['::nginx'] (como se eu estivesse em Ruby), e Puppet agora me diz que não consegue encontrar a dependência.

    
por François Beausoleil 31.08.2012 / 15:13

2 respostas

7

Fiz muitos testes porque sua pergunta era interessante ...

Encontrou este post depois de um tempo: link

Concordo com o poster que isto é um bug, ou pelo menos não bem desenhado, mas se você incluir a classe com escopo absoluto (:: nginx), você pode definir um require para ele, assim:

class jenkins::nginx{
  include ::nginx

  file{'/etc/nginx/sites-enabled/jenkins':
    source => ...,
    require => Class['::nginx'],
  }
}
    
por 31.08.2012 / 15:44
0

Incluir com prefixo?

include main: nginx

    
por 31.08.2012 / 15:39

Tags