автоматически создавать требуемые параметры по данным в hiera - PullRequest
1 голос
/ 26 сентября 2019

Есть ли способ создать параметр require с помощью hiera?Возможно, поиск возможен, но я новичок в марионетке и не знаю всех возможностей.

Я использую модуль oneview-puppet для создания ресурсов из приложения марионетки.

Ресурсы были созданы hiera как один файл конфигурации (YAML).Там я объединяю несколько ресурсов из модуля выше.Эти ресурсы имеют сложные зависимости.Обзор можно найти здесь (стр. 29).

Таким образом, для каждого ресурса мне требуются зависимости, хотя они могут быть "найдены" в моем файле конфигурации.На самом деле это работает только тогда, когда ресурсы, созданные его последовательностью в site / manifest / init.pp.

Я попытался добавить в hiera параметр require, но там он будет интерпретирован как строка.

site / oneviewconf / manifest / init.pp пример:

class oneviewconf (
  Hash $oneview_ethernet_networks = {},
  Hash $oneview_logical_interconnect_groups = {}
)
{
  $oneview_ethernet_networks.each | $k,$v | {
    oneview_ethernet_network { $k:                      # -> oneview-puppet resource
      * => $v,
    }
  }
  $oneview_logical_interconnect_groups.each | $k,$v | {
    oneview_logical_interconnect_group { $k:             # -> oneview-puppet resource
      require => Oneview_ethernet_network['VLAN0001']
      * => $v,
    }
  }
}

Пример Hiera:

---
oneviewconf::oneview_ethernet_networks:
  VLAN0001:
    ensure: present
    data:
      name: 'VLAN0001'
      vlanId: 0001
oneviewconf::oneview_logical_interconnect_groups:
  LIG_A:
    ensure: present
    data:
      name: 'LIG_A'
      networkUris: ['VLAN0001']

1 Ответ

0 голосов
/ 26 сентября 2019

Есть ли способ создать параметр require с помощью hiera?

Да.

Я пытался добавить параметр require в hiera,но там это будет интерпретироваться как строка.

Нет, если вы правильно отформатируете ее.Если вы посмотрите на скомпилированный каталог Puppet, то увидите, как ссылки на ресурсы кодируются в каталоге JSON, и это также говорит о том, как их нужно кодировать в файл HAMER YAML.

Возьмите манифест, подобный этому:

class test {
  notify { 'notify1':
    message => 'I am notify 1',
    require => Notify['notify2'],
  }
  notify { 'notify2':
    'message' => 'I am notify 2',
  }
}

Теперь скомпилируйте этот каталог и загляните в него.Вы увидите:

    {
      "type": "Notify",
      "title": "notify1",
...
      "parameters": {
        "message": "I am notify 1",
        "require": "Notify[notify2]"
      }
    },

В случае, если это не очевидно, тогда как манифесты требуют, чтобы заголовок ресурса заключался в кавычки наподобие Notify['notify2'], эти кавычки вокруг заголовка ресурса удаляются в каталоге, и он становится Notify[notify2].

Таким образом, я могу добавить параметр в Hiera таким же образом и выполнить рефакторинг всего этого следующим образом.

Hiera:

---
notify_resources:
  notify1:
    message: I am notify 1
    require: Notify[notify2]
  notify2:
    message: I am notify 2

Манифесты:

class test {
  $notify_resources = lookup('notify_resources')
  $notify_resources.each |$k,$v| {
    notify { $k: * => $v }
  }
}

Должны ли вы сделать это, хотя?Я склонен согласиться с комментариями Джона Боллинджера о том, что ссылки на ресурсы в Hiera могут указывать на то, что у вас слишком много данных / кода.

...