diff options
Diffstat (limited to 'roles')
3 files changed, 22 insertions, 12 deletions
| diff --git a/roles/openshift_health_checker/library/aos_version.py b/roles/openshift_health_checker/library/aos_version.py index c8769b511..db3c0b654 100644 --- a/roles/openshift_health_checker/library/aos_version.py +++ b/roles/openshift_health_checker/library/aos_version.py @@ -26,15 +26,13 @@ from ansible.module_utils.six import string_types  YUM_IMPORT_EXCEPTION = None  DNF_IMPORT_EXCEPTION = None -PKG_MGR = None  try:      import yum  # pylint: disable=import-error -    PKG_MGR = "yum"  except ImportError as err:      YUM_IMPORT_EXCEPTION = err +  try:      import dnf  # pylint: disable=import-error -    PKG_MGR = "dnf"  except ImportError as err:      DNF_IMPORT_EXCEPTION = err @@ -51,14 +49,19 @@ def main():      module = AnsibleModule(          argument_spec=dict(              package_list=dict(type="list", required=True), +            package_mgr=dict(type="str", required=True),          ),          supports_check_mode=True      ) -    if YUM_IMPORT_EXCEPTION and DNF_IMPORT_EXCEPTION: +    # determine the package manager to use +    package_mgr = module.params['package_mgr'] +    if package_mgr not in ('yum', 'dnf'): +        module.fail_json(msg="package_mgr must be one of: yum, dnf") +    pkg_mgr_exception = dict(yum=YUM_IMPORT_EXCEPTION, dnf=DNF_IMPORT_EXCEPTION)[package_mgr] +    if pkg_mgr_exception:          module.fail_json( -            msg="aos_version module could not import yum or dnf: %s %s" % -            (YUM_IMPORT_EXCEPTION, DNF_IMPORT_EXCEPTION) +            msg="aos_version module could not import {}: {}".format(package_mgr, pkg_mgr_exception)          )      # determine the packages we will look for @@ -78,7 +81,7 @@ def main():      # get the list of packages available and complain if anything is wrong      try: -        pkgs = _retrieve_available_packages(expected_pkg_names) +        pkgs = _retrieve_available_packages(package_mgr, expected_pkg_names)          if versioned_pkgs:              _check_precise_version_found(pkgs, _to_dict(versioned_pkgs))              _check_higher_version_found(pkgs, _to_dict(versioned_pkgs)) @@ -93,7 +96,7 @@ def _to_dict(pkg_list):      return {pkg["name"]: pkg for pkg in pkg_list} -def _retrieve_available_packages(expected_pkgs): +def _retrieve_available_packages(pkg_mgr, expected_pkgs):      # The openshift excluder prevents unintended updates to openshift      # packages by setting yum excludes on those packages. See:      # https://wiki.centos.org/SpecialInterestGroup/PaaS/OpenShift-Origin-Control-Updates @@ -103,14 +106,15 @@ def _retrieve_available_packages(expected_pkgs):      # be excluded. So, for our purposes here, disable excludes to see      # what will really be available during an install or upgrade. -    if PKG_MGR == "yum": +    if pkg_mgr == "yum":          # search for package versions available for openshift pkgs          yb = yum.YumBase()  # pylint: disable=invalid-name          yb.conf.disable_excludes = ['all']          try: -            pkgs = yb.pkgSack.returnPackages(patterns=expected_pkgs) +            pkgs = yb.rpmdb.returnPackages(patterns=expected_pkgs) +            pkgs += yb.pkgSack.returnPackages(patterns=expected_pkgs)          except yum.Errors.PackageSackError as excinfo:              # you only hit this if *none* of the packages are available              raise AosVersionException('\n'.join([ @@ -118,7 +122,7 @@ def _retrieve_available_packages(expected_pkgs):                  'Check your subscription and repo settings.',                  str(excinfo),              ])) -    elif PKG_MGR == "dnf": +    elif pkg_mgr == "dnf":          dbase = dnf.Base()  # pyling: disable=invalid-name          dbase.conf.disable_excludes = ['all'] @@ -127,8 +131,11 @@ def _retrieve_available_packages(expected_pkgs):          dquery = dbase.sack.query()          aquery = dquery.available() +        iquery = dquery.installed() -        pkgs = list(aquery.filter(name=expected_pkgs)) +        available_pkgs = list(aquery.filter(name=expected_pkgs)) +        installed_pkgs = list(iquery.filter(name=expected_pkgs)) +        pkgs = available_pkgs + installed_pkgs          if not pkgs:              # pkgs list is empty, raise because no expected packages found diff --git a/roles/openshift_health_checker/openshift_checks/package_version.py b/roles/openshift_health_checker/openshift_checks/package_version.py index 8b780114f..0b795b6c4 100644 --- a/roles/openshift_health_checker/openshift_checks/package_version.py +++ b/roles/openshift_health_checker/openshift_checks/package_version.py @@ -46,6 +46,7 @@ class PackageVersion(NotContainerizedMixin, OpenShiftCheck):          check_multi_minor_release = deployment_type in ['openshift-enterprise']          args = { +            "package_mgr": self.get_var("ansible_pkg_mgr"),              "package_list": [                  {                      "name": "openvswitch", diff --git a/roles/openshift_health_checker/test/package_version_test.py b/roles/openshift_health_checker/test/package_version_test.py index 6054d3f3e..e871f39f0 100644 --- a/roles/openshift_health_checker/test/package_version_test.py +++ b/roles/openshift_health_checker/test/package_version_test.py @@ -5,6 +5,7 @@ from openshift_checks.package_version import PackageVersion, OpenShiftCheckExcep  def task_vars_for(openshift_release, deployment_type):      return dict( +        ansible_pkg_mgr='yum',          openshift=dict(common=dict(service_type=deployment_type)),          openshift_release=openshift_release,          openshift_image_tag='v' + openshift_release, @@ -27,6 +28,7 @@ def test_openshift_version_not_supported():  def test_invalid_openshift_release_format():      task_vars = dict( +        ansible_pkg_mgr='yum',          openshift=dict(common=dict(service_type='origin')),          openshift_image_tag='v0',          openshift_deployment_type='origin', | 
