def 中的多个数组

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 我的疑问是,我们是否可以在定义中创建传递两个变量。

答案1

尝试删除单引号来自第一个数组定义。这应该可以编译。

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

然后,根据文档,可以将参数列表传递给班级定义类型. 使用它来引用你定义的类型

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

答案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

相关内容