У меня есть машина ec2 Linux-16.04, и на ней установлен Jenkins.
Я хотел бы иметь задание Jenkins по развертыванию моего Node-сервера на той же машине под другим пользователем. но в марионетке 4.x и выше .. он опускается до значения по умолчанию "не знаю" (поэтому оператор сравнения не соответствует) .. Я считаю, что это как-то связано с фактером, возвращающим значение в виде строки, и я знаю puppet 4.x намного строже со строками .. Я пробовал цитировать условные выражения «5», «6» и т. д., но без всякой радости ...
Этот факт является строкой, которую вы можете доказать с помощью:
notice("${type($operatingsystemmajrelease)}")
Что вернет:
Notice: Scope(Class[main]): String
Таким образом, даже если он выглядит числовым, это должно быть:
$version = $operatingsystemmajrelease ? {
'5' => 'five',
'6' => 'six',
'7' => 'seven',
default => "don't know",
}
Если вы хотите, чтобы это было действительное целое число для целей использования операторов <
/ >
, вы всегда можете сделать:
$version = Integer($operatingsystemmajrelease)
notice("${version} is of type ${type($version)}")
Что даст вам:
Notice: Scope(Class[main]): 7 is of type Integer[7, 7]
и т. Д. однако есть также функция versioncmp ()
специально для сравнения номеров версий. Есть также более новые структурированные факты, поэтому вы, вероятно, захотите использовать $ fact ['os'] ['release'] ['major']
(который также является строкой).