来自其他文件中其他类的 puppet 依赖性

标签 puppet

我正在使用 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/

相关文章:

linux - 在 puppet 中管理 linux 的用户密码

puppet - "::mysql::server"和 "mysql::server"之间的区别

linux - 我可以使用 puppet 停止 Linux 服务器上的服务吗?

puppet - 在 Puppet 中声明数组元素之间的依赖关系

java - build.properties 在 puppet 中等效吗?

json - 在 Puppet 中解析 JSON 字符串

vagrant - vagrant 会自动安装 puppet 吗?

Puppet 编写一个在查找成功时运行的命令?

vagrant - 如何使用 puppet 为不同用户设置自定义 bash 环境?

ruby - 除非目录存在于 puppet 中,否则执行命令