如何在 Puppet 中从 Hiera 文件定义节点?

如何在 Puppet 中从 Hiera 文件定义节点?

我正在使用 puppet 和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在 a 中定义 a define,也无法参数化节点名称。那么,有没有办法从 Hiera 文件中声明节点,并在其中配置它们?

答案1

为什么要在一个 hiera 文件中描述所有节点?hiera 的出色之处在于其分层配置。对不同的层次结构使用不同的配置文件,最后为不同的节点使用不同的 hiera 文件。所有这些层都将合并在一起。

相关内容