如何解释puppet中的依赖循环?

如何解释puppet中的依赖循环?,puppet,apt,Puppet,Apt,我有一个傀儡程序,我正在尝试使用阶段来更好地管理时间,但当我尝试时,什么都没有发生。然后我尝试只使用依赖项链,但这会抛出以下错误: 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[

我有一个傀儡程序,我正在尝试使用阶段来更好地管理时间,但当我尝试时,什么都没有发生。然后我尝试只使用依赖项链,但这会抛出以下错误:

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.


我想要一个关于如何解释这些的指南,可能还有一些关于问题实际所在的帮助。如果您能帮助我理解这个错误,以及我应该采取的步骤来发现问题并解决问题,我们将不胜感激。提前谢谢

请阅读这篇关于木偶的文章

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

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

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

例如

这样的资源声明将创建一个依赖循环,导致编译错误,与您所拥有的类似

在您提供的消息中,
a=>b
表示在资源
b
之前执行资源
a
。 您得到了一个依赖循环:
…=>class[Pp\u package\u manager]=>。。。类[Pp\U包\U管理器]

我猜您已经定义了关系
File[/etc/default/perfectpitch]=>Class[Pp\u package\u manager]
Class[Pp\u package\u manager]=>Class[User\u manager]
,这会导致错误。

您是对的。我刚换了pp_包管理器和用户管理器,它工作了。。。某种程度上。现在它根本就没有运行。看到这个问题了吗-
file { a: require => File['b'] }
file { b: require => File['c'] }
file { c: require => File['a'] }