在 Puppet 清单中使用“before”或“require”?

Ste*_*ett 4 puppet

好的,我刚刚开始学习 Puppet 并阅读文档。据我所见:

  • require做同样的事情before
  • subscribe做同样的事情notify

显然,这些是在依赖关系的相对两侧添加的,但你明白我的意思了。

从代码可读性和可维护性方面来看,使用(每对中的)一个比另一个更好吗?我应该同时使用两者以获得最大清晰度还是这会使维护变得麻烦?想法?

Fel*_*ank 5

任何一种变体都同样可以正常工作。但它们有一些具体用途。

  • 让意图更明确

例如

exec { "initialize-footool": require => Package["footool"] }
file { "/etc/default/footool": before => Exec["initialize-footool"] }
Run Code Online (Sandbox Code Playgroud)

阅读更多像英语一样的内容,而不仅仅是执行人员的要求。

  • 与不了解相关资源的其他资源建立关系

例如

include apache
exec { "apache2ctl graceful": require => Package[apache] } # package inside class apache
Run Code Online (Sandbox Code Playgroud)

但后者是非常糟糕的做法。我发现最明确的好处之一在于这些元参数能够针对整个类。

include apache
exec { "apache2ctl graceful": require => Class["apache"] }
file { "/etc/default/apache2": before => Class["apache"] }
Run Code Online (Sandbox Code Playgroud)

那些想要限制自己而require不是使用的人before 可以诉诸这种语法

class { "apache": require => File["/etc/default/apache2"] }
Run Code Online (Sandbox Code Playgroud)

不过,社区不鼓励使用 class {} 样式声明,因为

  • 它不能用于多次声明同一个类
  • include即使与同一类的语句混合使用,它也会带来解析顺序问题