1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- # vim: expandtab:tabstop=4:shiftwidth=4
- """
- Custom version comparison filters for use in openshift-ansible
- """
- # pylint can't locate distutils.version within virtualenv
- # https://github.com/PyCQA/pylint/issues/73
- # pylint: disable=no-name-in-module, import-error
- from distutils.version import LooseVersion
- def gte_function_builder(name, versions):
- """
- Build and return a version comparison function.
- Ex: name = 'oo_version_gte_3_1_or_1_1'
- versions = {'enterprise': '3.1', 'origin': '1.1'}
- returns oo_version_gte_3_1_or_1_1, a function which based on the
- version and deployment type will return true if the provided
- version is greater than or equal to the function's version
- """
- enterprise_version = versions['enterprise']
- origin_version = versions['origin']
- def _gte_function(version, deployment_type):
- """
- Dynamic function created by gte_function_builder.
- Ex: version = '3.1'
- deployment_type = 'openshift-enterprise'
- returns True/False
- """
- version_gte = False
- if 'enterprise' in deployment_type:
- if str(version) >= LooseVersion(enterprise_version):
- version_gte = True
- elif 'origin' in deployment_type:
- if str(version) >= LooseVersion(origin_version):
- version_gte = True
- return version_gte
- _gte_function.__name__ = name
- return _gte_function
- # pylint: disable=too-few-public-methods
- class FilterModule(object):
- """
- Filters for version checking.
- """
- #: The major versions to start incrementing. (enterprise, origin)
- majors = [(3, 1)]
- #: The minor version to start incrementing
- minor = 3
- #: The number of iterations to increment
- minor_iterations = 10
- def __init__(self):
- """
- Creates a new FilterModule for ose version checking.
- """
- self._filters = {}
- # For each major version
- for enterprise, origin in self.majors:
- # For each minor version in the range
- for minor in range(self.minor, self.minor_iterations):
- # Create the function name
- func_name = 'oo_version_gte_{}_{}_or_{}_{}'.format(
- enterprise, minor, origin, minor)
- # Create the function with the builder
- func = gte_function_builder(
- func_name, {
- 'enterprise': '{}.{}.0'.format(enterprise, minor),
- 'origin': '{}.{}.0'.format(origin, minor)
- })
- # Add the function to the mapping
- self._filters[func_name] = func
- # Create filters with special versioning requirements
- self._filters['oo_version_gte_3_1_or_1_1'] = gte_function_builder('oo_version_gte_3_1_or_1_1',
- {'enterprise': '3.0.2.905',
- 'origin': '1.1.0'})
- self._filters['oo_version_gte_3_1_1_or_1_1_1'] = gte_function_builder('oo_version_gte_3_1_or_1_1',
- {'enterprise': '3.1.1',
- 'origin': '1.1.1'})
- self._filters['oo_version_gte_3_2_or_1_2'] = gte_function_builder('oo_version_gte_3_2_or_1_2',
- {'enterprise': '3.1.1.901',
- 'origin': '1.2.0'})
- def filters(self):
- """
- Return the filters mapping.
- """
- return self._filters
|