
Мне поставили задачу реализовать скрипт hiera puppet для управления sites_enabled для nginx.
Вот мой кукольный сценарий:
общий.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}',
}
}
Но при запуске puppet возникла ошибка:
err: Не удалось получить каталог с удаленного сервера: Ошибка 400 на СЕРВЕРЕ: невозможно преобразовать строку в целое число в /etc/puppet/modules/nginx/manifests/init.pp:7 на узле XX
Когда я попытался сделать запрос к hiera через командную строку:
$ hiera nginx
{"включено"=>["abc.com", "xyz.com"]}
Я знаю, что где-то ошибся. Пожалуйста, поправьте меня. Я не очень понимаю, как Hiera запрашивает и обрабатывает данные массива. Пожалуйста, укажите мне какой-нибудь полезный документ, если это возможно.
Спасибо.
решение1
Ваши вопросы очень похожи наПроблемы с созданием хешей Hiera для create_resources, на который есть ответ. Я дам здесь краткий обзор.
Согласнодокументация для create_resources, хэш должен быть в форме {title => {parameters} }
. Вам следует отредактировать данные hiera, чтобы задать параметры. Поскольку их нет, я думаю, это может выглядеть так:
общий.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}',
}
}
решение2
Спасибо, Sciunus, за быстрый ответ.
Могу ли я задать такой вопрос? Я хотел бы сделать свои данные yaml в следующем формате:
nginx:
enabled: abc.com xyz.com disabled: test.com test2.com
Я НЕ хочу делать такой формат:
nginx::включено:
abc.com: {} xyz.com: {}
nginx::отключено:
test.com: {} test2.com: {}
Как мне заставить мой скрипт puppet работать так, как ожидалось? Я также прочитал документ Hiera, как я знаю, он также поддерживает три вида данных поиска: hiera, hiera_hash и hiera_array. Но я не смог заставить его работать так, как ожидалось, следуя формату файла yaml выше.
Извините, я новичок в hiera.
Заранее спасибо.