Вложенный пакет данных шеф-повара

Я новичок в Chef, и у меня возникли проблемы с получением значений из data_bags с вложенными атрибутами.

{   
  "id": "bareos-fd",   
  "description": "Client resource of the Director itself.",   
  "address": "localhost",   
  "job": {
    "backup-bareos-fd": {
      "jobdefs": "DefaultJob"
    },
    "BackupCatalog": {
      "description": "Backup the catalog database (after the nightly save)",
        "jobdefs": "DefaultJob",
        "level": "Full",
        "fileset": "Catalog",
        "schedule": "WeeklyCycleAfterBackup",
        "run_before": "/usr/lib/bareos/scripts/make_catalog_backup.pl MyCatalog",
        "run_after": "/usr/lib/bareos/scripts/delete_catalog_backup",
        "bootstrap": "|/usr/bin/bsmtp -h localhost -f \\\"\\(Bareos\\) \\\" -s \\\"Bootstrap for Job %j\\\" root@localhost",
        "priority": "11"
     },
     "RestoreFiles": {
       "type": "Restore",
       "fileset": "LinuxAll",
       "storage": "File",
       "pool": "Incremental",
       "messages": "Standard",
       "where": "/tmp/bareos-restores"
     }   
   } 
 }

Как я могу написать foreach, чтобы получить вложенные значения (например, BackupCatalog и его значения?)


person Thiago Ramos Fanfoni    schedule 01.05.2017    source источник


Ответы (1)


Объект, возвращенный из data_bag_item, работает как хэш:

bag = data_bag_item('something', 'bareos-fd')
bag['job']['BackupCatalog'].each do |key, value|
  # ...
end
person coderanger    schedule 01.05.2017
comment
Ключ задания динамический. То, что я пытаюсь сделать, это создать файл с ключом в качестве имени и со значениями внутри. Этот пакет данных является примером с файлом конфигурации по умолчанию, BackupCatalog предназначен только для этого конкретного клиента. Моя проблема заключается в том, чтобы ссылаться на динамический kv. Это может быть похоже на `job: { Another_job: { type: other } } `У меня есть data_bag с именем bareos_clients со всеми клиентами внутри. Я могу прочитать все содержимое, но я понятия не имею, как просмотреть записи о заданиях. - person Thiago Ramos Fanfoni; 01.05.2017
comment
Это все просто код Ruby, это моя точка зрения. Посмотрите на классы Ruby Hash и Array, и вы найдете любые методы, которые вам нужны. - person coderanger; 02.05.2017