Поскольку я понимаю вопрос, я думаю, что вы надеетесь достичь того, что, например, когда вы ищите ключ our_mysql::configure_db::dbs.sales_db
, вы получаете объединение данных для этого (под) ключа и данных для our_mysql::configure_db::dbs.defaults
subkey, И , что различные токены %{lookup ...}
в последнем как-то преобразуются в строку sales_db
.
Боюсь, этого не произойдет.Токены интерполяции здесь даже не учитываются - Hiera просто не будет выполнять такое слияние вообще.Я предполагаю, что вы имеете в виду поиск хеш-слияния, но он объединяет только идентичные ключи и подразделы, поэтому не our_mysql::configure_db::dbs.sales_db
и our_mysql::configure_db::dbs.defaults
.В Hiera предусмотрены значения по умолчанию для определенных ключей в виде данных, записанных для этих конкретных ключей на низко приоритетном уровне иерархии данных.С другой стороны, представляемый вами подраздел «значения по умолчанию» не имеет особого значения для стандартных поставщиков данных Hiera.
Вы можете решить эту проблему, но не полностью внутри данных.Например, рассмотрим это:
$dbs = lookup('our_mysql::configure_db::dbs', Hash, 'deep')
$dbs.filter |$dbname, $dbparms| { $dbname != 'defaults' }.each |$dbname, $dbparms| {
# Declare a database using a suitable resource type. "my_mysql::database" is
# a dummy resource name for the purposes of this example only
my_mysql::database {
$dbname:
* => $dbparams;
default:
datadir => "/var/lib/mysql/${dbname}",
log_error => "/var/log/mysql/${dbname}.log",
logbindir => "/var/lib/mysql/${dbname}",
* => $dbs['defaults'];
}
}
Это предполагает данные формы, представленной в вопросе, и использует данные из подраздела defaults
, где они не требуют знания конкретного имени БД, ноон помещает шаблоны для различных имен каталогов в объявление ресурса, а не в данные.Наиболее важными признаками являются использование подстановочного знака параметра *
для получения нескольких параметров из хэша и использование свойства ресурса для каждого выражения по умолчанию с использованием ключевого слова default
в объявлении ресурса.
Если вы захотите сделать это, вы можете добавить больше информации об именах каталогов обратно в данные, приложив немного больше усилий (и один или несколько новых ключей).