以什么顺序将资源映射到数组中,以便执行诸如 require、subscribe、before 和 notify 之类的属性?此外,执行时,它会一次获取所有资源并并行运行还是同步运行?
例如,
exec { 'A': }
exec { 'B': }
exec { 'C': }
exec { 'D': require=>[ Exec['A'], Exec['B'], Exec['C'] ]}
Exec['D']
取决于Exec[A],
Exec[B]
和Exec[C]
。当Exec[D]
有机会执行时,流程会如何?
A、B 和 C 以任何顺序并行运行?
或者
首先是 A,然后是 B,最后是 C。按顺序运行,但没有任何资源等待前一个资源完成?
或者
首先是 A,然后是 B,但要等待 A 完成后才能开始,最后是 C,但要等待 B 完成后
答案1
首先:Puppet 不会并行运行任何内容。
它完全是顺序运行的。
始终只有一个资源被应用,下一个资源将始终等待前一个资源完成。
第二:顺序取决于一些因素。Puppet
3 和 4 之间的行为有所变化。
您应该查看适用于您版本的此文档页面:
https://docs.puppet.com/puppet/4.7/reference/lang_relationships.html
更具体地说,在这个选项中:
https://docs.puppet.com/puppet/latest/reference/configuration.html#ordering
在过去(Puppet 3.x)中,此项设置为title-hash
。
这意味着 A、B 和 C 以随机(连续)顺序运行,然后 D 运行。
manifest
从 Puppet 4.x 开始,现在默认设置为此。
在您的例子中,将首先运行 A,然后运行 B,然后运行 C,然后运行 D。