我對廚師和我做的概念驗證嘗試使用它來構建Web服務器時相對陌生。由於這個問題超出範圍的原因,我將創建多個Apache實例,我可能想同時創建和「刪除」。同樣的問題可能真的適用於在單個Apache實例中創建和刪除虛擬主機配置。與廚師一起刪除配置項目
我目前正在使用chef-client基於此節點的已定義屬性創建所有的Apache實例。因此,例如,我可能具有定義Instance1
,Instance2
和Instance3
的屬性。這一切在這一點上都工作得很好。實例目錄獲取創建像這樣:
/opt/local/apache/Instance1/stuff
/opt/local/apache/Instance2/stuff
/opt/local/apache/Instance3/stuff
內容目錄和服務得到相同的instancename
標識符創建。
問題來了,如果我想從該節點的屬性中刪除Instance3
。我的廚師 - 客戶端運行將確保Instance1
& Instance2
配置正確,但Instance3
將繼續作爲廚師客戶現在一無所知。
我明白在一個理想的世界裏,你可能只是用新的配置啓動一臺新機器,而這個問題甚至都沒有擡頭。但是,我需要在無法重新配置的服務器上執行此操作(這只是在現有服務器上配置Apache的POC)。
我可以「刪除並重新創建」,但這聽起來對我來說不是冪等的。首先,文件時間戳會有所不同。即使沒有任何東西要做,廚師客戶做這些事情似乎也是錯誤的。
我自己想出了一個解決方案。在上面的示例中,我將在Ruby中獲取所有實例名稱的列表,包括/opt/local/apache/
,迭代它們並刪除實例,如果它不是在屬性中定義的實例。我把它放在一個單獨的配方中,我稱之爲cleanup.rb
。如果我在主要安裝配方之後運行此操作,並且沒有刪除配置,則它不會執行任何操作,因此似乎可以安全運行。
這很好,但它似乎hacky我擔心這可能是一種反模式。從概念上講,我是以正確的方式去做還是應該做一些與衆不同的事情?在你的食譜中使用自定義的Ruby代碼來做這樣的事情是否被認爲是正常和正確的?
謝謝coderanger。我檢查了Zap,我必須明確地'遍歷文件夾(Apache服務器目錄,內容目錄,systemd單元文件,並在需要的時候也切換運行的服務......)。我已經走了上面的方法。它似乎運作良好。感謝您的建議! – Tom17