У меня есть два файла
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
Мое сомнение, можем мы создавать передачу, которую определяет две переменная в.
Попробуйте удалить одинарную кавычку ' из первого определения массива. Это должно заставить его скомпилировать.
$diskname = [aaa,bbb,ccc,ddd,eee]
Затем, согласно документации, можно передать список параметров в класс или в определенный тип . Используйте его для ссылки на ваш определенный тип
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 :: mount_volume
.