Здесь есть несколько проблем.
В вашем hiera.yaml
отсутствует строка, а именно клавиша defaults
.Должно быть:
---
version: 5
defaults: ## add this line
datadir: "/etc/puppetlabs/code/environments"
data_hash: yaml_data
hierarchy:
- name: "Per-node data (yaml version)"
path: "%{::environment}/nodes/%{::trusted.certname}.yaml"
- name: "Common YAML hierarchy levels"
paths:
- "defaults/common.yaml"
- "defaults/users.yaml"
Я обнаружил, что с помощью puppet-syntax gem (включено, если вы используете PDK, что рекомендуется):
▶ bundle exec rake validate
Syntax OK
---> syntax:manifests
---> syntax:templates
---> syntax:hiera:yaml
ERROR: Failed to parse hiera.yaml: (hiera.yaml): mapping values are not allowed in this context at line 3 column 10
ТакжеВ дополнение к тому, что упомянул Джон, простейший класс для чтения в ваших данных был бы следующим:
class test (Hash[String,Hash] $users) {
create_resources(accounts::user, $users)
}
Или, если вы хотите избежать использования create_resources
*:
class test (Hash[String,Hash] $users) {
$users.each |$user,$props| {
accounts::user { $user: * => $props }
}
}
Обратите внимание, что для этого я использовал функцию автоматического поиска параметров.См. Ссылку ниже.
Тогда в ваших данных Hiera вам будет соответствовать ключ с именем test::users
(имя класса "test", имя ключа "users"):
---
test::users: ## Note that this line changed.
joed:
locked: false
comment: System Operator
uid: '1700'
gid: '1700'
groups:
- admin
- sudonopw
sshkeys:
- ssh-rsa ...Hw== sysop+moduledevkey@puppetlabs.com
Использование автоматического поиска параметров обычно является более идиоматичным способом написания кода Puppet по сравнению с явным вызовом функции lookup
.
Для получения дополнительной информации:
(* Обратите внимание, чтоcreate_resources
является "спорным". Многие в сообществе марионеток предпочитают не использовать его.)