Chef Attributes,如何获取特定键的值

时间:2015-06-03 08:58:06

标签: chef chef-recipe

我试图管理厨师角色如下 在这种情况下,属性节点[" customer"] [" name"]是一个数组。
在配方中,我需要获取数组节点的第一个元素的值[" customer"] [" name"] as" foo"。

"customer" => {
    "name" => {
        ["foo"] => {
            "prod" => {
                "apache" => {
                    "listening" => 81
                },
                "database" => {
                    "type" => "postgres"
                }
            },
            "dev" => {
                "apache" => {
                    "listening" => 81
                },
                "database" => {
                    "type" => "postgres"
                }
            }
        }
    }
}

我做了什么:

node[:customer][:name].each do |customer|
Chef::Log.info("CONFIGURING --- #{customer}")
end

但是意外的是,变量"客户"包含值

  

INFO:CONFIGURING --- [" [\" foo \"]",   {"刺" = GT; {"阿帕奇" = GT; {"听音" = GT; 81},   "数据库" = GT; {"类型" = GT;" postgres的"}},   "设备" = GT; {"阿帕奇" = GT; {"听音" = GT; 81},   "数据库" = GT; {"类型" = GT;" postgres的"}}}]

而不仅仅是简单的价值" foo"

我怎样才能获得简单的价值" foo"而不是整个递归哈希?

由于

2 个答案:

答案 0 :(得分:0)

node[:customer][:name].each do |customer,properties|
  Chef::Log.info("CONFIGURING --- #{customer}")
end

你只是在那里使用ruby迭代一个哈希,你必须告诉ruby你不希望获得完整的对象,只需要键和其他东西来获得其余的属性。

答案 1 :(得分:-1)

不能在Chef角色中实现数组。 Chef角色只能将属性设置为某个值。例如,下面应该可以正常工作。

"customer" => {
    "name" => "foo"
}