最近在寫 puppet agent 的 module,為了要支援 Puppet 5 無痛升級,所以用到了 versioncmp 這個 function。
versioncmp 的用法是用兩個版本做比對,然後 return 1/0/-1 的值做判斷
$result = versioncmp(a, b)
判斷方式:
1 if version a is greater than version b
0 if the versions are equal
-1 if version a is less than version b
先講應用情境:
主要是 puppet-agent 的 3-4 和 5 的版本會需要不同的 repository,所以必須在 5.0.0 這個版本界線做判斷
以 Ubuntu 16.04 為例:
- puppet5:https://apt.puppetlabs.com/puppet5-release-xenial.deb
- puppet4:https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
如果我想要 5.0.0 開始的版本給予 $puppet5 的話可以這樣寫
$puppet5 = 'https://apt.puppetlabs.com/puppet5-release-xenial.deb' $puppet4 = 'https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb' if versioncmp($puppet_version, '5.0.0') >= 0 { $repo = $puppet5 } else { $repo = $puppet4 }
就可以直接拿 $repo 繼續往下做了 …