将哈希传递给puppet / erb中的已定义类型

时间:2013-02-11 16:10:39

标签: linux erb puppet

我正试图在puppet中第一次使用哈希,所以在我的nodes.pp中我将使用它:

node test1.example.com {
    netset::int::vconf {"servers" :
        label1 => { 'comment' => 'VIP Test1', 'ipaddress' => '192.168.1.10', 'netmask' => '255.255.255.0', 'int_label' => 'TEST1' },
        label2 => { 'comment' => 'VIP Test2', 'ipaddress' => '192.168.1.11', 'netmask' => '255.255.255.0', 'int_label' => 'TEST2' },
    }
}

在我写的文件/etc/puppet/modules/netset/int/vconf.pp中,我正在创建一个已定义的类型:

define netset::int::vconf ($comment,$ipaddress){...do somethings...}

我的问题是如何将哈希的每个键传递给定义的类型?不知怎的,我想象我将不得不在某个地方创建一个循环,任何帮助都会有很大的帮助。

谢谢Dan

1 个答案:

答案 0 :(得分:1)

Puppet(还)不支持循环。所以你基本上想要的是创建一个哈希并将其传递给puppet函数" create_resources()"。因此,在您的情况下,它看起来像:

$my_hash = {
  'label1' => {
    'comment'   => 'VIP Test1',
    'ipaddress' => '192.168.1.10',
    'netmask'   => '255.255.255.0',
    'int_label' => 'TEST1'
  },
  'label2' => {
    'comment'   => 'VIP Test2',
    'ipaddress' => '192.168.1.11',
    'netmask'   => '255.255.255.0',
    'int_label' => 'TEST2'
   },
}

之后:

create_resources(::netset::int::vconf, $my_hash)

所以,它与你写下这样的东西基本相同:

::netset::int::vconf { 'label1' :
  'comment'   => 'VIP Test1',
  'ipaddress' => '192.168.1.10',
  'netmask'   => '255.255.255.0',
  'int_label' => 'TEST1'
},

::netset::int::vconf  { 'label2' :
  'comment'   => 'VIP Test2',
  'ipaddress' => '192.168.1.11',
  'netmask'   => '255.255.255.0',
  'int_label' => 'TEST2'
}