Puppet 中的资源引用传递

Puppet 中的资源引用传递

是否可以将 puppet 资源引用传递给其他资源?我的用例是使用 puppet 构建 jenkins 构建管道。要将 jenkins 作业链接到管道中,我需要将后续作业传递给作业。定义的子集是:

jobs::build { "Build ${release_name}":
  release           => $release_name,
  jenkins_jobs_path => $jenkins_jobs_path,
   successors        => 'Deploy',
}

jobs::deploy { "Deploy ${release_name}":
  release           => $release_name,
  jenkins_jobs_path => $jenkins_jobs_path,
  successors        => 'Smoke Test',
}

在 def 中,您会看到我按名称定义了后继者,即“Deploy”,对于第二项作业则为“Smoke Test”。我想要做的是传递对资源的引用并从中提取名称:

jobs::build { "Build ${release_name}":
  release           => $release_name,
  jenkins_jobs_path => $jenkins_jobs_path,
   successors       => Jobs::Deploy["Deploy ${release_name}"],
}

jobs::deploy { "Deploy ${release_name}":
  release           => $release_name,
  jenkins_jobs_path => $jenkins_jobs_path,
  successors        => Jobs::Smoke_test["Smoke Test ${release_name}"],
}

然后在 jobs::deploy 和 jobs::build 定义中,我将通过引用访问资源并查询其类型等。

在 Puppet 中可以实现这个吗?

答案1

successors是的,使用元参数代替before。Puppet 中的所有资源都允许使用四个参数来建立排序。 beforerequiresubscribenotify是四个关系元参数。 订阅和通知对于在资源导致另一个资源刷新时发出信号特别有用。

请参阅Puppet 语言指南了解更多信息。具体来说,关键字“排序”和“关系”应该可以帮助您找到解决此问题所需的信息。

答案2

如果我理解正确的话,该successors参数与 Puppet 的元参数无关before,而是用于定义 Jenkins 的工作关系。

话虽如此,但 Puppet 无法实现您所要求的功能。您无法从资源引用中查询值,即使您可以将它们作为参数传递给定义。

我认为你可以这样做:

jobs::build { "Build ${release_name}":
  release           => $release_name,
  jenkins_jobs_path => $jenkins_jobs_path,
  successors        => "Deploy ${release_name}",
}

或者使用标签和<| |>操作符。但这完全取决于定义的内容jobs::build和 Jenkins 所需的配置。

答案3

这听起来更像是一份工作集体比 Puppet 更适合。广义上讲,使用 Puppet 可以对状态进行建模,而使用 Mcollective 可以对活动进行建模。如果我正确理解了您的要求,编写一个 MCollective 代理来协调您的构建管道可能是更好的方法。Puppet 在这里帮不了您什么忙。

相关内容