Skip to content

Commit

Permalink
Rework the *_{min,max}_version? functions
Browse files Browse the repository at this point in the history
* Rework these functions to both be back-compat but also
have a mode that will work as desired.
* Add a lot of tests
* update fb_systemd to use real functions that exist in the real world
  • Loading branch information
jaymzh committed Feb 20, 2025
1 parent def3aa7 commit d1e944e
Show file tree
Hide file tree
Showing 5 changed files with 283 additions and 106 deletions.
33 changes: 27 additions & 6 deletions cookbooks/fb_helpers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,21 @@ Usage
Simply depend on this cookbook from your metadata.rb to get these methods in
your node.

* `node.os_max_version?(version, full=false)`
Compares the OS version (`node['platform_version']` with `version`) and
returns `true` if the OS version is, at most `version`. By default compares
*only* the *major version* (so `8.2 <= 8.1` because `8 <= 8`). For comparing
the full version set full=true.

* `node.os_min_version?(version, full=false)`
Compares the OS version (`node['platform_version']` with `version`) and
returns `true` if the OS version is, at least `version`. By default compares
*only* the *major version* (so `8.2 >= 8.1` because `8 >= 8`). For comparing
the full version set full=true.

Note that for special cases like 'rawhide' or 'sid', you should use the
OS-specific incarnation of this (e.g. `debian_min_full_version?`)

* `node.centos?`
Is CentOS

Expand All @@ -42,11 +57,13 @@ your node.
* `node.centos10?`
Is CentOS Stream 10

* `node.centos_max_version?(v)`
* `node.centos_max_version?(v, full=false)`
Is RHEL-compatible with a maximum version number of v
See os_max_version? for details

* `node.centos_min_version?(v)`
* `node.centos_min_version?(v, full=false)`
Is RHEL-compatible with a minimum version number of v
See os_min_version? for details

* `node.fedora?`
Is Fedora
Expand Down Expand Up @@ -114,11 +131,13 @@ your node.
* `node.redhat10?`
Is Redhat Enterprise Linux 10

* `node.rhel_max_version?(v)`
* `node.rhel_max_version?(v, full=false)`
Is Redhat Enterprise Linux with a maximum major version number of v
See os_max_version? for details.

* `node.rhel_min_version?(v)`
* `node.rhel_min_version?(v, full=false)`
Is Redhat Enterprise Linux with a minimum major version number of v
See os_min_version? for details.

* `node.rhel?`
Is Redhat Enterprise Linux
Expand Down Expand Up @@ -156,11 +175,13 @@ your node.
* `node.rhel_family?`
Is Redhat Enterprise Linux-compatible (eg CentOS, Oracle Linux, Rocky Linux)

* `node.el_max_version?(v)`
* `node.el_max_version?(v, full=false)`
Is RHEL-compatible with a maximum version number of v
See os_max_version? for details.

* `node.el_min_version?(v)`
* `node.el_min_version?(v, full=false)`
Is RHEL-compatible with a minimum version number of v
See os_min_version? for details.

* `node.debian?`
Is Debian
Expand Down
90 changes: 54 additions & 36 deletions cookbooks/fb_helpers/libraries/node_methods.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,15 @@ def _canonical_version(version)

@canonical_version.fetch(version) do |ver|
@canonical_version[ver] =
if ver.class == Integer
case ver
when Integer, Float
FB::Version.new(version.to_s)
elsif ver.class == String
when String
FB::Version.new(version)
elsif ver.class == FB::Version
when FB::Version
version
else
fail 'fb_helpers: EL Version comparison can only be performed with strings and integers'
fail 'fb_helpers: Version comparison can only be performed with strings and numbers'
end
end
end
Expand All @@ -56,14 +57,30 @@ def _self_version
@self_version ||= FB::Version.new(self['platform_version'])
end

def os_min_version?(version, full = false)
if full
self._self_version >= self._canonical_version(version)
else
self._self_version[0] >= self._canonical_version(version)[0]
end
end

def os_max_version?(version, full = false)
if full
self._self_version <= self._canonical_version(version)
else
self._self_version[0] <= self._canonical_version(version)[0]
end
end

