我有两个文件
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}": }
看起来你正在寻找一个drivename
到filename
的映射。 映射不是由数组对表示的 – 它们用散列表示。
$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
。