2015-05-19 232 views
0

我有一本食譜「blah-deploy-nodejs-from-git」食譜,它從GIT安裝nodejs代碼庫,並在目錄上調用NPM安裝。它具有以下屬性廚師包裝食譜一次只應用內部食譜

git_repo 
branch 
destination 

然後我寫了換行cookook爲inidividual網站,即可安裝需要的食譜。在這種particar情況下,「嗒嗒定價」和「嗒嗒的通知」,它有不同的壓倒一切的屬性:

[email protected] cat cookbooks/blah-svc-pricing/attributes/default.rb 
    node.override[:blah_deploy_nodejs_from_git][:destination] = "/var/blah/pricing" 
    node.override[:blah_deploy_nodejs_from_git][:branch] = "master" 
    node.override[:blah_deploy_nodejs_from_git][:git_repo] = "https://hqdevgit01.blah.lan/micro-services/blah-pricing.git" 

[email protected]:~/chef-repo$ cat cookbooks/blah-svc-notifications/attributes/default.rb 
    node.override[:blah_deploy_nodejs_from_git][:destination] = "/var/blah/notifications" 
    node.override[:blah_deploy_nodejs_from_git][:branch] = "master" 
    node.override[:blah_deploy_nodejs_from_git][:git_repo] = "https://hqdevgit01.blah.lan/micro-services/blah-notifications.git" 

然後配方是在兩種情況下是相同的:

include_recipe 'blah-deploy-nodejs-from-git' 

不幸的是,正在申請即使我的節點同時應用了烹飪書,內部食譜也只有一次。我的理解是,包裝食譜用於定製食譜並使其獨特。

可以將內部烹飪書封裝成兩種不同的烹飪書,具有不同的屬性,並且包裝烹飪書都應用這種內部烹飪方法嗎?或者我將不得不完全複製內部食譜中的代碼?

+0

你能提供你用來調用這個的代碼嗎?它是否在角色的運行列表中?你是否手動打電話給他們? –

+0

包裝食譜都與角色關聯,並且這兩個角色都與單個節點相關聯。 – akaphenom

+0

您是否驗證過這兩個角色正在執行?你可以嘗試的是將這兩個配方放在一個角色的運行列表中,看看它是否能夠滿足你的需求。我沒有在單個節點上完成多個角色,所以我不知道這是否是共享食譜的問題。 –

回答

0

這是由於對廚師工作原理的基本誤解。食譜並不意味着如何做某件事的程序,它們是爲了表明某件事物應該是什麼樣子。因此,您需要將它們視爲描述最終狀態,而不是實現目標的過程。

因此,廚師永遠不會運行一個配方兩次。而且屬性真的不應該在中途改變(除非它們被更新以表示中途發生的事情)幸運的是,還有其他的廚師功能可以解決你的問題,你需要一個定義或者LWRP(輕量資源提供者)

定義只是組資源,常常重複。所以,你可以創建一個定義,然後再多次調用它在相同的配方具有不同的屬性。就像你現在用你的食譜做什麼。

雖然定義有時是合適的,但是LWRP通常更強大,並且已經成爲Chef中對於大多數重複(類庫)任務的首選方法。使用LWRP,您將定義一個新的廚師原型(很像文件,服務等),並且t母雞編寫完成該原語目標的代碼。然後,您可以在食譜中的任何地方使用這些資源。在你的情況下,你將擁有一個npm_deployer資源,它擁有repo,branch和destination的屬性。然後它會完成當前在您的部署者配方中的工作。你的「包裝器」食譜會停止調用include_recipe,而只是聲明一個npm_deploy資源並傳遞所需的屬性。

+0

謝謝你。我花了一點時間才能回到這個項目,但是ytour的評論提供了一些有用的見解 – akaphenom