Читать несколько ключей хеша и хранить только уникальные значения - PullRequest
1 голос
/ 29 марта 2019

Если у меня есть данные в Hiera, такие как:

resource_adapter_instances:
  'Adp1':
    adapter_plan_dir: "/opt/weblogic/middleware"
    adapter_plan:     'Plan_DB.xml'
  'Adp2':
    adapter_plan_dir: "/opt/weblogic/middleware"
    adapter_plan:     'ODB_Plan_DB.xml'
  'Adp3':
    adapter_plan_dir: "/opt/weblogic/middleware"
    adapter_plan:     'Plan_DB.xml'

И мне нужно преобразовать это в массив вроде этого, отметив, что дубликаты удаляются:

[/opt/weblogic/middleware/Plan_DB.xml, /opt/weblogic/middleware/ODB_Plan_DB.xml]

Я знаю, что у меня естьиспользовать карту Puppet , но я действительно борюсь с ней.

Я попробовал это:

$resource_adapter_instances = hiera('resource_adapter_instances', {})
$resource_adapter_paths = $resource_adapter_instances.map |$h|{$h['adapter_plan_dir']},{$h['adapter_plan']}.join('/').uniq
notice($resource_adapter_instances)

Но это не работает, и выдает синтаксические ошибки.Как мне это сделать?

1 Ответ

3 голосов
/ 29 марта 2019

Вы на правильном пути.Возможное решение заключается в следующем:

$resource_adapter_instances = lookup('resource_adapter_instances', {})
$resource_adapter_paths =
  $resource_adapter_instances.map |$x| {
    [$x[1]['adapter_plan_dir'], $x[1]['adapter_plan']].join('/')
  }
  .unique
notice($resource_adapter_paths)

Несколько дополнительных замечаний:

  • Функция hiera устарела , поэтому я переписал, используя lookup иВы тоже должны.

  • Функция отображения Puppet может быть немного запутанной - особенно если вам нужно перебирать ее через вложенный Hash, как в вашем случае.На каждой итерации Puppet передает каждую пару ключ-значение в виде массива в форме [key, value].Таким образом, $ x [0] получает ваш хэш-ключ (Adp1 и т. Д.), А $ x [1] получает данные с правой стороны.

  • Уникальная функция Puppet не uniqкак в Bash, Ruby и т. д., но на самом деле обозначается как unique.

  • Примечание. Я переписал его без длинных строк.Гораздо легче читать.

Если вы подадите куклу, вы получите:

Notice: Scope(Class[main]): [/opt/weblogic/middleware/Plan_DB.xml,
  /opt/weblogic/middleware/ODB_Plan_DB.xml]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...