我有以下两个清单:
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'
不确保执行顺序?有人知道如何实现理想的行为吗?
答案 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'
...
}
回答这个旧的,已回答的问题,因为它首先出现在谷歌搜索"傀儡要求不起作用"