【问题标题】:Debugging puppet error : Could not find dependency调试人偶错误:找不到依赖项
【发布时间】:2023-03-19 13:50:02
【问题描述】:

背景

Puppet Newbie,试图在盒子上维护一些旧的 puppet 版本。目的是使用它的旧 plist 文件卸载旧程序并启动新程序。

问题

我在 .pp 文件中有以下代码

$old_launch_agent_path = "${home}/Library/LaunchAgents/com.company.program.plist"

exec {
  'stop-old-program':
  command => "/bin/launchctl unload ${old_launch_agent_path}",
  refreshonly => true,
  subscribe => [ File[$old_launch_agent_path] ];
}

Puppet 拒绝这样做:

错误:找不到依赖项 文件[/Users/execute/Library/LaunchAgents/com.company.program.plist] 对于 Exec [停止旧程序] 在 /private/tmp/mobile-puppet-manifests/puppet-manifests-test/modules/program/manifests/init.pp:51

更改在 git 分支上并正在应用 sudo puppet-apply -d -f -b mac-upgrade

ls -l /Users/executer/Library/LaunchAgents/com.company.program.plist`
-rw-r--r--  1 executer  staff  999 May 19 14:36 /Users/executer/Library/LaunchAgents/com.company.program.plist

【问题讨论】:

  • 您是否在该目录中声明了标题为 /Users/executer/Library/LaunchAgents/com.company.program.plistfile 资源?
  • 没有。我只是有变量声明,如图所示。
  • 如果你指定从一个资源到另一个资源的依赖映射,那么这两个资源都必须存在于编译目录中。

标签: macos puppet


【解决方案1】:

在 Puppet 中添加到您的心智模型中的几件事将帮助您思考这一点。 Puppet 目录是一个 DAG,有向无环图。您定义的每个资源(例如文件、包、服务等)都是该 DAG 中的一个节点。像 before、notify、subscribe 等元参数设置图中节点之间的关系。

您的错误意味着 Puppet 在目录中找不到资源 File['your file'] 以添加您定义的关系。通常的原因是你没有定义它。或者拼写错误,这是我最喜欢的错误。查看您的代码,您只是分配了一个变量,然后将其作为资源引用。

删除订阅是最简单的。或者您可以定义文件,除非您想更改文件的内容,我不会打扰。

【讨论】:

    【解决方案2】:

    我推断您已经指定了 Exec 的 subscribe 属性,因为它会导致 Exec 在指定文件发生更改的情况下运行(我猜是从最后一个 puppet apply 开始)。这表明对 Puppet 的信号模型存在相对普遍的误解。

    Puppet 不会跟踪之前运行时或之后的文件或其他资源的外观。它最多知道它们在当前运行期间某个时间点的样子,这是否是它们应该看起来的样子,以及它们是否(尚未)在当前运行期间进行了更新。 p>

    subscribe 元参数做了两件事:

    1. require 所做的相同:确保在检查、同步出现元参数的资源之前检查指定的资源,并在必要时同步(并在适用时刷新),或刷新。

    2. 如果指定的资源最初不同步并且 Puppet 成功同步了它,则会刷新出现元参数的资源。

    后者是 Puppet 文档在谈论一个资源被“更改”导致另一个资源被刷新时的意思。他们指的是被 Puppet 更改的资源,以使其同步。因此,尝试订阅不受 Puppet 管理的资源是没有意义的。 Puppet 永远无法更改这样的资源,至少不会让 Puppet 认识到发生了任何事情。

    在更专业的层面上,您用来表达订阅的句法结构File[$old_launch_agent_path] 是“资源引用”的一个示例。这些是指在同一目录中其他地方声明的资源,如果实际上没有声明这样的资源,它们是无效的。不考虑目标系统上是否存在相应的物理资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多