木偶执行流程

Car*_*men 5 puppet

我有这个node.pp,我想知道puppet将如何执行它.

node 'agent.puppet.demo' {
    include ssh
    include postfix
    include mysql
    include apache
}
Run Code Online (Sandbox Code Playgroud)

在代理节点上,当我运行它时:

$ puppetd -t -d
Run Code Online (Sandbox Code Playgroud)

木偶没有顺序执行它意味着,它不首先执行ssh,然后是postfix,...

有人知道为什么吗?是因为它被称为"声明性语言",其执行顺序并不重要?

如果是这种情况,那么我可以以某种方式,声明我想要的东西,木偶会弄清楚如何执行它?

Dan*_*man 17

免责声明:我是Puppet的开发者之一.

它将以一致但不可预测的顺序执行它,但代码中的任何显式或隐式依赖项除外.显式依赖项是您使用subscribe或元参数指定的内容require.隐式依赖项来自自动查找功能,它可以按照合理的顺序自动应用文件资源.

这样做的原因并不是语言是声明性的,而是语言是声明性的,因为顺序对于底层问题空间中的大多数事情都无关紧要.

例如,对于大多数人来说,管理ssh和管理postfix之间确实没有多少联系 - 你可以按任何顺序,甚至同时进行工作,一切都会有同样的效果.

这使我们能够以很多方式改善事物,"一切都按线性顺序"不会.例如,我们正在努力批处理程序包安装,同时仍然尊重程序包外部的显式依赖项.

因此,执行顺序和依赖关系遵循底层问题,并且我们保留了该属性以便能够执行更多令人敬畏的事情.

目标正是你最后所说的:你声明你想要的东西,我们会把所有细节都放在那里.我们希望能够更加智能地理解逻辑依赖关系,所以你必须说得更少.

  • 你能否定义什么是*一致但不可预测的订单*?当Puppet 2.6重新订购步骤时,我们遇到了很多问题,并且由于某些缺少依赖性而导致失败.这是无法测试的.我可以强制某种洗牌,以便我们可以正确测试吗?我也听说新版本给它固定订单. (2认同)