массив puppet hiera, цикл и хеш

В настоящее время у меня проблема между hiera/puppet:

В моей иере у меня есть:

mysql_user_mgmt:
     - mysql_user: 'toto@localhost'
       mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
       mysql_grant_user: 'toto@localhost/*.*'
       mysql_user_table_privileges: '*.*'
     - mysql_user: 'test@localhost'
       mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
       mysql_grant_user: 'test@localhost/*.*'
       mysql_user_table_privileges: '*.*'

В моей марионетке я пытаюсь сделать цикл для получения данных от hiera:

$mysql_user_mgmt = hiera('mysql_user_mgmt',undef)
define mysql_loop () {
$mysql_hash_password = $name['mysql_hash_password']
notify { "mysql_hash_password: ${mysql_hash_password}": }
}
mysql_loop { $mysql_user_mgmt: }

но я получаю некоторые странные ошибки. Может кто-нибудь помочь мне понять, как сделать петлю?


person Lord-Y    schedule 11.05.2015    source источник
comment
опубликуйте ошибки, которые вы получаете.   -  person iamauser    schedule 11.05.2015


Ответы (1)


Названия ресурсов представляют собой строки. Всегда.

Вы пытаетесь использовать заголовок ресурса mysql_loop для подачи хэша в определение типа. Это не работает. Вместо этого будет использоваться строковая версия хэша, и ваши последующие попытки получить компоненты по хеш-индексу потерпят неудачу, вероятно, с какой-то ошибкой типа.

У вас есть несколько вариантов:

  1. Вы можете немного изменить структуру своего определения и данных и передать совокупные данные в качестве хеш-параметра. (Пример ниже.)

  2. Вы можете немного изменить структуру своего определения и данных и использовать функцию create_resources().

  3. Если вы перешли на Puppet 4 или хотите включить будущий синтаксический анализатор в Puppet 3, вы можете использовать одну из новых функций циклов, например each().

Пример альтернативы (1):

Реорганизуйте данные в хэш хэшей, набранных по идентификатору пользователя:

mysql_user_mgmt:
  'toto@localhost':
     mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
     mysql_grant_user: 'toto@localhost/*.*'
     mysql_user_table_privileges: '*.*'
  'test@localhost':
     mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
     mysql_grant_user: 'test@localhost/*.*'
     mysql_user_table_privileges: '*.*'

Измените определение:

define mysql_user ($all_user_info) {
  $mysql_hash_password = $all_user_info[$title]['mysql_hash_password']
  notify { "mysql_hash_password: ${mysql_hash_password}": }
}

Используйте это так:

$mysql_user_mgmt = hiera('mysql_user_mgmt',undef)
$mysql_user_ids = keys($mysql_user_mgmt)
mysql_user { $mysql_user_ids: all_user_info => $mysql_user_mgmt }

(Функция keys() доступна в модуле puppetlabs-stdlib.)

person John Bollinger    schedule 11.05.2015