Назад | Перейти на главную страницу

множественный массив в 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 Я сомневаюсь, можем ли мы создать переменную pass two в define.

Казалось бы, вы ищете отображение 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.

Попробуйте удалить одинарную кавычку ' из первого определения массива. Это должно заставить его скомпилировать.

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

Затем, согласно документации, можно передать список параметров в класс, или определенный тип. Используйте это для ссылки на ваш определенный тип

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