将链式收集器限制为当前类

时间:2013-11-05 03:38:12

标签: puppet

我有几个课程,它遵循确保的简单结构,修改一些配置文件,然后通知服务。< / p>

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

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

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

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

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

Generated without tags enabled

- 编辑 -

我提出了使用标签的想法(一个类'资源很方便地使用类名标记),但是它也没有用 - 实际上它的功能就好像类不存在一样(通过查看验证后)木偶依赖图)

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

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

更奇怪的是,在下图中,标签基本上没有效果: Generated with tags enabled

1 个答案:

答案 0 :(得分:1)

标记不起作用的原因是defect in puppet,在评估资源收集器之前,不会应用自动标记。为了使其与标记一起使用,您实际上需要在每个资源上显式声明标记。

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