Мне поставили задачу реализовать скрипт марионетки hiera для управления sites_enabled для nginx.
Вот мой кукольный сценарий:
common.yaml
---
classes:
- nginx
nginx:
enabled:
abc.com
xyz.com
disabled:
test.com
test2.com
init.pp
class nginx{
create_resources("site_enabled", hiera("nginx"), {})
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
Но я получил сообщение об ошибке при выполнении марионетки:
ошибка: не удалось получить каталог с удаленного сервера: ошибка 400 на сервере: невозможно преобразовать строку в целое число в /etc/puppet/modules/nginx/manifests/init.pp:7 на узле XX
Когда я попытался запросить hiera через командную строку:
$ hiera nginx
{"enabled" => ["abc.com", "xyz.com"]}
Я знаю, что где-то ошибаюсь. Пожалуйста, поправьте меня. Я не очень понимаю, как hiera запрашивает и обрабатывает данные массива. пожалуйста, укажите мне какой-нибудь полезный документ, если это возможно.
Спасибо.
Ваши вопросы очень похожи на Проблемы с созданием хэшей Hiera для create_resources, на который есть ответ. Я сделаю резюме здесь.
Согласно документация для create_resources, хеш должен иметь вид {title => {parameters} }
. Вы должны отредактировать свои данные hiera, чтобы установить параметры. Поскольку их нет, я думаю, это может выглядеть так:
common.yaml
---
classes:
- nginx
nginx::enabled:
abc.com: {}
xyz.com: {}
nginx::disabled:
test.com: {}
test2.com: {}
Затем вам нужно загрузить правильные данные из hiera. Вы хотите загрузить nginx::enabled
, не все nginx
init.pp
class nginx{
create_resources("site_enabled", hiera("nginx::enabled"))
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
Спасибо Sciunus за быстрый ответ.
Могу я задать этот вопрос? я хотел бы сделать мои данные yaml в следующем формате:
nginx:
enabled: abc.com xyz.com disabled: test.com test2.com
Я НЕ хочу делать такой формат:
nginx :: включен:
abc.com: {} xyz.com: {}
nginx :: отключено:
test.com: {} test2.com: {}
Как сделать так, чтобы сценарий марионетки работал должным образом. Я также читал документ Hiera, поскольку я знаю, что он также поддерживает три типа данных поиска: hiera, hiera_hash и hiera_array. но я не мог заставить его работать так, как я ожидал, после моего формата файла yaml выше
Извините, так как я новичок в hiera.
Заранее спасибо.