2013-09-26 32 views
6

Tôi đã có một đơn giản rối định nghĩa tài nguyên đó trông như thế này:gọi con rối được xác định tài nguyên với nhiều thông số, nhiều lần

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

tôi cần phải gọi khu vực này một số lần với các thông số khác nhau, nhưng có thể 't tìm ra cách để làm điều này mà không gọi một cách rõ ràng mything() nhiều lần.

Lý tưởng nhất, tôi muốn có tất cả các thông số cho lưu trữ trong một số loại mảng, và sau đó chỉ cần gọi mything($array), một chút như thế này:

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

mything($array) 

Nhưng điều này không xuất hiện để làm việc. Tôi khá chắc chắn điều này sẽ làm việc nếu tài nguyên của tôi chỉ lấy một tham số duy nhất và tôi chỉ có một mảng giá trị bằng phẳng, nhưng tôi có thể làm điều tương tự với nhiều tham số được đặt tên không?

+0

Tôi đã thịt nó ra một bit - Tôi đã hy vọng các chi tiết không quan trọng và có một cách chung chung hợp lý để làm điều này. – growse

+0

Có. Kiểm tra câu trả lời của tôi ... – iamauser

Trả lời

7

Điều này có thể phù hợp với trường hợp của bạn. Thay vì xác định mảng trong một biến, làm cho chúng tham số khi gọi kiểu 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"; 
} 

tôi đã không kiểm tra toàn bộ điều, những gì tôi đã được thử nghiệm là define này để thay thế và nó hoạt động:

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

Kết quả:

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

Thú vị - không biết bạn có thể làm điều đó. Tôi đoán lý do tôi muốn đưa chúng vào một biến là nếu tôi muốn chuyển cấu trúc đó đến nhiều hơn một định nghĩa, nhưng điều này chắc chắn là gọn gàng hơn những gì tôi đã có ban đầu. – growse

Các vấn đề liên quan