Creación de variables de marionetas en función de las condiciones

Creación de variables de marionetas en función de las condiciones

Así que me estoy adaptando a las variables inmutables en Puppet y ahora busco algún consejo o aclaración sobre si ya estoy en el camino correcto.

Tengo un directorio que me gustaría sincronizar, pero potencialmente varios subdirectorios del mismo. Entonces me gustaría crear una serie de una o más rutas para pasar a un recursivoarchivorecurso. Lo ideal sería algo como esto.

$paths = ['fist/path'] # assume this is provided via class parameter
# this should work, since it's only overriding what was provided from higher scope
if($condition) {
  $paths += 'second/path'
}
# this won't fly, since $paths has already been set once locally
if($another_condition) {
  $paths += 'third/path'
}

pero no puedo hacer eso, cierto, ya que las variables son inmutables. Lo que se me ocurrió como el "mejor" enfoque hasta ahora es algo como esto

$paths = ['fist/path']
if($condition) {
  $condition_1_path = ['second/path']
} else {
  $condition_1_path = []
}
if($another_condition) {
  $condition_2_path = ['third/path']
} else {
  $condition_2_path = []
}

$paths = concat($paths, $condition_1_path, $condition_2_path)

No estoy seguro siconcatomitirá una entrada del resultado si se proporciona una matriz vacía para uno de sus argumentos, pero esperará para probarlo una vez quedescubre cómo cargar stdlib.

De cualquier manera, mirar este código, para mí, es simplemente horrible. ¿Existe una forma más limpia de hacer algo como esto?

Respuesta1

Es feo, pero lo he hecho así.

if($condition) {
  $condition_1_path = 'first/path'
} else {
  $condition_1_path = ''
}
if($another_condition) {
  $condition_2_path = 'second/path'
} else {
  $condition_2_path = ''
}

# split into array based on whitespace
$mylistofpaths = split("$condition_1_path $condition_2_path", '\s+')

información relacionada