【问题标题】:how to Parse json data into a chef recipe attributes如何将 json 数据解析为厨师食谱属性
【发布时间】:2019-01-11 09:23:45
【问题描述】:

如何将来自 rest curl 命令的 json 输出解析为 default.rb 文件中的属性值

用例:

在 Chef recipe Attributes --> attributes.rb 文件中具有以下默认属性,这些属性将被我的食谱使用,这些值需要使用 curl 命令随机生成,该命令以 json 输出的形式输出

default['agent']['id'] = 'F73D3CA4-!#!#-653A-XXXX-BBBBBB'
default['agent']['token'] = '90F1C7EA-*()*-YYYY-2528-ZZZZZZ'

这个值在配方中使用 --> act.rb 使用的语法

tenant_id                       = node['agent']['id']
token                           = node['agent']['token']

recipe 在recepie 中以下列方式使用tenant_id 和token

dsa_args << " \"tenantID:#{tenant_id}\" \"tenantPassword:#{token}\""

获取id和token的curl命令是:

curl  --insecure -X GET -H "content-type: application/json"  -H 
"Accept: application/json" -d '{}' 
https://XXX.XX.XXX.XX/rest/bat/rant/tenant? 
name=Ante%20Data%20Wortyu%20Details

输出格式如下

{"id":"16","name":"Ante Data Wortyu Details","state":"ACTIVE", "tenantID":"F73D3CA4-!#!#-653A-XXXX-BBBBBB", "tenantPassword":"90F1C7EA-()-YYYY-2528-ZZZZZZ"}

如何将 json 格式的输出传递到我的 Chef Recipe 或属性文件中。

我通过以下链接完成了它,但它因未经授权的错误而失败:

https://www.twilio.com/blog/2015/10/4-ways-to-parse-a-json-api-with-ruby.html

非常感谢任何帮助。

谢谢,

【问题讨论】:

  • 您确定请求返回有效的 JSON 数据吗?例如:tenantIDtenantPassword 必须在响应中的引号周围
  • 输出不是有效的 JSON:tenantID 及其值没有被引号括起来。
  • 进行了更改,复制/粘贴错过了值 " " : ""
  • 包括测试请求和您的代码以使用 net http 类实现解决方案,谢谢
  • @Fabrizio Bertoglio,你有我可以参考的样品吗.......

标签: ruby-on-rails ruby chef-infra cookbook


【解决方案1】:

这有点做作,可能不适合您的整个用例,但它是如何将 HTTP 请求的响应正文解析为 JSON 并将其用于 Chef 属性的示例。

# recipes/something.rb
require 'rest-client'
require 'json'

jsonResponse = JSON.parse(RestClient.get(URL))
node.override['agent']['id'] = jsonResponse["tenantID"]
node.override['agent']['token'] = jsonResponse["tenantPassword"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多