Назад | Перейти на главную страницу

Как определить узлы из файла Hiera в Puppet?

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

Во встроенном типе конфигурации маршрутизатора вы можете указать список узлов, а затем конфигурацию внутри этого узла:

node "c2950.domain.com" { 
  Interface { duplex => auto, speed => auto } 
  interface { "FastEthernet 0/1": 
    description => "--> to end-user workstation", 
    mode => access, native_vlan => 1000 
  # [...] More configuration 
}

Что я пытаюсь сделать, так это переместить объявление манифеста узлов и конфигурацию моего настраиваемого типа в файл Hiera, подобный этому:

nodes:
  - node1
  - node2

config_device:
  node1:
    custom_parameter: "whatever1"
  node2:
    custom_parameter: "whatever2" 

А затем в манифесте перебираем файл hiera, создавая узлы с конфигурацией каждого узла с чем-то вроде (я беру в качестве ссылки этот вопрос в serverfault):

class my_class {
  $nodes = hiera_array('nodes')

  define hash_extract() {
    $conf_hash = hiera_hash("config_device")
    $custom_paramter = $conf_hash[$name]     ## TRICK lies in $name variable

    node $name {
      my_custom_device { $name:
        custom_parameter   => $device_conf['custom_parameter']
      }
    }
  }
  hash_extract{$pdu_names: }
  }
}

Но для этого решения у меня две проблемы, я не могу определить node внутри define и я не могу параметризовать имя узла. Итак, есть ли способ объявить узлы из файла Hiera с их конфигурацией внутри?

Почему вы хотите описать все узлы в одном файле иерархии? Что делает hiera превосходной, так это ее иерархическая конфигурация. Используйте отдельные файлы конфигурации для отдельных уровней иерархии и, наконец, получите отдельный файл иерархии для отдельного узла. И все эти слои будут объединены.