Иера запускает только первый матч

Я хотел бы создать пользователей по умолчанию для всех серверов, но в дополнение к этому использованию по умолчанию только для определенных серверов я хочу создать в дополнение к пользователям по умолчанию специальные.

Моя проблема в том, что когда я запускаю puppet agent -t, puppet создает пользователей только для первого совпадения. Если сервер совпадает в - node/%{::fqdn} создайте только определенных пользователей, но не пользователей по умолчанию.

в /etc/puppet/hiera.yaml у меня есть следующее:

:backends:
  - yaml
:yaml:
  :datadir: "/etc/puppet/hieradata"

:hierarchy:
 - node/%{::fqdn}
 - common

Как настроить hiera, чтобы всегда запускался общий файл?


person Frayp    schedule 15.07.2015    source источник


Ответы (1)


Используйте hiera слияние хешей. Определите поведение слияния в hiera.yaml, возможные значения: native, deep, deeper, например:

:merge_behavior: deeper

И чем просто использовать hiera. Согласно документации:

При более глубоком слиянии хэшей Hiera рекурсивно объединяет ключи и значения в каждом исходном хэше.

Здесь у вас есть поведение слияния в примеры.

ОБНОВЛЕНИЕ: я настроил следующий простой пример:

hiera.yaml:

:hierarchy:
  - apps
  - common

:merge_behavior: deeper

apps.yaml:

test_hash:
  abc1:
    value: apps
  abc2:
    value: apps

common.yaml:

test_hash:
  abc1:
    value: comm
  abc3:
    value: comm

test_hash.pp

class test_hash
{
  $normal_hash = hiera('test_hash')
  $hiera_hash = hiera_hash('test_hash')
  notify{ " normal: ${normal_hash}":}
  notify{ " hiera : ${hiera_hash}":}
}

include test_hash

Сценарий следующего вызова марионетки puppet apply test_hash.pp В результате:

Примечание: нормально: {abc1=›{value=›apps}, abc2=›{value=›apps}}

Примечание: hiera : {abc1=›{value=›apps}, abc3=›{value=›comm}, abc2=›{value=›apps}}}

ОБНОВЛЕНИЕ 2: вы также можете использовать функцию merge из stdlib . Но, вероятно, чтобы использовать его, вам придется немного изменить свою архитектуру, например:

Обычно определяют значения common, в node/%{::fqdn} определяют значения, специфичные для узла, а затем используют их, как в примере:

$common_hash = hiera('something_from_common')
$node_hash   = hiera('something_from_fqdn')
$merged_hash = merge($node_hash, $common_hash)

(Да, это немного некрасиво :))

person kkamilpl    schedule 15.07.2015
comment
Я добавил :merge_behavior: глубже в hiera.yaml, но поведение такое же, только запустить первое совпадение. В файле common.yaml есть user1, а в файле node/%{::fqdn}.yaml есть user2. если node/%{::fqdn}.yaml существует, puppet создаст только пользователя2, и мне нужно создать пользователя1 и пользователя2 - person Frayp; 16.07.2015
comment
Я думаю, что в дополнение к настройке поведения слияния вам придется использовать hiera_hash() вместо простого hiera() в своем манифесте. - person Felix Frank; 16.07.2015
comment
@Frayp Извините за поздний ответ. Я обновил свой ответ, пожалуйста, проверьте, помогает ли это. - person kkamilpl; 16.07.2015