【问题标题】:is it possible to Override manifest/class ordering from a profile or role?是否可以从配置文件或角色覆盖清单/类排序?
【发布时间】:2015-11-10 13:37:41
【问题描述】:

我有一个角色,它调用多个配置文件,以便使用包含和链接,如下所示:

class role::buildserver {
  contain ::profile::<all the classes below>
  Class['::profile::chocolatey'] ->
  Class['::profile::jdk'] ->
  Class['::profile::googlechrome'] ->
  Class['::profile::jenkins_install']
}

在我包含使用 jenkins 模块的 jenkins_install 配置文件之前,该链工作正常。无论我做什么,jenkins 模块总是首先被调用。模块本身包含它自己的围绕它的清单的锚定顺序,这似乎覆盖了我的角色。有没有办法从我的角色中覆盖 jenkins 模块排序?或者告诉 puppet 忽略它。

这是我的詹金斯个人资料

class profile::jenkins_install ( 
  $somevariables
)
  class{ '::jenkins':
    configure_firewall => false,
    cli                         => true,  
    plugin_hash           => $plugin_hash,
  } 
contain ::jenkins
}

这是我在尝试使用角色时遇到的错误:

(Anchor[jenkins::begin] => Class[Jenkins::Package] => Package[jenkins] => Class[Jenkins::Package] => Class[Jenkins::Config] => Class[Jenkins::Config] => Class[Jenkins::Plugins] => Jenkins::Windows::Plugin[jenkinswalldisplay] => 
Download_file[jenkinswalldisplay.hpi] => Class[Profile::Specflow] => Package[specflow] => Class[Profile::Specflow] => Class[Profile::Tortoisesvn] => Package[tortoisesvn] => Class[Profile::Tortoisesvn] => Class[Profile::Googlechrome] => Package[GoogleChrome] => Class[Profile::Googlechrome] => 
Class[Profile::Jenkins_install] => Class[Jenkins] => Anchor[jenkins::begin])

为什么它会先和最后运行 Jenkins?!我只能认为是使用锚的 puppet-labs jenkins 模块导致了这种情况。有没有办法覆盖他们的排序?

【问题讨论】:

  • 你能检查 jenkins::windows::plugin 和 download_file 类吗?他们有什么与配置文件或角色类相关的东西吗?我认为这些是您制作的自定义类。

标签: puppet


【解决方案1】:

模块本身包含它自己的围绕它的清单的锚定顺序,这似乎覆盖了我的角色 [...] 这是我在尝试使用角色时遇到的错误[循环依赖错误]

所以实际上问题在于您所包含的类没有覆盖在其他地方声明的任何应用程序顺序约束。

有没有办法从我的角色中覆盖 jenkins 模块排序?或者告诉 puppet 忽略它

不,这样做没有意义。如果您表达的应用程序顺序约束是真实且适当的,那么管理其他资源也不会使它们无效。

真正的问题似乎是您表达了不需要的约束,其中一些与其他地方表达的约束相冲突。请特别注意,需要拥有一个物理资源以使另一个物理资源有用并不一定意味着一个物理资源需要在另一个之前管理。特别是,我不清楚为什么类 role::buildserver 需要表达它所做的任何顺序约束。

为什么它会尝试先运行 Jenkins?

它没有。消息摘录描述了您放置的应用程序顺序要求如何形成一个循环。它可以用其中的任何资源作为起点和终点来等效地表示该循环。 Puppet 不应用任何参与循环的资源,因为它不能同时满足所有应用顺序约束。

导致循环的一些顺序约束似乎来自 ::jenkins 类和您命名的配置文件类,您都没有提出,所以我不能自信地提供具体的解决方案,但您应该看看了解如何通过消除不需要的约束来打破循环。您可能需要在多个地方使用多个约束条件来执行此操作。

【讨论】:

  • 在我上面的角色示例中,我试图保持简短,实际上省略了实际需要管理的资源,我现在意识到这是一个错误。在 Jenkins 之前确实需要有一对夫妇(jdk 和管理巧克力的一对)。但是,我认为您的观点是,我的不必要的限制可能是问题所在。我会花一些时间来解决这个问题,并会在之后更新
  • 删除/简化约束解决了我的问题。您最有帮助的评论是 puppet 表示循环“等同于其中的任何资源作为起点和终点”。这帮助我在别处寻找我的问题,而不是过多地关注 jenkins 模块。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多