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

Есть ли способ использовать массивы в модуле марионетки (не в шаблоне)?

Я хочу использовать марионетку для управления кластером 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,
    }
}