Получить превосходное имя хэш-ключа в Hiera - PullRequest
0 голосов
/ 29 января 2019

Привет. Я строю в Hiera / Puppet структуру данных для создания файлов mysql / config.Моя цель состоит в том, чтобы иметь некоторые значения по умолчанию, которые могут быть перезаписаны слиянием.Это работает до этого момента.
Поскольку у нас разные экземпляры mysql на многих хостах, я хочу автоматически настроить некоторые пути, чтобы они были уникальными для каждого экземпляра.У меня есть имя экземпляра в виде хэша (name) хэшей в пространстве имен: our_mysql :: configure_db :: dbs:

В моем случае я хочу найти имена экземпляров, такие как «sales_db» или «hr_db», впути, такие как datadir, но я не могу найти способ поиска старшего имени ключа.

Данные Hiera из модуля "our_mysql" представляют некоторые значения по умолчанию:

our_mysql::configure_db::dbs:
  'defaults':
    datadir:     /var/lib/mysql/"%{lookup('lookup to superior hash-key name')}"
    log_error:   /var/log/mysql/"%{lookup('lookup to superior hash-key name')}".log
    logbindir:   /var/lib/mysql/"%{lookup('lookup to superior hash-key name')}"
    db_port:     3306
    ...:         ...
    KEY_N:       VALUE_N

Данные Hiera из определения узла:

our_mysql::configure_db::dbs:
  'sales_db':
    db_port: "3317"
    innodb_buffer_pool_size: "1"
    innodb_log_file_size: 1GB
    innodb_log_files_in_group: "2"
    server_id: "1"
  'hr_db':
    db_port: "3307"

Теперь я знаю, как выполнить простой поиск или выполнить итерацию с помощью
.each | String $key, Hash $value | { ... }

, но я понятия не имею, как ссылаться на ключ с определенного уровня иерархии.связанные темы с куклами и иера не помогли.

Возможно ли это каким-либо образом, и если да, то как?

1 Ответ

0 голосов
/ 29 января 2019

Поскольку я понимаю вопрос, я думаю, что вы надеетесь достичь того, что, например, когда вы ищите ключ 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 в объявлении ресурса.

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

...