是否可以从配置文件或角色覆盖清单/类排序?

时间:2015-11-10 13:37:42

标签: puppet

我有一个角色,按顺序使用包含和链接调用多个配置文件:

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模块排序?或告诉傀儡忽略它。

这是我的jenkins个人资料

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模块导致了这个问题。有没有办法覆盖他们的订单?

1 个答案:

答案 0 :(得分:1)

  

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

所以实际上问题是你所包含的类不会覆盖在别处声明的任何应用程序顺序限制。

  

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

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

真正的问题似乎是你表达了不必要的约束,其中一些与其他地方表达的约束相冲突。特别要注意的是,需要拥有一个物理资源才能使另一个物理资源有用并不一定意味着需要在另一个之前管理。特别是,对我来说,为什么类role::buildserver需要表达任何的订单约束,这一点并不明显。

  

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

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

对循环有贡献的一些顺序约束似乎来自类::jenkins和来自您已命名的概要类,您没有提供过,所以我无法自信地提供特定的解决方案,但是您应该通过删除不需要的约束来寻找如何打破循环。可能需要在几个地方使用几个约束来执行此操作。