Как преобразовать строку в целое число в Puppet?

8

Я хочу проверить, является ли содержимое переменной нечетным числом. Но мне нужно целое число для этого.

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

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

Есть ли простой способ преобразовать строку в целое число?

MMore
источник

Ответы:

5

Ты можешь сделать это:

$ n_timeout = 0 + $ timeout

Барри
источник
Это разрывается с укусами с ведущими нулями, например, «04»
Гэри ван дер Мерве
С куклой 4 это вызовет предупреждение: Предупреждение: строка '1' была автоматически приведена к числовому значению 1 в ...
Slaven Rezic
Документация Puppet предлагает это и предлагает метод scanf для обработки извлечения в сравнении с принуждением сверстников. puppet.com/docs/puppet/latest/...
cgseller
3

Я привык использовать функцию scanf в stdlib.

Пример этого:

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

Это требует кукольный> = 3.7.5

Эндрю
источник
1
Обратите внимание, что это вернет массив, где первый элемент является желаемым значением. В марионетке 4 можно написать что-то вроде scanf (...) [0], в марионетке 3 кажется необходимым разделить это на два оператора: сначала назначить переменную массива, а затем получить первый элемент.
Slaven Rezic
Это также допустимо на основе документации кукол puppet.com/docs/puppet/latest/… . Как @barry выше, так и ответы здесь разрешены puppetlabs.
cgseller
1

Ваш код будет работать точно так, как определено; Puppet неявно преобразует строки и целые числа в соответствии с используемым оператором сравнения.

Даниэль Питман
источник
Я получил следующую ошибку: Не удалось сопоставить% в /etc/puppet/modules/my/manifests/target.pp:23 на узле mynode.domain.de
MMore
Если я заменю «%» на «*» (тестирование) -> левый операнд * не является числом в /etc/puppet/modules/my/manifests/target.pp:25 на узле mynode.domain.de
MMore
1
Ах. Вы нашли настоящую ошибку в Puppet. Вы должны подать заявку по адресу projects.puppetlabs.com/projects/puppet/issues/new, чтобы мы могли это исправить.
Даниэль Питтман
2
Puppet не делает этого, когда ценность исходит от hiera. Появляется ошибка «Ошибка 400 на сервере SERVER: сравнение Fixnum с ошибкой строки».
Роб