2016-07-15 12 views
0

Ich bin neu in Ruby und Chef Ich habe Probleme zu verstehen, wie verschachtelte Elemente aus einem Databag (Chef_Vault) zu bekommen. Ich denke, das ist mehr eine grundlegende Ruby-Frage, aber nicht sicher, ob etwas Chef spezifisch.Versuchen Sie, chef_vault und Ruby-Sammlungen zu verstehen

Ich habe dieses Gewölbe:

$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' 

Hier ist, was ich bemerkt, wenn man versucht, verschachtelte Elemente aus es in meinem Rezept zu bekommen:

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'] 

Nun, was ich in der Konsole sehen:

Ursprünglich habe ich versucht test_vault['KEY1']['SUBKEY2'], die mir einen Fehler gab. Meine Frage ist, warum muss ich tun test_vault['KEY1'][0]['SUBKEY2'] was bin ich mit [0] indexieren?

Antwort

1

KEY1 und KEY2 sind beide Arrays, die einen einzelnen Hash enthalten. So richten Sie den JSON so ein, wie Sie ihn verwenden müssen. Nicht wirklich ein Ruby-Ding.