我有一个木偶程序,我试图使用阶段来更好地管理计时,但是当我尝试这样做时,没有任何反应。然后我尝试使用依赖链,但这会抛出这个错误:
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。
我喜欢有关如何解释这些问题的指南,并且可能会帮助解决实际问题。任何帮助将非常感谢帮助我理解这个错误,以及我应该采取的步骤来找到问题并解决它。提前谢谢!
答案 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]
,这会导致错误。