木偶“要求”不按预期工作

时间:2014-06-26 14:35:25

标签: java maven puppet

我有以下两个清单:

class profile::maven inherits profile::base {
  # Hiera
  $version = hiera('profile::maven::version', '3.2.1')
  $settings = hiera_hash('profile::maven::settings', undef)
  $environments = hiera_hash('profile::maven::environments', undef)

  # Dependencies
  require '::profile::java'

  # Modules
  class { '::maven::maven':
    version => $version,
  }

  if ($settings) {
    create_resources('::maven::settings', $settings)
  }

  if ($environments) {
    create_resources('::maven::environments', $environments)
  }
}

class profile::java inherits profile::base {
  # Hiera
  $distribution = hiera('profile::java::distribution', 'jdk')
  $version = hiera('profile::java::version', 'present')

  # Modules
  class { '::java':
    distribution => $distribution,
    version      => $version,
  }

  # Parameters
  $java_home = $::java::java_home

  file { 'profile-script:java.sh':
    ensure  => present,
    path    => '/etc/profile.d/java.sh',
    content => template('profile/java.sh.erb'),
  }

}

我希望profile::java在执行profile::maven之前完全完成。

site.pp如下所示,不应修改以便以后遵守puppet的角色配置文件方法(正在进行中):

node 'gamma.localdomain' {
  include 'profile::java'
  include 'profile::maven'
} 

编译后,脚本从下载maven存档开始。为什么

require '::profile::java'

不确保执行顺序?有人知道如何实现理想的行为吗?

2 个答案:

答案 0 :(得分:1)

我认为这里的问题是require profile::java的范围是profile::maven类,因此后一类中声明的所有资源都取决于profile::java 。但是,这不会传播到profile::maven声明的类,例如maven::maven

要实现这一点,您可以在这些类之间建立依赖关系

include profile::java
include maven::maven

Class[profile::java] -> Class[maven::maven]

这可能会导致依赖图中出现相当大的复杂性,因此要小心谨慎。使用Anchor Pattern可以避免这种情况。

请注意,require函数的使用是discouraged due to possible dependency cycle issues

答案 1 :(得分:1)

至少从Puppet 3.5起,您可以使用" contain"确保profile :: java中的所有内容在profile :: maven之前完成。需要在profile :: java中添加以下内容:

class profile::java inherits profile::base {
  ...
  contain '::maven::maven'
  ...
}

回答这个旧的,已回答的问题,因为它首先出现在谷歌搜索"傀儡要求不起作用"