Chef

Chef 12.5 自定義資源 - 訪問食譜中的資源

  • April 26, 2016

我正在編寫一本使用 Chef 12.5 中的自定義資源的食譜。我有一個使用模板資源的自定義資源,因此有一個重新載入相關服務的通知

但是,相關服務在主配方中進行管理。目前這失敗了,因為它抱怨沒有服務。

在以前的版本中,當使用 LWRP 時,這是由使用use_inline_resources引起的,我相信您可以通過不在 LWRP 中包含此功能來迴避這個特定問題。

現在我不在我的自定義資源中包含這一行,但行為存在。有什麼辦法可以關閉這種行為?

或者,是否有其他方式將服務“包含”在多個資源中,這樣我就不必在許多地方擁有完全相同的程式碼?

根據 delerious010 的回答,我自己和一位同事能夠針對這種特殊情況提出更好的解決方法:

action :create do
 global_nginx = resources('service[nginx]')

 template "/etc/nginx/conf.d/#{name.tr(' ', '_')}.conf" do
   cookbook 'nginx_server'
   source 'server_block.conf.erb'
   owner 'root'
   group 'root'
   mode '0644'
   variables(
     listen: listen,
     server_name: real_server_name,
     root: root,
     index: index,
     config: config
   )
   notifies :reload, global_nginx, :delayed
 end
end

顯然,這個範例只管理一個資源,但應該允許您擁有多個資源,並且只通知您想要的資源。

編輯:請注意,這依賴於Chef 開發人員將修復的錯誤( https://github.com/chef/chef/issues/4669 )。因為在 12.9.38 中對資源集合的搜尋是向上遞歸到外部 run_contexts,所以此程式碼仍然可以工作,但不再是必需的(並且將正確處理需要在根中獲取資源而不是獲取資源的多重嵌套子上下文只是父 run_context)。這裡最好的解決方案應該只是升級。

引用自:https://serverfault.com/questions/729013