2013-09-26 5 views
6

Ho una risorsa definita semplice fantoccio che assomiglia a questo:Calling fantoccio risorsa definita con più parametri, più volte

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}'] 
    } 
} 

ho bisogno di chiamare questa risorsa un certo numero di volte con parametri diversi, ma può 'capire come fare questo senza chiamare esplicitamente mything() ripetutamente.

Idealmente, avrei tutti i parametri per la stored in una sorta di array, quindi basta chiamare mything($array), un po 'come questo:

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

mything($array) 

Ma questo non sembra funzionare. Sono abbastanza sicuro che ciò funzionerebbe se la mia risorsa avesse solo un singolo parametro e io avessi solo una serie di valori flat, ma posso fare la stessa cosa con più parametri con nome?

+0

ho polpa fuori un un po '- avevo sperato che i dettagli non fossero importanti e che esistesse un modo generico ragionevole per farlo. – growse

+0

Sì. Controlla la mia risposta ... – iamauser

risposta

7

Questo potrebbe funzionare per il tuo caso. Invece di definire l'array in una variabile, impostali come parametri quando chiami il tipo 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"; 
} 

Non ho ancora testato l'intera cosa, quello che ho provato è invece questo define e funziona:

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

Risultati:

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

Interessante - non sapevo che potevi farlo. Credo che la ragione per cui voglio metterli in una variabile è se volessi passare quella struttura a più di una definizione, ma questo è certamente più ordinato di quello che avevo originariamente. – growse