Правильный синтаксис для записи в файле Hiera yaml
Цель состоит в том, чтобы предоставить значение по умолчанию для параметра, передаваемого в определенный тип ресурса. Я успешно предоставил значения по умолчанию для параметров класса, используя процедуру автоматической настройки по умолчанию, которая использует Hiera, но этот механизм не работает для определенных типов.
Вот как я называю Hiera в моем определенном типе:
define git_down(
$local_repo_dir = undef,
$remote_repo_url = undef,
$version = undef,
$shell = hiera("git_down::shell"),
$path = hiera("git_down::path"),
$date_format = hiera("git_down::date_format", '%Y-%m-%d %H:%M:%S')
) {
... More puppet code for type definition...
}
Моя идея состоит в том, чтобы создать классы, которые имеют обычные автоматические значения по умолчанию для некоторых параметров, привязанных к имени класса (следовательно, это делается в файлах классов, не показаны), но чтобы другие параметры имели одинаковые значения по умолчанию для всех пользователей типа, независимо от класса. Вышеуказанный тип позволяет обновлять репозиторий GIT. Это должен быть тип, а не класс, потому что мне нужно извлекать файлы из нескольких GIT-репозиториев, а классы являются одиночными, тогда как типы могут иметь несколько экземпляров. Каждый класс, который объявляет экземпляр "git_down", должен ожидать, что исполняемые файлы git (git_down::path и git_down::shell) находятся в одном месте. Для каждого класса различаются URL-адрес исходного репо, каталог для хранения локального репо, который должен быть клонирован или извлечен, и тег версии для извлечения.
Вот как выглядит мой Hiera.yaml:
---
:backends:
- yaml
:yaml:
:datadir: c:/temp/usr
:hierarchy:
- "git_%{fqdn}"
- "git_%{osfamily}"
- git_common
(Примечание: я не использовал здесь::fqdn и:: osfamily, потому что автономный инструмент командной строки Hiera их не распознает. Я могу добавить двойные двоеточия, когда все заработает.)
У меня нет машинного файла YAML (на основе fqdn, полного доменного имени), поэтому он должен выглядеть в моем осфамильном файле git_windows.yaml:
---
# Default class parameters for when ::osfamily is "windows"
git_checkout::local_repo_dir: c:/usr/git_test_5
git_checkout::remote_repo_url: file:///c/usr/git_test
git_checkout::version: v11.0.7.81
git_down::shell: 'C:/Program Files (x86)/git/bin/sh.exe'
git_down::path: '/bin:/C/Program Files (x86)/git/bin'
git_down::date_format: '%Y-%m-%d %H:%M:%S'
Я проверил мою Hiera таким образом:
1) Используйте средство командной строки для создания файла фактов YAML со всеми моими фактами (при необходимости при запуске Hiera):
facter -y > ..\facts.yaml
2) Используйте командную строку Hiera, чтобы увидеть, распознает ли она мои переменные:
hiera -d -c.. \ hiera.yaml -y.. \ facts.yaml git_down:: shell
Hiera выводит следующее:
c:\usr\git_type\manifests>hiera.bat -d -c ..\hiera.yaml -y ..\facts.yaml git_down::shell
DEBUG: 2014-07-01 14:17:46 -0400: Hiera YAML backend starting
DEBUG: 2014-07-01 14:17:46 -0400: Looking up git_down::shell in YAML backend
DEBUG: 2014-07-01 14:17:46 -0400: Looking for data source git_usb-pctbspaul.ef.com
DEBUG: 2014-07-01 14:17:46 -0400: Cannot find datafile c:/usr/git_type/git_usb-pctbspaul.ef.com.yaml, skipping
DEBUG: 2014-07-01 14:17:46 -0400: Looking for data source git_windows
DEBUG: 2014-07-01 14:17:46 -0400: Found git_down::shell in git_windows
nil
Вместо "nil" я должен увидеть "C:/Program Files (x86)/git/bin/sh.exe". Что случилось?
1 ответ
Пока я писал этот вопрос, я нашел ответ.
В hiera.yaml я указывал на неправильный датадир!!!
Я указывал на более старую версию моего кода, в которой были определены некоторые переменные, но другие переменные не были определены.
Мой исправленный hiera.yaml:
---
:backends:
- yaml
:yaml:
:datadir: c:/usr/git_type
:hierarchy:
- "git_%{fqdn}"
- "git_%{osfamily}"
- git_common