如何在 Chef 食谱中使用自定义 JSON 属性

Posted

技术标签:

【中文标题】如何在 Chef 食谱中使用自定义 JSON 属性【英文标题】:How to use custom JSON attributes in Chef recipe 【发布时间】:2016-03-29 17:16:40 【问题描述】:

我是 JSON 新手。我在 AWS Opswork 中创建了自定义 JSON,并尝试将其作为 Chef 配方中的属性进行访问,但不幸的是它没有捕获 JSON 值。我的 JSON 文件看起来像..



 "normal":  
 "filebeat_minjar": 
 "log_path" : "/var/log/*.log",
 "hosts" : "Some Random Host ID", 
 "port"  : 5000
 
 

我正试图在食谱中捕捉它,

log = node['filebeat_minjar']['log_path']
hosts = node['filebeat_minjar']['hosts']
port = node['filebeat_minjar']['port']

但它失败了,我也试过没有'正常'。我得到了一些 []null 类错误。

【问题讨论】:

你可以用 filebeat 代替 filbeat 吗? 【参考方案1】:

试试这个方法,

log = node['normal']['filbeat_minjar']['log_path']
hosts = node['normal']['filbeat_minjar']['hosts']
port = node['normal']['filbeat_minjar']['port']

log = node.normal.filbeat_minjar.log_path
hosts = node.normal.filbeat_minjar.hosts
port = node.normal.filbeat_minjar.port

Json 对象就像一棵树,元素就是树枝。 希望对您有所帮助

【讨论】:

不要这样做,节点数据格式不正确,应该修复。切勿将第二种形式用于任何属性访问,它已被弃用,并将在未来的版本中删除。【参考方案2】:

您的 Chef 代码是正确的,但您需要修复 JSON。您不需要那里的"normal": ...,Chef 和 OpsWorks 会为您处理。

【讨论】:

【参考方案3】:

以下对我有用。

自定义 JSON


    "Production":  
        "ApplicationLayer": 
            "DockerTag" : "Version1"
        
       

从厨师食谱中调用。

node[:Production][:ApplicationLayer][:DockerTag]

【讨论】:

以上是关于如何在 Chef 食谱中使用自定义 JSON 属性的主要内容,如果未能解决你的问题,请参考以下文章

OpsWorks:如何设置 Chef 环境?

在 Chef 食谱中使用变量

无法在 AWS Opsworks 上使用 Chef 12 查找 Chef 社区食谱

在 aws opsworks 中运行自定义食谱

使用 Chef 12 从 AWS OpsWorks 中的堆栈设置获取自定义 JSON

Chef - 如何在本地运行食谱