多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 比较软件包的版本 软件包的版本号是个奇怪的东西。它们看起来像十进制的数字,但它们不是。 例如,一个版本号通常的形式为 2.6.4。如果你需要比较两个版本号, 不能做简单的字符串比较,因为 2.6.4 会比 2.6.12 大;也不能进行数字比较, 因为它们不是有效地数字。 Puppet 的 versioncmp 函数会帮我们解决这个问题。 若你给它传递两个版本号,它会比较它们,并返回一个值,指出谁是更大的: ``` versioncmp( A, B ) ``` 将返回如下值: * 若 A 和 B 相同,则返回 0 * 若 A 大于 B ,则返回大于 1 的值 * 若 A 小于 B ,则返回小于 0 的值 #### 操作步骤 1. 添加如下代码到你的配置清单: ``` $app_version = "1.2.2" $min_version = "1.2.10" if versioncmp( $app_version, $min_version ) >= 0 { notify { "Version OK": } } else { notify { "Upgrade needed": } } ``` 2. 运行 Puppet: ``` notice: Upgrade needed ``` 3. 现在更变 $app_version 的值: ``` $app_version = "1.2.14" ``` 4. 在次运行 Puppet: ``` notice: Version OK ``` #### 工作原理 我们指定了可接受的最小版本($min_version)是 1.2.10。 所以在上面的例子中,我们用 $app_version 为 1.2.2 的版本号与之比较。 简单的对两个字符串进行比较(例如,Ruby 中的字符串比较)将会给出错误的结果, 然而 versioncmp 却可以正确地检测出 1.2.2 小于 1.2.10 并提示我们 Upgrade needed。 当改变 $app_version 的值为 1.2.14 后,由于 versioncmp 正确地检测出 $app_version 大于 $min_version,所以提示我们 Version OK。