2016-08-25 16 views
0

シェフを募集しており、ここで助けを求めています。 Chefを使用してChefノードサーバー(Windows Server 2012マシン)にビルドを展開する方法を検討しています。私はcopy_buildsと呼ばれる料理レシピを持っており、中央のリポジトリに行き、配備するビルドを選択し、ノードサーバーにコピーします。私が持っているレシピには、コピーステップを実行する基本的なステップが含まれています。このレシピは、ビルド名を除いて、展開したいすべてのビルドに使用できます。外部ソースからシェフレシピにパラメータを渡す方法

ここ

レシピの一例である:あなたが見ることができるように

powershell_script 'Copy build files' do 
    code ' 
    $Project = "Dev3_SomeCoolBuild" 
    net use "\\\\server\\build_share\\drop\\$Project" 
    $BuildNum = GC "\\\\server\\build_share\\drop\\$Project\\buildlabel.txt" 
    robocopy \\\\server\\build_share\\drop\\$Project\\bin W:\\binroot\\$BuildNum' 
end 

、変数$プロジェクトは、このレシピでは、ビルドの名前が含まれています。私たちが100種類の異なるビルドを持っていて、それぞれが異なる名前を持っているなら、copy_builds料理レシピに100種類のレシピを作成せずにこれを処理する最良の方法は何ですか?

ところで:

knife node run_list set $Node "recipe[copy_builds::$ProjectName],recipe[install_build]" 

このコマンドは、(外部PowerShellスクリプトから)プロジェクト/ビルドが含まれています。これは私が現在、シェフの外部だPowerShellスクリプトにある、展開するシェフを呼んでいることはどのようですその中の名前情報は$ ProjectName変数です。この場合、$ ProjectNameには、Dev3_SomeCoolBuild.rbというレシピを参照するための 'Dev3_SomeCoolBuild'という値が含まれています。

私が望むのは、copy_builds料理本の下に1つのデフォルトレシピがあり、ビルド/プロジェクト名を渡すことです。これは可能ですか?それを行う最善の方法は何ですか?データバッグ、属性、プロバイダについては読んだことがありますが、必要なものについてはうまくいくかどうかはわかりません。

お知らせください。

おかげで、 キース

答えて

0

あなたのための最良のアプローチはdatabagまたはノード属性(あるいはその両方)から展開するプロジェクトのリストを取得し、単一のレシピを使用する可能性があります。だから、基本的に今持っているものを取り出してループに入れ、どちらかの役割を使ってノード属性を設定するか、プロジェクトマッピングをデータバッグアイテムに入れます。

+0

上記のレシピで$ Project = "Data_Bag_Item"のようなものに変更した場合、それは既に外部のpowershellスクリプトからデータバッグを呼び出すにはどうすればいいですか?ナイフノードrun_list set $ Node "recipe [copy_builds :: $ ProjectName] install_build]」を選択します。このコマンドは変更できますか?追加のナイフコマンドを実行しますか?申し訳ありませんが、まだシェフにとって初めてです。 – Keith

+0

ちょうど始めるなら、私はこれをやってみません。必要に応じてレシピをコピーしてパスタします。 'data_bag_item'を使って作業することはChefのドキュメントの例がありますが、あなたがRubyを知らないのであれば、あなたは噛んでほしくないでしょう。 – coderanger

+0

私はRubyについてもっと学び、学ぶ気にしないので、data_bag_itemのドキュメントをチェックします。 – Keith

0

私は属性を使用して私の問題を解決しました。私はスクリプトを更新して、ビルド名をcopy_buildsレシピのattributes/default.rbファイルに書き出し、展開が実行されるたびにシェフにクックブックをアップロードしました。

私のレシピは、今では同じように、ビルド名を取得するためにファイルの属性への呼び出しが含まれています

powershell_script 'Copy build files' do 
    code <<-EOH 
    $BuildNum = GC \\\\hqfas302002c\\build_share\\drop\\"#{node['copy_builds']['build']}"\\buildlabel.txt 
    robocopy \\\\hqfas302002c\\build_share\\drop\\"#{node['copy_builds']['build']}"\\webbin W:\\binroot\\$BuildNum /E 
    EOH 
end 

そして今、シェフに私の呼び出しは次のようになります。私は変更するのであれば

knife node run_list set $Node "recipe[copy_builds],recipe[install_build]" 
関連する問題