Как передать две или более переменных для определения в Puppet
Я ударил, чтобы передать несколько аргументов в define.
ниже приведен мой код. Я хотел бы передать два массива внутри определения, но я могу передать только один, как показано ниже.
class test {
$path = [$path1,$path2]
$filename = [$name1,$name2]
define testscript { $filename: } // Can able to pass one value.
}
define testscript () {
file {"/etc/init.d/${title}": //Can able to receive the file name.
ensure => file,
content => template('test/test.conf.erb'),
}
из моего кода выше, я могу получить filename
внутри ресурса define. Мне тоже нужно path
для установки значения в шаблоне. Я не могу отправить / получить второй аргумент в шаблон.
есть ли способ улучшить мой код, чтобы передать два значения ( $path
и $filename
) внутри определить ресурс ?
любая помощь очень ценится.
1 ответов
есть ли способ улучшить мой код, чтобы передать два значения ($path и $filename ) внутри define resource ?
Puppet имеет хорошую документацию, которая охватывает эту область хорошо.
для начала вам нужно оценить, что определенный тип-это тип ресурса, практически во всех отношениях аналогичный любому встроенному или расширенному типу. Если ваш определенный тип принимает параметры, то вы привязываете значения к этим параметрам так же, как вы будет в любом другом объявлении ресурса. Например:
class mymodule::test {
mymodule::testscript { $name1: path => $path1 }
mymodule::testscript { $name2: path => $path2 }
}
define mymodule::testscript ($path) {
file {"${path}/${title}":
ensure => 'file',
content => template('test/test.conf.erb')
}
}
кроме того, поскольку определенные типы являются типами ресурсов, вы должны отбросить концепцию "передачи" значений им, как если бы они были вместо функций. Эта ментальная модель, скорее всего, предаст вас. В частности, это, безусловно, даст вам неправильное ожидание о том, что произойдет, если вы укажете массив или хэш в качестве заголовка ресурса.
в частности, вам нужно понять, что в любом объявление ресурса, если вы даете заголовок ресурса как массив, то это означает отдельный ресурс для каждого члена массива, с членом массива в качестве заголовка этого ресурса. В этом случае каждый из этих ресурсов получает те же значения параметров, что и в теле объявления. Кроме того, заголовки ресурсов всегда являются строками. За исключением одного уровня массивов, как описано выше, если вы дадите что-либо еще в качестве заголовка ресурса, оно будет преобразовано в строку.