我有几个课程,它遵循确保包的简单结构,修改一些配置文件,然后通知服务。< / p>
因此,我想出了一种方法,以简单的方式为每个类应用依赖项:
Package <| |> -> File <| |> ~> Service <| |>
但是,一旦在一个类中发生错误,它也会破坏所有其他类的依赖性。显然,链式集合不适用于当前的类范围,而是适用于全局范围。
有没有办法将它限制在当前的班级?我不想再回到每个资源手动指定依赖项了!
如下图所示,所有服务都依赖于所有文件,而这些文件又取决于所有软件包。
- 编辑 -
我提出了使用标签的想法(一个类'资源很方便地使用类名标记),但是它也没有用 - 实际上它的功能就好像类不存在一样(通过查看验证后)木偶依赖图)
以下是我制作的示例测试清单:
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
更奇怪的是,在下图中,标签基本上没有效果:
答案 0 :(得分:1)
标记不起作用的原因是defect in puppet,在评估资源收集器之前,不会应用自动标记。为了使其与标记一起使用,您实际上需要在每个资源上显式声明标记。
另一种可以获得类似功能的方法是启用Manifest Ordered Resources。这基本上按照它们在清单文件中的顺序执行资源,并且将是未来版本的puppet中的默认行为。