Puppet 执行流程

标签 puppet

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

node 'agent.puppet.demo' {
    include ssh
    include postfix
    include mysql
    include apache
}

在代理节点上,当我运行它时:
$ puppetd -t -d

puppet 不是按顺序执行它的意思,它不会先执行 ssh,然后执行 postfix,...

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

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

最佳答案

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

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

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

例如,对于大多数人来说,管理 ssh 和管理 postfix 之间确实没有太多联系——您可以按任意顺序进行工作,甚至可以同时进行,一切都会一样。

这让我们可以自由地以多种方式改进事物,而“一切都处于线性顺序”则不然。例如,我们正在努力批量安装包,同时仍然尊重包外的显式依赖项。

因此,执行顺序和依赖关系遵循潜在的问题,我们保留了该属性以便能够做更多很棒的事情。

目标正是你最后所说的:你声明你想要什么,我们负责实现它的所有细节。随着时间的推移,我们希望在逻辑依赖方面变得更加聪明,所以你也不得不说得更少。

关于Puppet 执行流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523878/

相关文章:

postgresql - 如何使用 puppet 定义具有 SELECT 权限的用户?

puppet - 如何从一个 puppet 代理中使用多个不同的 puppet 师?

arrays - 在 Puppet 中循环数组

puppet: 为什么没有创建文件资源?

来自其他文件中其他类的 puppet 依赖性

java - 应用配置管理工具

ssl - Puppet:无法从远程服务器检索目录

ruby - puppet-lint 忽略 ignore_paths 选项

coding-style - Puppet:如果> 80 个字符,我如何将命令包装成两行?

puppet - 难道真的没有简单的方法来在远程机器上测试 puppet 脚本吗?