Я хочу использовать марионетку для управления кластером hadoop. На машинах у нас есть несколько каталогов, которые необходимо создать и установить разрешения.
Но я не могу добавлять значения массива для определенных методов.
define hdfs_site( $dirs ) {
file { $dirs:
ensure => directory,
owner => "hadoop",
group => "hadoop",
mode => 755;
}
file {
"/opt/hadoop/conf/hdfs-site.xml":
content => template("hdfs-site.xml.erb"),
owner => "root",
group => "root",
mode => 644;
}
}
define hadoop_slave( $mem, $cpu, $dirs ) {
hadoop_base {
mem => $mem,
cpu => $cpu,
}
hdfs_site {
dirs => $dirs,
}
}
hadoop_base
похоже на hdfs_site
.
РЕДАКТИРОВАТЬ
Сообщение об ошибке было:
Не удалось выполнить синтаксический анализ для производственной среды: все спецификации ресурсов требуют имен; ожидается '% s' в /etc/puppet/modules/hadoop/manifests/init.pp:52
какой $dirs
линия в hadoop_slave
Как сказано в сообщении, любая спецификация ресурса требует имени.
В вашем конкретном случае должен работать следующий фрагмент:
define hadoop_slave( $mem, $cpu, $dirs ) {
hadoop_base { "${name}_hadoop_base":
mem => $mem,
cpu => $cpu,
}
hdfs_site { "${name}_hdfs_site":
dirs => $dirs,
}
}