Как передать две или более переменных для определения в 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
внутри ресурса определения. Мне тоже нужно 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')
}
}
Кроме того, поскольку определенные типы являются типами ресурсов, вам следует отказаться от концепции "передачи" значений таким же образом, как если бы они были функциями. Эта ментальная модель, вероятно, предаст вас. В частности, это, безусловно, даст вам неверное представление о том, что произойдет, если вы укажете массив или хеш в качестве заголовка ресурса.
В частности, вы должны понимать, что в любом объявлении ресурса, если вы задаете заголовок ресурса в виде массива, это означает отдельный ресурс для каждого члена массива с элементом массива в качестве заголовка этого ресурса. В этом случае каждый из этих ресурсов получает те же значения параметров, что и в теле объявления. Кроме того, заголовки ресурсов всегда являются строками. За исключением одного уровня массивов, как описано выше, если вы дадите что-нибудь еще в качестве заголовка ресурса, он будет преобразован в строку.