Comment convertir une chaîne en entier dans Puppet?

8

Je veux vérifier si le contenu d'une variable est un nombre impair. Mais j'ai besoin d'un entier pour ça.

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

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

Existe-t-il un moyen simple de convertir une chaîne en entier?

MMore
la source

Réponses:

5

Tu peux le faire:

$ n_timeout = 0 + $ timeout

Barry
la source
Cela rompt avec les piqûres avec des zéros en tête, par exemple "04"
Gary van der Merwe
Avec la marionnette 4, cela provoquera un avertissement: Avertissement: la chaîne "1" a été automatiquement contrainte à la valeur numérique 1 à ...
Slaven Rezic
La documentation de Puppet le suggère et propose une méthode scanf pour gérer l'extraction par rapport à la coercition par les pairs. puppet.com/docs/puppet/latest/…
cgseller
3

J'ai commencé à utiliser la fonction scanf dans stdlib.

Un exemple de ceci:

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

Cela nécessite une marionnette> = 3.7.5

Andrew
la source
1
Notez que cela retournera un tableau, où le premier élément est la valeur souhaitée. Dans la marionnette 4, il est possible d'écrire quelque chose comme scanf (...) [0], dans la marionnette 3, il semble nécessaire de diviser cela en deux instructions: d'abord attribuer à une variable de tableau, puis obtenir le premier élément.
Slaven Rezic
Ceci est également acceptable sur la base de la documentation de marionnettes puppet.com/docs/puppet/latest/… . Les @barry ci-dessus et les réponses ici sont autorisés par puppetlabs.
cgseller
1

Votre code fonctionnera exactement comme défini; Puppet convertit implicitement des chaînes et des entiers en fonction de l'opérateur de comparaison utilisé.

Daniel Pittman
la source
J'ai eu l'erreur suivante: Impossible de faire correspondre% à /etc/puppet/modules/my/manifests/target.pp:23 sur le nœud mynode.domain.de
MMore
Si je remplace '%' par '*' (testing) -> l'opérande gauche de * n'est pas un nombre sur /etc/puppet/modules/my/manifests/target.pp:25 sur le nœud mynode.domain.de
MMore
1
Ah. Vous avez trouvé un véritable bug dans Puppet. Vous devez déposer un ticket sur projects.puppetlabs.com/projects/puppet/issues/new afin que nous puissions le corriger.
Daniel Pittman
2
Puppet ne fait pas ça quand la valeur vient de hiera. Vous obtenez une erreur "Erreur 400 sur SERVER: la comparaison du Fixnum avec la chaîne a échoué".
Rob