我正在使用 puppet 在云基础设施上自动配置服务器。 我将 list 分成几个 .pp。
我有以下错误:
Could not find dependency Mehc_module::Filestructure::File[/someFolder/someSubFolder]
相关部分:
文件结构.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"];
}
包.pp
class mehc_module::packages{
require mehc_module::filestructure
...
mehc_repo::package { "${common11rpm}" :
ensure => present,
require => [
Mehc_module::Filestructure::File["/someFolder/someSubFolder"]
];
}
}
为什么会出现错误?
最佳答案
您的资源引用结构不正确。你只是想
require => File["/someFolder/someSubFolder"]
资源引用不考虑 list 上下文。即使他们愿意,资源的“完整路径”也将是 Class[mehc_module::filestructure]/File["/someFolder/someSubFolder"]
。但这也行不通。
平原File["/someFolder/someSubFolder"]
引用就足够了,因为每个资源在整个 list (包括所有模块)中只能定义一次。
请注意,通常更好的做法是
require => Class["mehc_module::filestructure"]
因为这将暗示上述关系(“依赖于类中声明的所有资源”),而不绑定(bind) mehc_module::packages
的实现到 mehc_module::filestructure
的实现细节。
此规则的一个值得注意的异常(exception)是您所依赖的类声明大量资源的情况,从而导致图形复杂性(具有性能影响),并增加依赖循环的危险。 Anchor Pattern帮助处理这些情况。
关于来自其他文件中其他类的 puppet 依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23473599/