[英]Puppet: Making a custom function depend on a resource
我有一個Puppet定制函數,該函數返回有關OpenStack的Keystone身份服務中定義的用戶的信息。 用法大致如下:
$tenant_id = lookup_tenant_by_name($username, $password, "mytenant")
問題在於,該查詢中使用的憑據( $username
)應該由Puppet運行期間的另一個資源(來自puppet-keystone的Keystone_user
資源)創建。 據我所知,對lookup_tenant_by_name
函數的調用是在任何資源排序發生之前進行評估的,因為調用代碼中沒有大量的依賴關系能夠強制在執行此函數之前創建憑據。
通常,可以編寫自定義函數-或將其適當地放置在清單中-這樣,在實例化某些指定資源之后,Puppet才能執行它們?
簡短答案 :您不能使清單的行為取決於清單中聲明的資源。
長答案:解析器函數是在編譯階段調用的(如果使用一個,則在主機上調用,如果使用puppet apply
,則在代理上調用)。 在任何情況下,它都不會在同步任何資源之前運行,因為這將在編譯器完成所有工作(包括調用函數)之后發生。
要從代理計算機查詢信息,通常需要使用自定義事實 。 不過,即使在編譯器運行之前,這些變量也會被填充。
在這種情況下,最好的方法可能是使清單能夠容忍信息的缺失,這樣,取決於lookup_tenant_by_name
函數返回的值的任何事情都只會在該值可用的情況下進行評估。 這通常是在第二次木偶游戲中。
if $tenant_id == "" {
notify { "cannot yet find tenant $username": }
}
else {
# your code using the tenant ID
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.