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

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

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

Другие вопросы по тегам