En el lenguaje de títeres, no, no hay bucles.
Pero se puede utilizar una matriz en lugar de una cadena simple para el título y declarar varios recursos al mismo tiempo con los mismos parametros:
$b = '/opt/app'
file { [ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0644,
}
También puede declarar muchos recursos del mismo tipo con diferentes params por finalización de cada recurso con un ;
, que es un poco más compacto que la repetición de la file
y los {
s y }
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;
}
en el caso específico de archivos, puede configurar un origen y el uso de recursividad:
file { "/opt/app":
source => "puppet:///appsmodule/appsdir",
recurse => true;
}
(que requeriría que tiene una fuente de esa estructura de directorios de la marioneta que se utilizará como fuente)
Usted puede define a new resource type reutilizar una parte de los param varias veces:
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"]: }
a partir de la marioneta 2.6, hay un DSL Rubí disponibles que tiene toda la funcionalidad de bucle que se puede pedir: http://www.puppetlabs.com/blog/ruby-dsl/ (nunca he utilizado, sin embargo). En Puppet 3.2, introdujeron algunos experimental loops, sin embargo, esas características pueden cambiar o desaparecer en versiones posteriores.
Gracias! cómo hacerlo funcionar: archivo {[X, Y]: asegurar = enlace, destino => [X1 + X, Y1 + Y]}? – user425720
Puede usar un definir. Agregué un ejemplo a mi respuesta – freiheit
aah, perfecto. ¡Gracias! – user425720