Как читать ключи в массив? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь прочитать ключи из файла hiera json в массив.

Файл json выглядит следующим образом:

{
  "network::interfaces": {
    "eth0": {
      "ip": "10.111.22.10"
    },
    "eth1": {
      "ip": "10.111.22.11"
    },
    "eth2": {
      "ip": "10.111.22.12"
    }
  }
}

В моем коде Puppet я делаю это:

$network_interfaces = hiera_array('network::interfaces')
notice($network_interfaces)

Что приводит к следующему:

Notice: Scope(Class[Role::Vagrant]): {eth0 => {ip => 10.111.22.10}, eth2 => {ip => 10.111.22.11}, eth3 => {ip => 10.111.22.12}}

Но мне нужны только интерфейсы: [eth0, eth1, eth2]

Может кто-нибудь дать мне знатькак это сделать?

1 Ответ

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

Разница между hiera_array() и простым hiera() связана с тем, что происходит, когда запрошенный ключ (network::interfaces в вашем случае) присутствует на нескольких уровнях иерархии. Это очень мало связано с тем, в какой форме вы хотите получить данные, и ничего не делает , что связано с выбором фрагментов структур данных. hiera_array() запрашивает поиск "слияние массивов". Более современная функция lookup() именует это как «уникальную» стратегию слияния.

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

$network_interfaces = keys(hiera('network::interfaces'))

В Puppet 4 вам нужно будет использовать функцию keys(), предоставляемую модулем puppetlabs / stdlib. Начиная с Puppet 5 эта функция появляется в ядре Puppet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...