试图了解chef_vault和ruby系列

时间:2016-07-15 19:25:53

标签: ruby json chef chef-recipe databags

我是Ruby和Chef的新手我无法理解如何从数据库(chef_vault)中获取嵌套元素。我认为这是一个基本的Ruby问题,但不确定是否有点特定于厨师。

我创建了这个保险库:

$json = '{
 "KEY1": [{
  "SUBKEY1": "aaaaa",
  "SUBKEY2": "bbbbbbb",
  "SUBKEY3": "cccccccc"
 }],
 "KEY2": [{
  "SUBKEY1": "dddddd",
  "SUBKEY2": "eeeeee"
 }],
 "KEY3": "fffffff",
 "KEY4": "ggggggg"
}'

knife vault create test_vault vaultitem1 $json --admins red888 --mode client --search 'role:testservers'

这是我在尝试从我的食谱中获取嵌套元素时注意到的:

test_vault = ChefVault::Item.load("test_vault", "vaultitem1")

puts test_vault.class
puts test_vault['SUBKEY1'].class
puts test_vault['SUBKEY1'].inspect
puts test_vault['SUBKEY1'][0]['SUBKEY2']

现在我在控制台中看到了什么:

ChefVault::Item
Array
[{"SUBKEY1"=>"aaaaa", "SUBKEY2"=>"bbbbbbb", "SUBKEY3"=>"cccccccc"}]
{"SUBKEY1"=>"aaaaa", "SUBKEY2"=>"bbbbbbb", "SUBKEY3"=>"cccccccc"}
bbbbbbb

最初我尝试test_vault['KEY1']['SUBKEY2']给了我一个错误。我的问题是,为什么我必须test_vault['KEY1'][0]['SUBKEY2']我使用[0]索引什么?

1 个答案:

答案 0 :(得分:1)

KEY1KEY2都是包含单个哈希的数组。这就是你设置JSON的方式,这就是你必须使用它的方式。不是Ruby的东西。