我有两个文件
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
我的疑问是,我们是否可以在定义中创建传递两个变量。
答案1
答案2
看起来您正在寻找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
。