W języku lalkarskim nie ma żadnych pętli.
Ale można użyć tablicę zamiast prostego łańcucha o tytuł i zadeklarować kilka zasobów jednocześnie z tych samych params:
$b = '/opt/app'
file { [ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0644,
}
Można również zadeklarować wiele zasobów tego samego typu z różnymi params kończąc każdy zasób z ;
, który jest nieco bardziej zwarty niż powtarzając file
i {
S i }
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;
}
w konkretnym przypadku Pliki można ustawić źródło i użyć rekurencji:
file { "/opt/app":
source => "puppet:///appsmodule/appsdir",
recurse => true;
}
(które wymagałoby o źródło tej struktury katalogów dla lalek użyć jako źródła)
Można define a new resource type do ponownego użycia części param wielokrotnie:
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"]: }
Począwszy Puppet 2.6, jest dostępny Ruby DSL, które posiada wszystkie funkcje pętli można zapytać: http://www.puppetlabs.com/blog/ruby-dsl/ (nigdy nie używałem go, jednak). W Puppet 3.2, wprowadzono niektóre experimental loops, jednak te funkcje mogą się zmienić lub odejść w późniejszych wydaniach.
Dzięki! jak to działa: plik {[X, Y]: zapewnić = link, cel => [X1 + X, Y1 + Y]}? – user425720
Można użyć definicji. Dodano przykład do mojej odpowiedzi – freiheit
aah, idealnie. Dzięki! – user425720