Управление включением-отключением сайта nginx с помощью Hiera puppet?

Управление включением-отключением сайта nginx с помощью Hiera puppet?

Мне поставили задачу реализовать скрипт 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.

Заранее спасибо.

Связанный контент