我有这个node.pp,我想知道puppet将如何执行它。
node 'agent.puppet.demo' {
include ssh
include postfix
include mysql
include apache
}在代理节点上,当我运行以下命令时:
$ puppetd -t -d傀儡不会按顺序执行它,这意味着它不会先执行ssh,然后是后缀,...
有人知道这是为什么吗?是不是因为它被称为“声明性语言”,执行的顺序并不重要?
如果是这样的话,我可以以某种方式声明我想要的东西,然后puppet会想出如何执行它?
发布于 2012-03-02 05:33:04
免责声明:我是Puppet的开发者之一。
它将以一致但不可预测的顺序执行它,但代码中的任何显式或隐式依赖项除外。显式依赖关系是使用subscribe或require元参数指定的内容。隐式依赖项来自自动请求功能,该功能可以按照合理的顺序自动应用文件资源。
这样做的原因并不是因为语言是声明性的,而是因为在底层问题空间中,顺序对大多数事情都不重要。
例如,对于大多数人来说,管理ssh和管理postfix之间确实没有太多联系--您可以按任意顺序,甚至同时完成这项工作,一切都一样。
这样我们就可以在很多方面进行改进,而“一切都是线性的”是无法做到的。例如,我们正在努力批量安装包,同时仍然尊重包外的显式依赖关系。
因此,执行顺序和依赖关系遵循潜在的问题,我们保留了该属性,以便能够做更多令人惊叹的事情。
目标就是你在结束时所说的:你声明你想要的东西,我们负责实现它的所有细节。随着时间的推移,我们希望在逻辑依赖方面变得更聪明,所以你也必须说得更少才能做到这一点。
发布于 2012-03-02 06:10:13
免责声明:我仍然是木偶的新手:)
关键是要从依赖关系的角度来考虑所有事情。对于类依赖,我喜欢使用类a‘->类’b‘语法。假设您有一个tomcat类,它需要一个从oracle下载/安装sun jdk的jdk类。在您的tomcat类中,您可以使用
类“‘jdk”->类“’tomcat”
或者,您可以使用一个必需的元参数声明一个类,而不是使用include。
https://stackoverflow.com/questions/9523878
复制相似问题