2013-09-26 82 views
6

我有一個簡單的木偶定義的資源,看起來像這樣:召喚傀儡定義的資源,多次

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