如何解释 Puppet 中的依赖周期?

How do I interpret dependency cycles in puppet?

我有一个木偶程序,我试图在其中使用阶段来更好地管理时间,但是当我尝试这样做时,没有任何反应。然后我尝试只使用依赖链,但这会返回此错误:

Error: Could not apply complete catalog: Found 1 dependency cycle:
(Anchor[apt::ppa::ppa:saltstack/salt] => Apt::Ppa[ppa:saltstack/salt] => class[Pp_package_manager] => Class[User_manager] => User_manager::User[coder] => User[coder] => File[/etc/default/perfectpitch] => Class[Pp_package_manager])

我试图理解这个错误告诉我的是什么,但是 => 标志让我很困惑。我还尝试使用 --graph 标志打开 .dot 文件,但这也让我感到困惑。我想要一个 guiedhttps://gist.github.com/supereman16/1ff46d6fbb1c7ac9b709.

我希望获得有关如何解释这些内容的指南,并可能对问题的实际位置提供一些帮助。非常感谢任何帮助帮助我理解这个错误,以及我应该采取什么步骤来找到问题并解决它。提前致谢!

请阅读这篇关于 relations and ordering 在 puppet 中的文章。

综上所述。 Puppet 是一种声明性语言,您可以在其中描述系统的理想状态(而不是如何实现)。因此,当它编译清单代码到目录时,它会尝试建立实现资源达到所需状态的顺序(它会创建依赖关系图)。

例如,除非安装 mysql 软件包,否则无法 运行 mysql 服务器。

通常 puppet 会正确解决资源之间的关系。但有时它需要帮助。对于每个资源,您可以使用 before, require, notify, subscribe 元参数手动定义其他资源之间的关系。不幸的是,使用这些元参数你可以很容易地创建一个依赖循环。

例如

file { a: require => File['b'] }
file { b: require => File['c'] }
file { c: require => File['a'] }

这样的资源声明将创建一个依赖循环,导致类似于您所遇到的编译错误。

根据您提供的消息,a => b 表示在资源 b 之前执行资源 a。 你得到了一个依赖循环:...=> class[Pp_package_manager] => ... Class[Pp_package_manager]。 我猜你已经定义了关系 File[/etc/default/perfectpitch] => Class[Pp_package_manager]class[Pp_package_manager] => Class[User_manager] ,这会导致错误。