2017-04-19 43 views
0

我已經編寫了一個自定義資源sshd_allow_groups,它是動作更改了一些節點的屬性,並且這些屬性用於創建/etc/sshd_config的默認配方(託管自定義資源)的模板。但是,由於自定義資源通常是從其他食譜中調用的,因此我無法保證在對屬性進行更改後將調用模板資源,從而產生需要2個廚師運行來獲取希望的變化。CHEF:將資源設置爲在調用另一個(自定義)資源時結束運行一次

我正在尋找一種方法來觸發模板資源後資源被調用,並在最後運行(以防萬一資源被調用多次)。 notifies不起作用,因爲模板的操作不是:nothing,也不應該是,因爲如果對於某個不需要資源的節點,模板仍然需要寫入。

我的自定義資源:

resource_name :sshd_allow_groups 
property :group, String, name_property: true 

default_action :append 

action :append do 
    currently = node['tom-ssh']['allow_groups'] 
    if currently 
    if !currently.include?(group) 
     node.normal['tom-ssh']['allow_groups'] = currently | [group] 
    end 
    else 
    node.normal['tom-ssh']['allow_groups'] = [group] 
    end 
end 

action :remove do 
    currently = node['tom-ssh']['allow_groups'] 
    if currently && currently.include?(group) 
    node.normal['tom-ssh']['allow_groups'] = currently - [group] 
    end 
end 

另一個配方應該說是這樣的:

sshd_allow_groups "bob" do 
    action :append 
end 
+0

只是通知從您的自定義資源調用延遲,它將最終呈現模板兩次,但仍然在最後得到正確的文件。也就是說,除非您確切知道自己在做什麼,否則不要使用正常水平,否則當您希望從組中刪除某人時會發生意外。總而言之,這聽起來像一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),你要求修復一個無效的解決方案你真正的問題。 – Tensibai

+0

'通知'不起作用(我最終認爲我需要使用它來修復:http://stackoverflow.com/questions/21176576/how-to-i-get-a-chef-custom-lwrp-到實現 - 通知 - 和不-IF)。我真正想要發生的事情不是完全需要「通知」,所以資源本身會照顧(更乾的代碼)。爲什麼你認爲這是一個XY問題?你認爲我的X是什麼? –

+0

據我所知,你希望管理sshd_config文件。你在自定義資源和其他地方更新屬性和模板之間進行分割,如果目標是緩解屬性更新,然後去找一個輔助庫,它將在編譯時可用於每一本烹飪書,修復你的編譯vs收斂實際問題,其中屬性計算得太晚。 – Tensibai

回答

0

在你的食譜庫目錄,在helpers.rb文件(docblog post):

module Sshd_allow_groups 
    module Helpers 
    def append(group) 
     node.normal['tom-ssh']['allow_groups'] = node['tom-ssh']['allow_groups'] | [group] 
    end 

    def remove(group) 
     node.normal['tom-ssh']['allow_groups'] = node['tom-ssh']['allow_groups'] - [group] 
    end 
    end 
end 

在你的食譜中稱之爲:

Sshd_allow_group::Helpers.append("new_group") 

或者,如果你有絕對的把握(和這樣一個應該重命名的方法),你可以包括你的助手方法到配方DSL:

::Chef::Recipe.send(:include, sshd_allow_groups::Helpers) 

我已經簡化了一點你的代碼,因爲我感覺不到必要的額外檢查,如果tom-ssh屬性不存在,您可能仍然會引發異常。

即使您稍後刪除了一個添加組的配方,我也會嘗試脫離node.normal,因爲它保留在節點上。更多關於屬性的細節here

0

還不能評論,所以需要發佈作爲答案..只是一點點尼特,當我試圖遵循例子時,張百依給了答案。直接調用幫助程序方法將無法與模塊中定義的幫助程序方法一起使用。您需要製作append/remove方法類實例。在追加/刪除前添加self.。然後,這個調用將工作:

Sshd_allow_group::Helpers.append("new_group") 

或者你可以在一個類中定義的helper方法使用實例方法,或在課堂上使用的幫手。

相關問題