Declarações de caso de fantoche com intervalo inteiro

1



Eu preciso escrever um caso usando alguns intervalos, a fim de escrever de uma maneira melhor algo como o seguinte código espaguete:

if $mem < 1024 { $retvalue = "128M" } elsif $mem < 7000 { $retvalue = "160M" } elsif $mem < 15000 { $retvalue = "192M" } elsif $mem < 31000 { $retvalue = "256M" } else { $retvalue = "512M" }

É possível usar uma instrução case usando o fuction range (no stdlib) ou algo melhor que isso?


BR
Giuseppe

    
por FlexIt 24.07.2015 / 12:12

2 respostas

0

Para intervalos dessa magnitude, aconselho a não criar intervalos (ou seja, matrizes cheias de valores inteiros para varredura).

Sua abordagem é sólida. Se você realmente quer uma declaração de caso, você pode usar um código Ruby e a função inline_template , mas isso tem uma penalidade de desempenho e não adiciona muito em termos de manutenção.

    
por 27.07.2015 / 15:56
0

A instrução case do Puppet pode avaliar expressões e executará a primeira associada ao primeiro caso correspondente.

Não é bem assim:

case $mem {
  0..1023:      { $retvalue = "128M" }
  1024..6999:   { $retvalue = "160M" }
  7000...14999: { $retvalue = "192M" }
  15000..30999: { $retvalue = "256M" }
  default:      { $retvalue = "512M" }
}

No entanto, você pode dar expressões e dizer que corresponde ao primeiro que é true .

Então você pode fazer isso:

case true {
  $mem < 1024:  { $retvalue = "128M" }
  $mem < 7000:  { $retvalue = "160M" }
  $mem < 15000: { $retvalue = "192M" }
  $mem < 31000: { $retvalue = "256M" }
  default:      { $retvalue = "512M" }
}

Da mesma forma, você pode usar um seletor para retornar o valor correto:

$retvalue = true ? {
  $mem < 1024  => "128M",
  $mem < 7000  => "160M",
  $mem < 15000 => "192M",
  $mem < 31000 => "256M",
  default      => "512M",
}
    
por 25.08.2018 / 07:53