gpt4 book ai didi

ruby - Puppet:使自定义函数依赖于资源

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:04 27 4
gpt4 key购买 nike

我有一个 Puppet 自定义函数,它返回有关在 OpenStack 的 Keystone 身份服务中定义的用户的信息。用法类似于:

$tenant_id = lookup_tenant_by_name($username, $password, "mytenant")

问题在于此查询中使用的凭据 ($username) 应该在 Puppet 运行期间由另一个资源创建(来自 puppet-keystoneKeystone_user 资源) .据我所知,对 lookup_tenant_by_name 函数的调用是在任何资源排序发生之前进行评估的,因为调用代码中没有多少依赖项能够强制在此之前创建凭据正在执行的功能。

一般来说,可以编写自定义函数——或者将它们适本地放在 list 中——这样它们在某些指定资源被实例化之前不会被 Puppet 执行?

最佳答案

简短回答:您不能使 list 的行为依赖于其中声明的资源。

长答案:解析器函数在编译阶段被调用(如果您使用一个,则在主机上调用,如果您使用puppet apply,则在代理上调用)。在任何情况下,它都不能在同步任何资源之前运行,因为这将在编译器完成所有工作(包括调用您的函数)之后发生。

从代理机查询信息,一般要用custom facts .不过,即使在编译器运行之前,这些也会被填充。

在这种情况下,最好的方法可能是让 list 容忍信息的缺失,这样任何依赖于 lookup_tenant_by_name 函数返回值的东西都只会在该值是可用的。这通常发生在第二次 Puppet 运行期间。

if $tenant_id == "" {
notify { "cannot yet find tenant $username": }
}
else {
# your code using the tenant ID
}

关于ruby - Puppet:使自定义函数依赖于资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com