2017-02-09 9 views
1

Я пытаюсь получить рецепт шеф-повара, построенный для серии Registry_keys. Все они размещаются в атрибутах chef default.rb. Я пытаюсь вызвать определенный атрибут и create_if_missing каждый ключ.Вызов массива в массиве для атрибутов шеф-повара

Примеры кода следующие.

Chef attribute\default.rb

default['randomhost']['registry']['entries'] = [ 
    { 
    'Key' => 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\RandomApplication', 
    'Values' => [ 
     { 
     name: 'RandomValueName', 
     type: :qword, 
     data: 1 
     }, { 
     name: 'RandomValueName2', 
     type: :qword, 
     data: 2 
     } 
    ] 
    } 
] 

Chef Recipe\registryKey.rb

node['randomhost']['registry']['entries'].each do |item| 
    registry_key item['Key'] do 
    values item['Values'] 
    recursive true 
    action :create_if_missing # Default 
    end 
end 

Когда я иду, чтобы построить это, называя item['Values'] утверждает, что

Bad key name in RegistryKey values hash 

Я не совсем уверен, почему это составляет name:, type: и data: - все символы в массиве атрибутов.

Любая помощь будет оценена по достоинству. Спасибо,

+0

ли те фактические значения, которые вы используете, или вы красноломкий их? – coderanger

+0

Я не думаю, что смешивание двух хэш-обозначений - хорошая идея. См. [Документация] (https://docs.chef.io/resource_registry_key.html#syntax), например – Tensibai

+0

Значения были отредактированы. –

ответ

0

Проблема, с которой я столкнулся, заключалась в том, что вложенный массив преобразовывал символы в строки. Мне пришлось перестроить массив в моем рецепте, используя метод .map.

Chef Recipe\registryKey.rb

node['randomhost']['registry']['entries'].each do |item| 
    my_array = item['Values'].map { |key| 
    { 
    name: key['name'], 
    type: key['type'], 
    data: key['data'] 
    } 
    } 
    registry_key item['Key'] do 
    values my_array 
    recursive true 
    action :create_if_missing # Default 
    end 
end