Trong ngôn ngữ con rối, không có vòng lặp nào.
Nhưng bạn có thể sử dụng một mảng thay vì một chuỗi đơn giản cho danh hiệu và tuyên bố nhiều nguồn lực cùng một lúc với params cùng:
$b = '/opt/app'
file { [ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0644,
}
Bạn cũng có thể tuyên bố nhiều tài nguyên cùng loại với nhau params bởi kết thúc mỗi tài nguyên với một ;
, đó là nhỏ gọn hơn một chút so với lặp lại những file
và {
s và }
s:
file {
[ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0755;
[ "$b/app1/secret", "$b/app2/secret" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0700;
}
trong trường hợp cụ thể của file, bạn có thể thiết lập một nguồn và sử dụng đệ quy:
file { "/opt/app":
source => "puppet:///appsmodule/appsdir",
recurse => true;
}
(mà sẽ đòi hỏi phải có một nguồn mà cấu trúc thư mục cho con rối để sử dụng như là nguồn)
Bạn có thể define a new resource type để tái sử dụng một phần param nhiều lần:
define foo {
file {
"/tmp/app/${title}":
ensure => directory,
owner => 'root',
mode => 0755;
"/tmp/otherapp/${title}":
ensure => link,
target => "/tmp/app/${title}",
require => File["/tmp/app/${title}"]
}
}
foo { ["app1", "app2", "app3", "app4"]: }
Bắt đầu với rối 2.6, có một DSL của Ruby có sẵn mà có tất cả các chức năng vòng lặp bạn có thể yêu cầu: http://www.puppetlabs.com/blog/ruby-dsl/ (tôi chưa bao giờ sử dụng nó, tuy nhiên). Trong Puppet 3.2, họ đã giới thiệu một số experimental loops, tuy nhiên những tính năng đó có thể thay đổi hoặc biến mất trong các bản phát hành sau này.
Cảm ơn! làm thế nào để có được điều này làm việc: tập tin {[X, Y]: đảm bảo = liên kết, mục tiêu => [X1 + X, Y1 + Y]}? – user425720
Bạn có thể sử dụng một định nghĩa. Đã thêm một ví dụ vào câu trả lời của tôi – freiheit
aah, hoàn hảo. Cảm ơn! – user425720