我有这个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之间确实没有多少联系 - 你可以按任何顺序,甚至同时进行工作,一切都会有同样的效果.
这使我们能够以很多方式改善事物,"一切都按线性顺序"不会.例如,我们正在努力批处理程序包安装,同时仍然尊重程序包外部的显式依赖项.
因此,执行顺序和依赖关系遵循底层问题,并且我们保留了该属性以便能够执行更多令人敬畏的事情.
目标正是你最后所说的:你声明你想要的东西,我们会把所有细节都放在那里.我们希望能够更加智能地理解逻辑依赖关系,所以你必须说得更少.