Как передать две или более переменных для определения в 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')
  }
}

кроме того, поскольку определенные типы являются типами ресурсов, вы должны отбросить концепцию "передачи" значений им, как если бы они были вместо функций. Эта ментальная модель, скорее всего, предаст вас. В частности, это, безусловно, даст вам неправильное ожидание о том, что произойдет, если вы укажете массив или хэш в качестве заголовка ресурса.

в частности, вам нужно понять, что в любом объявление ресурса, если вы даете заголовок ресурса как массив, то это означает отдельный ресурс для каждого члена массива, с членом массива в качестве заголовка этого ресурса. В этом случае каждый из этих ресурсов получает те же значения параметров, что и в теле объявления. Кроме того, заголовки ресурсов всегда являются строками. За исключением одного уровня массивов, как описано выше, если вы дадите что-либо еще в качестве заголовка ресурса, оно будет преобразовано в строку.