我有一个厨师资源需要返回一个版本。我查找并资助了将其发布为节点属性的最佳方式。以下是资源代码(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']}"
我用一个值在 default.rb 中创建 default['artifact']['snapshot']['latest'],但即使在我运行配方后,旧值也不会改变。有趣的是,当我在我的资源中打印相同的内容时,它会打印具有新值的节点。
我做错了什么,有没有更好的方法来使用您自己的资源发布值?
Chef 资源没有返回值或输出值。您更具体地遇到的问题是 Chef 是一个双通道系统,因此p
调用在资源操作发生之前发生。您可能需要完全重新考虑此代码。 get_version
可能应该是一个库帮助程序方法,而不是一个资源,但如果不看到其余代码,很难说。