Назад | Перейти на главную страницу

Manage enable - отключить сайт nginx от Hiera Puppet?

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

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