2016-05-26 2 views
2

у меня есть 2 хэш, и нужно «объединить» их, чтобы сделать новый ssh_authorized_key ресурс:объединить два хэша в кукольный

Первый хэш содержит все ключи SSH

$ssh_keys = { 
'[email protected]' => { 
    type => 'ssh-rsa', 
    key => 'Key1', 
}, 
'[email protected]' => { 
    type => 'ssh-rsa', 
    key => 'Key2', 
    } 
} 

второй хэш содержит «разворачивает "ключей и пользователей

$deploys = { 
    '[email protected]' => { user => ["user3","user4"]}, 
    '[email protected]' => { user => ["user3"]} 
} 

Я хочу„слиться“это хэшей, так что я могу использовать create_resources

$newhash ={ 
    '[email protected]' => { 
    type => 'ssh-rsa', 
    key => 'Key1', 
    user => ["user3","user4"] 
}, 
'[email protected]' => { 
    type => 'ssh-rsa', 
    key => 'Key2', 
    user => ["user3"] 
    } 
} 

create_resources('ssh_authorized_key',$newhash) 

Как я могу создать newhash? кукольный не итерация, которые делают этот путь к сложным

Данные хэш в конечном счете происходит от бригадира умных классов/переменных

Edit: Это на бригадир 1.11.1 с куклой 3.8.7 в ubuntu 14.04

+0

Есть несколько способов сделать это, но это зависит от версии Puppet, которую вы используете. Какую версию ты используешь? –

+0

используйте hiera и определите тип типа слияния хэша, который вы хотите https://docs.puppet.com/hiera/3.1/lookup_types.html#hash-merge – ptierno

ответ

2

Я не знаю функции для слияния хэшей, встроенных в язык марионеток, но вы всегда можете использовать custom parser function, что позволит вам объединить два или более хеши, как вам нравится, используя чистый рубин - и это действительно не так страшно, как кажется.

К счастью, один из них уже существует в модуле puppetlabs/stdlib. К сожалению, функция, необходимая для этого конкретного случая, - not documented в README. Вызывается deep_merge, он объединяет вложенные хэши, и вы можете найти документацию в самой функции source.

Я не пользуюсь мастером, поэтому мне непонятно, нужно ли вам установить модуль puppetlabs/stdlib или если он доступен при установке по умолчанию. Это обычная зависимость для большого количества модулей forge, поэтому вы можете уже иметь ее. Если нет, то foreman docs объясняет, как установить и добавить кукольный модуль на узел (я полагаю, вы просто заменили saz/ntp на puppetlabs/stdlib, где указаны).

Вы можете затем deep_merge к содержанию вашего сердца, как и в ...

$ssh_keys = { 
'[email protected]' => { 
    type => 'ssh-rsa', 
    key => 'Key1', 
}, 
'[email protected]' => { 
    type => 'ssh-rsa', 
    key => 'Key2', 
    } 
} 

$deploys = { 
    '[email protected]' => { user => ["user3","user4"]}, 
    '[email protected]' => { user => ["user3"]} 
} 

$merged = deep_merge($ssh_keys, $deploys) 

notify { $merged: } 

... что приводит к ...

Notice: { \ 
    "[email protected]"=>{"type"=>"ssh-rsa","key"=>"Key1", "user"=>["user3", "user4"]}, \ 
    "[email protected]"=>{"type"=>"ssh-rsa", "key"=>"Key2","user"=>["user3"]}} 
Смежные вопросы