我的代码类似于以下内容:
class someclass($ensure = installed)
{
if($ensure == installed)
{
$installValue = installed
file { "someprogram.msi":
ensure => file,
source => 'somewhere',
path => 'C:/puppet-files/someprogram.msi',
}
}
else
{
$installValue = absent
}
package{ "someprogram":
ensure => $installValue,
source => 'C:/puppet-files/someprogram.msi',
}
}
包含文件资源的if语句是否确保在包资源之前应用文件资源?或者我是否需要在元参数中明确说明这一点?另外,我假设在安装软件包之前总会设置$ installValue,这是正确的吗?
谢谢,
Derongan
答案 0 :(得分:4)
您应该明确指定顺序,但变量将正确初始化。
Puppet 3中的资源排序是确定性的,但基本上是随机的,因为它基于资源标题的散列。在Puppet 3.3中,此行为可以更改为清单顺序(release notes),但我不建议依赖于此 - 当然如果您共享模块,则无法保证其他人使用相同的设置。
由于文件资源可能不存在(如果确保=>缺席),则无法在包资源上指定关系。而是将before => Package['someprogram'],
添加到文件资源。