官术网_书友最值得收藏!

Comparing package versions

Package version numbers are odd things. They look like decimal numbers, but they're not: a version number is often in the form of 2.6.4, for example. If you need to compare one version number with another, you can't do a straightforward string comparison: 2.6.4 would be interpreted as greater than 2.6.12. And a numeric comparison won't work because they're not valid numbers.

Puppet's versioncmp function comes to the rescue. If you pass two things that look like version numbers, it will compare them and return a value indicating which is greater:

versioncmp( A, B )

returns:

  • 0 if A and B are equal
  • Greater than 1 if A is higher than B
  • Less than 0 if A is less than B

How to do it…

Here's an example using the versioncmp function:

  1. Modify your site.pp file as follows:
    node 'cookbook' {
      $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. Run Puppet:
    [root@cookbook ~]# puppet agent -t
    Info: Caching catalog for cookbook.example.com
    Notice: Upgrade needed
    
  3. Now change the value of $app_version:
    $app_version = '1.2.14'
  4. Run Puppet again:
    [root@cookbook ~]# puppet agent -t
    Info: Caching catalog for cookbook.example.com
    Notice: Version OK
    

How it works…

We've specified that the minimum acceptable version ($min_version) is 1.2.10. So, in the first example, we want to compare it with $app_version of 1.2.2. A simple alphabetic comparison of these two strings (in Ruby, for example) would give the wrong result, but versioncmp correctly determines that 1.2.2 is less than 1.2.10 and alerts us that we need to upgrade.

In the second example, $app_version is now 1.2.14, which versioncmp correctly recognizes as greater than $min_version and so we get the message Version OK.

主站蜘蛛池模板: 重庆市| 宾阳县| 左权县| 东海县| 永登县| 上虞市| 师宗县| 乐业县| 平果县| 左贡县| 武冈市| 广东省| 石阡县| 镇安县| 日喀则市| 武安市| 交城县| 南溪县| 桂阳县| 沂水县| 富阳市| 鲁山县| 永春县| 阜宁县| 清镇市| 酉阳| 巩义市| 鄱阳县| 原阳县| 新蔡县| 错那县| 镇雄县| 灵寿县| 万盛区| 宝丰县| 华坪县| 卫辉市| 新疆| 和静县| 邓州市| 西吉县|