diff options
author | OpenShift Bot <eparis+openshiftbot@redhat.com> | 2017-06-05 12:53:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-05 12:53:40 -0400 |
commit | 0530383cc184d89b74a6b07c1a11fcab4956e1a0 (patch) | |
tree | efb9df9cfb30fcd78ec5cfb6093399b9dec6963a /roles/openshift_health_checker/openshift_checks | |
parent | ef53abf24b5e894c08a9ee2927eb6a2de5449f82 (diff) | |
parent | 9faafd7f080659043865a0218208bba97519cec9 (diff) | |
download | openshift-0530383cc184d89b74a6b07c1a11fcab4956e1a0.tar.gz openshift-0530383cc184d89b74a6b07c1a11fcab4956e1a0.tar.bz2 openshift-0530383cc184d89b74a6b07c1a11fcab4956e1a0.tar.xz openshift-0530383cc184d89b74a6b07c1a11fcab4956e1a0.zip |
Merge pull request #4157 from juanvallejo/jvallejo/add-retroactive-ovs-version-check
Merged by openshift-bot
Diffstat (limited to 'roles/openshift_health_checker/openshift_checks')
-rw-r--r-- | roles/openshift_health_checker/openshift_checks/ovs_version.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/roles/openshift_health_checker/openshift_checks/ovs_version.py b/roles/openshift_health_checker/openshift_checks/ovs_version.py new file mode 100644 index 000000000..1e45ae3af --- /dev/null +++ b/roles/openshift_health_checker/openshift_checks/ovs_version.py @@ -0,0 +1,78 @@ +""" +Ansible module for determining if an installed version of Open vSwitch is incompatible with the +currently installed version of OpenShift. +""" + +from openshift_checks import OpenShiftCheck, OpenShiftCheckException, get_var +from openshift_checks.mixins import NotContainerizedMixin + + +class OvsVersion(NotContainerizedMixin, OpenShiftCheck): + """Check that packages in a package_list are installed on the host + and are the correct version as determined by an OpenShift installation. + """ + + name = "ovs_version" + tags = ["health"] + + openshift_to_ovs_version = { + "3.6": "2.6", + "3.5": "2.6", + "3.4": "2.4", + } + + # map major release versions across releases + # to a common major version + openshift_major_release_version = { + "1": "3", + } + + @classmethod + def is_active(cls, task_vars): + """Skip hosts that do not have package requirements.""" + group_names = get_var(task_vars, "group_names", default=[]) + master_or_node = 'masters' in group_names or 'nodes' in group_names + return super(OvsVersion, cls).is_active(task_vars) and master_or_node + + def run(self, tmp, task_vars): + args = { + "package_list": [ + { + "name": "openvswitch", + "version": self.get_required_ovs_version(task_vars), + }, + ], + } + return self.execute_module("rpm_version", args, task_vars) + + def get_required_ovs_version(self, task_vars): + """Return the correct Open vSwitch version for the current OpenShift version""" + openshift_version = self._get_openshift_version(task_vars) + + if float(openshift_version) < 3.5: + return self.openshift_to_ovs_version["3.4"] + + ovs_version = self.openshift_to_ovs_version.get(str(openshift_version)) + if ovs_version: + return self.openshift_to_ovs_version[str(openshift_version)] + + msg = "There is no recommended version of Open vSwitch for the current version of OpenShift: {}" + raise OpenShiftCheckException(msg.format(openshift_version)) + + def _get_openshift_version(self, task_vars): + openshift_version = get_var(task_vars, "openshift_image_tag") + if openshift_version and openshift_version[0] == 'v': + openshift_version = openshift_version[1:] + + return self._parse_version(openshift_version) + + def _parse_version(self, version): + components = version.split(".") + if not components or len(components) < 2: + msg = "An invalid version of OpenShift was found for this host: {}" + raise OpenShiftCheckException(msg.format(version)) + + if components[0] in self.openshift_major_release_version: + components[0] = self.openshift_major_release_version[components[0]] + + return '.'.join(components[:2]) |