¿Cómo convertir una cadena a entero en Puppet?

8

Quiero verificar si el contenido de una variable es un número impar. Pero necesito un número entero para ello.

$ip_array = split($ipaddress, '.')
$odd_ip = $ip_array[3] % 2

if $odd_ip == 1 {
  notice("is odd")
}

¿Hay una manera fácil de convertir una cadena a entero?

MMás
fuente

Respuestas:

5

Puedes hacerlo:

$ n_timeout = 0 + $ timeout

Barry
fuente
Esto rompe con picaduras con ceros a la izquierda, por ejemplo, "04"
Gary van der Merwe
Con la marioneta 4, esto provocará una advertencia: Advertencia: la cadena '1' se coaccionó automáticamente al valor numérico 1 en ...
Slaven Rezic
La documentación de Puppet sugiere esto, y ofrece un método scanf para manejar la extracción versus la coerción entre pares. puppet.com/docs/puppet/latest/…
cgseller
3

He usado la función scanf en stdlib.

Un ejemplo de esto:

$ ram = scanf ("$ {:: memorysize_mb}", "% i")

Esto requiere títere> = 3.7.5

Andrés
fuente
1
Tenga en cuenta que esto devolverá una matriz, donde el primer elemento es el valor deseado. En la marioneta 4 es posible escribir algo como scanf (...) [0], en la marioneta 3 parece ser necesario dividir esto en dos declaraciones: primero asignar a una variable de matriz, luego obtener el primer elemento.
Slaven Rezic
Esto también es aceptable según la documentación de la marioneta puppet.com/docs/puppet/latest/… . Puppetlabs permite tanto el @barry anterior como las respuestas aquí.
cgseller
1

Su código funcionará exactamente como se define; Puppet convierte implícitamente cadenas y enteros según corresponda para el operador de comparación que se utiliza.

Daniel Pittman
fuente
Recibí el siguiente error: No se pudo coincidir con% en /etc/puppet/modules/my/manifests/target.pp:23 en el nodo mynode.domain.de
MMore
Si reemplazo '%' con '*' (prueba) -> el operando izquierdo de * no es un número en /etc/puppet/modules/my/manifests/target.pp:25 en el nodo mynode.domain.de
MMore
1
Ah Has encontrado un error genuino en Puppet. Debe presentar un ticket en projects.puppetlabs.com/projects/puppet/issues/new para que podamos solucionarlo.
Daniel Pittman
2
Puppet no hace eso cuando el valor proviene de hiera. Aparece el error "Error 400 en el SERVIDOR: error de comparación de Fixnum con String".
Rob