Кукольный: поиск и объединение уникальных хешей - PullRequest
0 голосов
/ 21 января 2020

У меня есть конструкция hiera, которая предоставляет имена сертификатов для модуля apache, который выглядит следующим образом:

profiles::web_host::vhosts::params:
  'subdomain.domain.de'
    serverName: 'subomain.domain.de'
    certificateName: 'wildcard.domain.de'
  'subdomain2.domain.de'
    serverName: 'subomain2.domain.de'
    certificateName: 'wildcard.domain.de'

В моем профиле веб-сервера есть поиск параметров

$vhostParams = lookup("profiles::web_host::vhosts::params")

И затем я перебираю параметры:

$vhostParams.each |$key, $vhOptions| { 
    if $vhOptions['certificateName'] {
       $certificateName = $vhOptions['certificateName']
    }
}

Вот проблема: как только вы используете подстановочный сертификат (как и предполагалось) для нескольких поддоменов, существует дублированное определение для переменной $ certificateName.

Я экспериментировал с .unique, примененным к переменной, а также во время поиска $vhostParamsMerged1 = lookup('profiles::web_host::vhosts::params',Hash,'uniq',undef) без особого успеха.

Буду рад, если вы сможете помочь.

Вид С уважением, Томас

1 Ответ

0 голосов
/ 28 января 2020

Спасибо всем, что заглянули в это :). Я немного заболел, так что извините за поздний отзыв Вы правы, я должен был постить весь профиль, но он содержит некоторые имена хостов, которые я не хочу go publi c.

Я решил это обходным путем. Один и тот же сертификат теперь помещается во многие файлы, основанные на vhost, которым он используется.

Если у кого-нибудь есть решение, как использовать функцию puppet .each, перебирающую hiera, создайте массив / ha sh и используйте только уникальные значения - мне все еще интересно.

Для всех, у кого похожая проблема: Как всегда - вам просто нужно сделать все свои ресурсы уникальными.

Для моего случая код сейчас выглядит примерно так (каждый раз для ssl сертификата и ключа):

      $vhostParams.each |$key, $vhOptions| { 
      [...]
      #
      # Certificate(s)
      #
      file { "Web Server vhost $defaultSslZone SSL Key for ${key}":
        # notifies the apache service to do a reload
        notify => Class['apache::service'],
      [...]
      apache::vhost { "${key}":
      ssl                  => true,
      ssl_cert             => "${cCERTS_BASE_DIR}/${sslZone}-${key}_cert.pem",
      ssl_key 
      }

         => "${cCERTS_BASE_DIR}/${sslZone}-${key}_key.pem",
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...