def中的多个数组

我有两个文件

class hadoopfile::file { $diskname = [aaa,bbb,ccc,ddd,eee,'] $filename = [02,03,04,05,06] hadoopfile::diskcreate_def { '$diskname:','$filename:' } #hadoopfile::diskcreate_def { $filename: } } define hadoopfile::diskcreate_def ( $diskname,$filename = $title) { physical_volume {["/dev/$diskname"]: ensure => present, } file { 'opt/db/$filename': ensure => directory, } mount { filemount: ensure => mounted, name => "opt/db/$filename", fstype => 'ext4', options => 'defaults', atboot => true, dump => '1', pass => '2', require => File["/opt/hd/db/data/$filename"] } } 

当我编译上面我得到了

Syntax error at '}'; expected '}' at /etc/hadoopfile/manifests/file.pp:15 on node Syntax error at '}'; expected '}' at /etc/hadoopfile/manifests/file.pp:15 on node我的疑问是,我们可以在define中创build通过两个variables。

尝试从第一个数组定义中删除“单引号 。 这应该使它编译。

 $diskname = [aaa,bbb,ccc,ddd,eee] 

然后,根据文档,可以将一个参数列表传递给一个类或一个定义的types 。 使用它来引用你定义的types

 hadoopfile::diskcreate_def { "${diskname}":, "${filename}": } 

看起来你正在寻找一个drivenamefilename的映射。 映射不是由数组对表示的 – 它们用散列表示。

 $disks = { '02' => { diskname => 'aaa', }, '03' => { diskname => 'bbb', }, '04' => { diskname => 'ccc', }, '05' => { diskname => 'ddd', }, '06' => { diskname => 'eee', }, } 

您可以通过create_resources函数将其转换为资源。

 create_resources('hadoopfile::diskcreate_def', $disks) 

散列中的每个键都成为资源标题,值散列保存属性/值对。

一般的评论 :不要以这种方式命名你的定义。 定义名称应描述每个资源在系统上的hadoopfile::mounted_volume ,如hadoopfile::mounted_volume