如何解释 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]
,这会导致错误。
我有一个木偶程序,我试图在其中使用阶段来更好地管理时间,但是当我尝试这样做时,没有任何反应。然后我尝试只使用依赖链,但这会返回此错误:
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]
,这会导致错误。