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

условно загрузить фрагмент конфигурации для конкретного сайта в шаблон базового файла конфигурации

Моя конечная цель - включить фрагмент конфигурации для конкретного сайта в общий базовый шаблон. Моей первой мыслью было вызвать функцию шаблона из базового шаблона, например:

Манифест:

...
$domain = "www.example.com"
...

Шаблон:

server {
    # Common configuration items here.
    ...

    # Load site-specific configurations here.
    <%= scope.function_template("sites/$domain/config.erb") %>
}

Однако не похоже, чтобы можно было использовать переменную в вызове функции (поправьте меня, если я ошибаюсь). Также существует проблема в том, что должен существовать шаблон для конкретного сайта.

Итак, моя следующая мысль заключалась в том, чтобы использовать переменную в манифесте, содержащую контент конфигурации для конкретного сайта, загруженный из шаблона.

Манифест:

...
$domain = "www.example.com"
$site_specific_content = template("sites/$domain/config.erb")
....

Шаблон:

server {
    # Common configuration items here.
    ...

    # Load site-specific configurations here.
    <%= site_specific_content %>
}

Однако мне не удалось найти способ визуализировать шаблон, если он существует, но я установил для переменной пустую строку, если шаблон не существует. (Хотя это немного неэлегантно, я полагаю, что здесь можно было бы просто создать пустой шаблон для сайта, который не требует дополнительной настройки.)

Любые идеи?

Однако не похоже, чтобы можно было использовать переменную в вызове функции (поправьте меня, если я ошибаюсь). Также существует проблема в том, что должен существовать шаблон для конкретного сайта.

Можно использовать переменную в вызове функции, но помните, что аргумент функции - это рубиновая строка, а не шаблон Puppet. Вы могли сделать это:

<%= scope.function_template("sites/" + domain + "/config.erb") %>

Или используйте подстановку строки Ruby:

<%= scope.function_template("sites/#{domain}/config.erb") %>

... но это все равно приведет к ошибке, если заданный шаблон не существует.

Чтобы предотвратить ошибку, вы можете использовать механизм обработки исключений Ruby внутри вашего шаблона, например:

<%=
  begin
    scope.function_template("sites/#{domain}/config.erb")
  rescue
  end
%>

Да да! Может быть лучший способ сделать это; Я не эксперт по Ruby и не марионеткам, и я только что придумал это.