来自其他文件的其他类的木偶依赖

时间:2014-05-05 13:22:01

标签: puppet

我正在使用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"]
    ];
    }
}

为什么它会给我错误?

1 个答案:

答案 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有助于解决这些问题。