我正在使用puppet在云基础架构上自动配置服务器。 我把我的清单分成了几个.pp's。
我有以下错误:
无法找到依赖项Mehc_module :: Filestructure :: File [/ someFolder / someSubFolder]
相关部分:
filestructure.pp
class mehc_module::filestructure{
file {
"/someFolder/someSubFolder":
ensure => link,
owner => $mehc_module::users::WEBLOGIC_UID,
group => $mehc_module::users::WEBLOGIC_GID,
target => "/opt/user_projects",
require => UserDefinedFolder["/someFolder"];
}
packages.pp
class mehc_module::packages{
require mehc_module::filestructure
...
mehc_repo::package { "${common11rpm}" :
ensure => present,
require => [
Mehc_module::Filestructure::File["/someFolder/someSubFolder"]
];
}
}
为什么它会给我错误?
答案 0 :(得分:8)
您的资源引用格式不正确。你只想
require => File["/someFolder/someSubFolder"]
资源引用不会考虑清单上下文。即使他们愿意,也可以通过"完整路径"资源将是Class[mehc_module::filestructure]/File["/someFolder/someSubFolder"]
。但那也行不通。
普通File["/someFolder/someSubFolder"]
引用就足够了,因为每个资源只能在整个清单中定义一次(包括所有模块)。
请注意,
通常是更好的做法require => Class["mehc_module::filestructure"]
因为这将意味着上述关系("取决于类中声明的所有资源")而不将mehc_module::packages
的实现与mehc_module::filestructure
的实现细节联系起来。
此规则的一个值得注意的例外是,您依赖的类声明了大量资源,从而导致图形复杂性(具有性能影响),以及依赖循环的危险性增加。 Anchor Pattern有助于解决这些问题。