Как мне перебрать массив хэшей в марионетке 3.8? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь настроить простой кукольный класс для циклического перебора массива хэшей, каждый из которых содержит конфигурацию для репозитория yum. Я использую Puppet версии 3.8.2, что означает, что использование функции .each невозможно.

В настоящее время мой код марионетки выглядит так:

class ::yum_repos {

      $repos = [
                  {
                    'name'  => 'test_repo1',
                    'base_url' => 'example1.com',
                    'ensure'  => 'present',
                    'gpgcheck' => 'true',
                  },
                  {
                    'name'  => 'test_repo2',
                    'base_url' => 'example2.com',
                    'ensure'  => 'present',
                    'gpgcheck' => 'true',
                  },
               ]

      define add_repo {
        yumrepo { $name:
          ensure   => $ensure,
          name     => $name,
          baseurl  => $base_url,
          gpgcheck => $gpgcheck,
          enabled  => 'true',
        }
      }
      add_repo { $repos: }
    }

К сожалению, это приводит к следующей ошибке:

Error: Could not retrieve catalog from remote server: Could not intern from text/pson: Could not intern from data: Could not find relationship source "::yum_repos::Add_repo[nametest_repo2ensurepresentgpgchecktruebase_urlexample2.com]"

Кто-нибудь может объяснить правильный способ сделать это?

Большое спасибо заранее!

1 Ответ

0 голосов
/ 02 ноября 2018

Чтобы перебрать объявления ресурсов (или более крупные блоки кода) в Puppet <4 без будущего синтаксического анализатора, нам нужно использовать хеши, определенный тип ресурса (если не перебирать внутренний тип) и <code>create_resources функция. Использование документировано здесь .

Для вашего конкретного случая код будет выглядеть так:

# hash of resources
$repos = {
  'test_repo1' => { 'base_url' => 'example1.com',
                    'ensure'   => present,
                    'gpgcheck' => true,
  },
  'test_repo2' => { 'base_url' => 'example2.com',
                    'ensure'   => present,
                    'gpgcheck' => true,
  },
}

# iterate over resource declarations
create_resources(yumrepo, $repos)

Если вы хотите перебрать более крупный блок ресурсов, то, используя в качестве примера определенный вами тип ресурса, мы изменили бы вышеупомянутое соответственно:

# defined resource type encapsulating code to iterate over
define add_repo($ensure, $base_url, $gpgcheck) {
  yumrepo { $title:
    ensure   => $ensure,
    baseurl  => $base_url,
    gpgcheck => $gpgcheck,
    enabled  => true,
  }
}

# iterate over resource declarations
create_resources(add_repo, $repos)
...