2016-07-14 2 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

Ресурсы шеф-повара не имеют возвратных или выходных значений. Проблема, с которой вы сталкиваетесь более конкретно, заключается в том, что Chef представляет собой двухпроходную систему, поэтому вызов p происходит до того, как действие ресурса произойдет. Вероятно, вам нужно полностью пересмотреть этот код. get_version, вероятно, должен быть вспомогательным методом библиотеки, а не ресурсом, но трудно сказать, не видя остальную часть кода.

+0

Это сработало. Это была просто проблема слияния и компиляции. Поскольку я устанавливаю атрибут узла во время схождения, его можно получить с помощью ленивого {} – Scooby