包含类时如何打破 Puppet 中的依赖循环

Fra*_*eil 7 puppet

我有以下定义:

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'],
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个时,Puppet 告诉我我有一个循环:

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
Run Code Online (Sandbox Code Playgroud)

jenkins::nginx 中对 nginx 的普通引用引用了自身。我如何告诉 Puppet 我依赖于顶级 nginx 类?

我试图将我的依赖项更改为Class['::nginx'](就像我在 Ruby 中一样),现在 Puppet 告诉我它找不到依赖项。

Kyl*_*ith 7

由于您的问题很有趣,因此进行了大量测试...

一段时间后找到了这篇文章:http : //www.mail-archive.com/puppet-users@googlegroups.com/msg08224.html

我同意海报,这是一个错误,或者至少设计得不好,但是如果您包含具有绝对范围 (::nginx) 的类,则可以为其设置一个要求,如下所示:

class jenkins::nginx{
  include ::nginx

  file{'/etc/nginx/sites-enabled/jenkins':
    source => ...,
    require => Class['::nginx'],
  }
}
Run Code Online (Sandbox Code Playgroud)