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

如何在包含类时打破 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'],
  }
}

但是当我运行这个时,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

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

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

答案1

由于你的问题很有趣,所以做了大量测试......

过了一段时间发现了这个帖子: http://www.mail-archive.com/[电子邮件保护]/msg08224.html

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

class jenkins::nginx{
  include ::nginx

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

答案2

包含前缀吗?

包括主要:nginx

相关内容