[英]Update node tags from Chef LWRP
對於給定的用例,我需要通過自定義LWRP更新節點的標簽。 我嘗試了兩種方法:
使用“標簽” /“取消標簽”。 產生錯誤:
No resource or method named `tag' for ...
使用node[:tags].concat(<new_tags_array>)
。 此方法有效,但標簽不會持久存在,因此我無法將其用於搜索。
我在這里缺少什么嗎?
謝謝
編輯:實際上,問題是:甚至有可能從提供者那里更新節點屬性嗎?
EDIT2:因此,這正確設置了標簽:
tags = node[:tags]
tags.concat(new_tags)
node.override[:tags] = tags
但是,這些標簽會在每次廚師客戶端運行中重置,因此,如果在添加新標簽之前(第二次廚師客戶端運行中)檢查是否存在任何這些新標簽,則不會獲得任何標簽。
我發現了問題所在。
綜上所述:最初的問題是我無法在LWRP的提供程序中使用Chef的標記/取消標記方法(可能有這樣做的方法,但我沒有找到任何方法),因此我選擇了修改“標記”節點上的'屬性,其中包含所有標簽。
對於我來說,在廚師客戶運行之間保持標簽不變也很重要。
實現此目的的方法是將屬性類型設置為normal
,根據廚師文檔永遠不會重置該屬性類型:
在廚師客戶端運行開始時,將重置所有默認,覆蓋和自動屬性。 廚師客戶端使用廚師在客戶端運行開始時Ohai收集的數據以及在食譜,角色和環境中定義的屬性來重建它們。 普通屬性永遠不會重置。 然后根據屬性優先級將所有屬性合並並應用於節點。 Chef-Client運行結束時,所有默認,覆蓋和自動屬性都將消失,僅保留正常屬性的集合,這些屬性將持續到下一次Chef-Client運行。
這將使它:
tags = node[:tags]
tags.concat(new_tags)
node.normal[:tags] = tags
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.