1

我有几个类,它们遵循一个简单的结构,确保一个,修改一些配置文件,然后通知服务

因此,我想出了一种以简单方式为每个类应用依赖项的方法:

Package <| |> -> File <| |> ~> Service <| |>

但是,一旦一个类发生错误,它也会破坏所有其他类的依赖关系。显然,链式集合不适用于当前类范围,而是适用于全局范围。

有没有办法将它限制在当前班级?我不想回到手动指定每个资源的依赖关系!

如下图所示,所有服务都依赖于所有文件,而这些文件又依赖于所有包。

在未启用标签的情况下生成

- 编辑 -

我想出了使用标签的想法(一个类的资源可以方便地用类名标记),但它也不起作用 - 实际上它的功能就像类不存在一样(通过查看 puppet 依赖项进行验证后图形)

以下是我制作的示例测试清单:

class foo {
    package { 'php-fpm':
        ensure => present,
    }

    file { '/tmp/php-fpm.log':
        ensure => file,
        content => "test",
    }

    service { 'php-fpm':
        ensure => running,
    }

    Package <| tag == "foo" |> -> File <| tag == "foo" |> ~> Service <| tag == "foo" |>
}

class bar {
    package { 'nginx':
        ensure => present,
    }

    file { '/tmp/nginx.log':
        ensure => file,
        content => "test",
    }

    service { 'nginx':
        ensure => running,
    }

    Package <| tag == "bar" |> -> File <| tag == "bar" |> ~> Service <| tag == "bar" |>
}

include foo, bar

更奇怪的是,在下图中,标签基本上没有任何作用: 在启用标签的情况下生成

4

1 回答 1

1

标签不起作用的原因是puppet 中的一个缺陷,即在评估资源收集器之前不会应用自动标签。为了让它与标签一起工作,您实际上需要在每个资源上显式声明标签。

获得类似结果的另一种方法是启用Manifest Ordered Resources。这基本上按照它们在清单文件中的顺序执行资源,并将成为未来版本的 puppet 的默认行为。

于 2014-05-15T04:35:46.720 回答