2016-07-14 10 views
0

バージョンを返す必要があるシェフリソースがあります。私はルックアップし、ノード属性として公開する最良の方法に資金を提供します。ここでは、リソース・コードは(dj_artifactory_version)です:ノード属性を作成する/シェフのカスタムリソースに戻り値

require "open-uri" 
require "json" 


def whyrun_supported? 
    true 
end 

def get_version(name, user, pass, type, organization, art_module, repos, version) 
    if (type.match(/snapshot$/i) and version.match(/latest$/i)) 
    string_object = open("https://artifactory.io/artifactory/api/search/versions?g=#{organization}&v=*.*.*&a=#{art_module}&repos=#{repos}", :http_basic_authentication=>["#{user}", "#{pass}"], :ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE) 
    json_file = JSON.parse(string_object.read) 
    version_array = Array.new 
    json_file["results"].each do |version| 
     version_array.push(version["version"]) 
    end 
    unique_versions=(version_array.uniq).max 
    node.set['artifact']['snapshot']['latest'] = unique_versions 

は今、私はバージョンを取得するために私のレシピにこのシェフのリソースを使用します。

dj_artifactory_version "test" do 
    type "snapshot" # options - snapshot/release 
    organization "djcm.billing.api.admin" # layout.organization in artifactory properties. 
    modules "paypal" # layout.properties in artifactory properties. 
    repos "djcm-zip-local" # repository name in artifactory 
    version "latest" #latest/oldest 
end 

p "#node{['artifact']['snapshot']['latest']}" 

私はデフォルトの[「アーティファクト」] [「スナップショット」]を作成します['latest'] default.rbに値を設定しますが、レシピを実行しても古い値は変更されません。興味深いことに、自分のリソースに同じものを印刷すると、新しい値でノードが印刷されます。

私は間違っていますが、あなた自身のリソースを使用して価値を公開するより良い方法はありますか?

答えて

1

シェフのリソースには、戻り値または出力値がありません。より具体的には、シェフは2パスシステムなので、リソースが発生する前にpコールが発生しているという問題があります。おそらく、このコードを完全に再考する必要があります。 get_versionは、リソースではなく、おそらくライブラリヘルパーメソッドでなければなりませんが、残りのコードを見ずに言うのは難しいです。

+0

それは働いた。それは収束対コンパイル時の問題の単なる問題でした。収束時間にノード属性を設定したので、lazy {}を使用してアクセスすることができます。 – Scooby

関連する問題