Правильный синтаксис для записи в файле 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
Другие вопросы по тегам