2016-07-15 1 views
0

Я новичок в Ruby and Chef У меня возникли проблемы с пониманием того, как получить вложенные элементы из databag (chef_vault). Я думаю, что это более фундаментальный вопрос о Рубине, но не уверен, что он определен специфически.Попытка понять коллекцию 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

KEY1 и KEY2 - оба массива, содержащие один хеш. Вот как вы создали JSON, так что вам нужно его использовать. На самом деле это не Ruby.

Смежные вопросы