2013-09-26 4 views
6

У меня простой кукольный определенный ресурс, который выглядит следующим образом:Calling кукольный определенный ресурс с несколькими параметрами, несколько раз

define mything($number, $device, $otherthing) { 
    file{"/place/${number}": 
     ensure => directory 
    } 
    mount { "/place/${number}": 
     device => $device, 
     ensure => mounted, 
     require => File["/place/${number}"] 
    } 
    file {"/place/${number}/${otherthing}": 
     ensure => directory, 
     require => Mount['/place/${number}'] 
    } 
} 

Мне нужно вызвать этот ресурс несколько раз с разными параметрами, но может Не выясните, как это сделать, не повторяя явным образом вызов mything().

В идеале, я бы все параметры хранимая в каком-то массиве, а затем просто вызвать mything($array), немного как это:

$array = [ 
    {number => 3, something => 'yes', otherthing => 'whatever'}, 
    {number => 17, something => 'ooo', otherthing => 'text'}, 
    {number => 4, something => 'no', otherthing => 'random'}, 
] 

mything($array) 

Но это, кажется, не работает. Я уверен, что это сработает, если мой ресурс взял только один параметр, и у меня просто был плоский массив значений, но могу ли я сделать то же самое с несколькими именованными параметрами?

+0

Я конкретизированы его бит - я надеялся, что детали не важны и что существует разумный общий способ сделать это. – growse

+0

Да. Проверьте мой ответ ... – iamauser

ответ

7

Это может сработать для вашего дела. Вместо определения массива в переменной, сделайте их параметры при вызове типа define.

define mything($number, $device, $otherthing) { 
    file{"/place/${number}": 
     ensure => directory 
    } 
    mount { "/place/${number}": 
     device => $device, 
     ensure => mounted, 
     require => File["/place/${number}"] 
    } 
    file {"/place/${number}/${otherthing}": 
     ensure => directory, 
     require => Mount['/place/${number}'] 
    } 
} 

mything { 
    "k1" : number => "3", device => "Yes", otherthing => "Whatever"; 
    "k2" : number => "17", device => "Noo", otherthing => "Text"; 
    "k3" : number => "5", device => "Oui", otherthing => "ZIP"; 
} 

Я не проверял всю вещь, что я испытал это define вместо и она работает:

define mything($number, $device, $otherthing){ 
    notify{"$device is $number not $otherthing":} 
} 

Результаты:

Mything[k1]/Notify[Yes is 3 not Whatever]/message: 
Mything[k2]/Notify[Noo is 17 not Text]/message: 
+0

Интересно - не знал, что вы можете это сделать. Я предполагаю, что моя причина для того, чтобы поместить их в переменную, - это если я хочу передать эту структуру более чем одному определению, но это, безусловно, более аккуратно, чем то, что я изначально. – growse

Смежные вопросы