如何解释木偶中的依赖循环?

时间:2015-07-06 19:33:09

标签: 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[User_manager] => User_manager::User[coder] => User[coder] => File[/etc/default/perfectpitch] => Class[Pp_package_manager])

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

我喜欢有关如何解释这些问题的指南,并且可能会帮助解决实际问题。任何帮助将非常感谢帮助我理解这个错误,以及我应该采取的步骤来找到问题并解决它。提前谢谢!

1 个答案:

答案 0 :(得分:2)

请在傀儡中阅读有关relations and ordering的文章。

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

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

一般来说,木偶可以很好地解决资源之间的关系。但有时它需要帮助。对于每个资源,您可以使用def index(conn, _) do subjects = from(s in Subject, select: %{id: s.id, name: s.name}) |> Repo.all conn |> render subjects: subjects end 元参数手动定义其他资源之间的关系。不幸的是,使用这些元参数可以轻松创建依赖循环。

E.g

before, require, notify, subscribe

此类资源声明将创建一个依赖项循环,导致编译错误类似于您所拥有的。

您提供的消息file { a: require => File['b'] } file { b: require => File['c'] } file { c: require => File['a'] } 表示在资源a => b之前执行资源a。 你有一个依赖循环:b。 我猜你定义了关系...=> class[Pp_package_manager] => ... Class[Pp_package_manager]File[/etc/default/perfectpitch] => Class[Pp_package_manager],这会导致错误。

相关问题