# Is this a RHEL-compatible OS with a minimum major version number of `version`
def el_min_version?(version)
self.rhel_family? && self._self_version[0] >= self._canonical_version(version)[0]
def el_min_version?(version, full = false)
self.rhel_family? && self.os_min_version?(version, full)
end

# Is this a RHEL-compatible OS with a maximum major version number of `version`
def el_max_version?(version)
self.rhel_family? && self._self_version[0] <= self._canonical_version(version)[0]
def el_max_version?(version, full = false)
self.rhel_family? && self.os_max_version?(version, full)
end

def rhel_family7?
Expand All @@ -82,12 +99,12 @@ def rhel?
self.rhel_family?
end

def rhel_min_version?(version)
self.rhel? && self.el_min_version?(version)
def rhel_min_version?(version, full = false)
self.rhel? && self.el_min_version?(version, full)
end

def rhel_max_version?(version)
self.rhel? && self.el_max_version?(version)
def rhel_max_version?(version, full = false)
self.rhel? && self.el_max_version?(version, full)
end

def rhel7?
Expand All @@ -110,12 +127,12 @@ def rhel10?
self.rhel? && self['platform_version'].start_with?('10')
end

def centos_min_version?(version)
self.centos? && self.el_min_version?(version)
def centos_min_version?(version, _full = false)
self.centos? && self.os_min_version?(version, false)
end

def centos_max_version?(version)
self.centos? && self.el_max_version?(version)
def centos_max_version?(version, _full = false)
self.centos? && self.os_max_version?(version, false)
end

def centos?
Expand Down Expand Up @@ -150,24 +167,24 @@ def rocky?
self['platform'] == 'rocky'
end

def rocky_min_version?(version)
self.rocky? && self.el_min_version?(version)
def rocky_max_version?(version, full = false)
self.rocky? && self.os_max_version?(version, full)
end

def rocky_max_version?(version)
self.rocky? && self.el_max_version?(version)
def rocky_min_version?(version, full = false)
self.rocky? && self.os_min_version?(version, full)
end

def redhat?
self['platform'] == 'redhat'
end

def redhat_min_version?(version)
self.redhat? && self.el_min_version?(version)
def redhat_max_version?(version, full = false)
self.redhat? && self.os_max_version?(version, full)
end

def redhat_max_version?(version)
self.redhat? && self.el_max_version?(version)
def redhat_min_version?(version, full = false)
self.redhat? && self.os_min_version?(version, full)
end

def redhat6?
Expand All @@ -194,12 +211,12 @@ def oracle?
self['platform'] == 'oracle'
end

def oracle_min_version?(version)
self.oracle? && self.el_min_version?(version)
def oracle_max_version?(version, _full = false)
self.oracle? && self.os_max_version?(version, false)
end

def oracle_max_version?(version)
self.oracle? && self.el_max_version?(version)
def oracle_min_version?(version, _full = false)
self.oracle? && self.os_min_version?(version, false)
end

def oracle9?
Expand Down Expand Up @@ -305,24 +322,25 @@ def debian_sid?
debian? && self['platform_version'].include?('sid')
end

def debian_min_version?(version)
self.debian? && (self['platform_version'].to_i >= version || self.debian_sid?)
def debian_max_version?(version, full = false)
self.debian? && self.os_max_version?(version, full)
end

def debian_max_version?(version)
self.debian? && self['platform_version'].to_i <= version
def debian_min_version?(version, full = false)
self.debian? &&
(self.debian_sid? || self.os_min_version?(version, full))
end

def ubuntu?
self['platform'] == 'ubuntu'
end

def ubuntu_min_version?(version)
self.ubuntu? && self['platform_version'].to_i >= version
def ubuntu_max_version?(version, full = false)
self.ubuntu? && self.os_max_version?(version, full)
end

def ubuntu_max_version?(version)
self.ubuntu? && self['platform_version'].to_i <= version
def ubuntu_min_version?(version, full = false)
self.ubuntu? && self.os_min_version?(version, full)
end

def ubuntu12?
Expand Down
63 changes: 0 additions & 63 deletions cookbooks/fb_helpers/spec/el_version_spec.rb

This file was deleted.

Loading

0 comments on commit d1e944e

Please sign in to comment.