我正在研究自定义厨师食谱,并且default["server"]["apikey"] = nil
在一个单独的属性文件(如下所示)中定义了一个名为thats的自定义属性,该属性已在食谱中定义:
#Default Attributes
default["webhooks"]["get_response"] = ""
default["webhooks"]["put_response"] = ""
default["webhooks"]["post_response"] = ""
default["server"]["username"] = "user"
default["server"]["password"] = "123"
default["server"]["apikey"] = nil
然后在我的食谱中执行以下操作:
webhooks_request "Request an API key from TPP " do
uri "172.16.28.200/sdk/authorize/"
post_data (
{ 'Username' => node["server"]["username"], 'Password' => node["server"]["password"]}
)
header_data (
{ 'content-type' => 'application/json'}
)
expected_response_codes [ 200, 201, 400 ]
action :post
end
然后ruby_block
,我接下来用API密钥更新``default [“ server”] [“ apikey”]`属性的值,如下所示:
ruby_block "Extract the API Key" do
block do
jsonData = JSON.parse(node["webhooks"]["post_response"])
jsonData.each do | k, v |
if k == 'APIKey'
node.overide["server"]["apikey"] = v
end
end
end
action :run
end
然后,我可以使用以下方法进行验证:
ruby_block "Print API Key" do
block do
print "\nKey = : " + node["server"]["apikey"] + "\n"
end
action :run
end
但是,如果我尝试node["server"]["apikey"]
在下面的代码块中使用该属性,如下所示:
webhooks_request "Get data from TPP" do
uri "127.0.0.1/vedsdk/certificates/retrieve?apikey=#{node["server"]["apikey"]}"
post_data (
{ 'data' => "NsCVcQg4fd"}
)
header_data (
{ 'content-type' => 'application/json', 'auth' => node["server"] ["username"]}
)
expected_response_codes [ 200, 201, 400, 401 ]
action :post
end
的值node["server"]["apikey"]}
始终为空。有趣的是,尽管该node["server"] ["username"]
属性的值可用并且可以按预期工作。
显然,我在这里错过了买东西不能解决的问题:(
将其写为通用答案(这也将避免使其在列表中未得到答案;)
在资源内部时,您可以在聚合时使用惰性属性评估来评估属性值。
正确的用法是
resource "name" do
attribute lazy {"any value #{with interpolation} inside"}
end
常见的错误是在内部插值中使用惰性,因为我们只希望对变量进行延迟求值,并且只有一个。
从设计上讲,惰性意味着评估属性值,它可以包含Ruby代码,也可以根据先前资源完成的操作来计算属性值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句