openshift_version.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # vim: expandtab:tabstop=4:shiftwidth=4
  4. """
  5. Custom version comparison filters for use in openshift-ansible
  6. """
  7. # pylint can't locate distutils.version within virtualenv
  8. # https://github.com/PyCQA/pylint/issues/73
  9. # pylint: disable=no-name-in-module, import-error
  10. from distutils.version import LooseVersion
  11. def gte_function_builder(name, versions):
  12. """
  13. Build and return a version comparison function.
  14. Ex: name = 'oo_version_gte_3_1_or_1_1'
  15. versions = {'enterprise': '3.1', 'origin': '1.1'}
  16. returns oo_version_gte_3_1_or_1_1, a function which based on the
  17. version and deployment type will return true if the provided
  18. version is greater than or equal to the function's version
  19. """
  20. enterprise_version = versions['enterprise']
  21. origin_version = versions['origin']
  22. def _gte_function(version, deployment_type):
  23. """
  24. Dynamic function created by gte_function_builder.
  25. Ex: version = '3.1'
  26. deployment_type = 'openshift-enterprise'
  27. returns True/False
  28. """
  29. version_gte = False
  30. if 'enterprise' in deployment_type:
  31. if str(version) >= LooseVersion(enterprise_version):
  32. version_gte = True
  33. elif 'origin' in deployment_type:
  34. if str(version) >= LooseVersion(origin_version):
  35. version_gte = True
  36. return version_gte
  37. _gte_function.__name__ = name
  38. return _gte_function
  39. # pylint: disable=too-few-public-methods
  40. class FilterModule(object):
  41. """
  42. Filters for version checking.
  43. """
  44. #: The major versions to start incrementing. (enterprise, origin)
  45. majors = [(3, 1)]
  46. #: The minor version to start incrementing
  47. minor = 3
  48. #: The number of iterations to increment
  49. minor_iterations = 10
  50. def __init__(self):
  51. """
  52. Creates a new FilterModule for ose version checking.
  53. """
  54. self._filters = {}
  55. # For each major version
  56. for enterprise, origin in self.majors:
  57. # For each minor version in the range
  58. for minor in range(self.minor, self.minor_iterations):
  59. # Create the function name
  60. func_name = 'oo_version_gte_{}_{}_or_{}_{}'.format(
  61. enterprise, minor, origin, minor)
  62. # Create the function with the builder
  63. func = gte_function_builder(
  64. func_name, {
  65. 'enterprise': '{}.{}.0'.format(enterprise, minor),
  66. 'origin': '{}.{}.0'.format(origin, minor)
  67. })
  68. # Add the function to the mapping
  69. self._filters[func_name] = func
  70. # Create filters with special versioning requirements
  71. self._filters['oo_version_gte_3_1_or_1_1'] = gte_function_builder('oo_version_gte_3_1_or_1_1',
  72. {'enterprise': '3.0.2.905',
  73. 'origin': '1.1.0'})
  74. self._filters['oo_version_gte_3_1_1_or_1_1_1'] = gte_function_builder('oo_version_gte_3_1_or_1_1',
  75. {'enterprise': '3.1.1',
  76. 'origin': '1.1.1'})
  77. self._filters['oo_version_gte_3_2_or_1_2'] = gte_function_builder('oo_version_gte_3_2_or_1_2',
  78. {'enterprise': '3.1.1.901',
  79. 'origin': '1.2.0'})
  80. def filters(self):
  81. """
  82. Return the filters mapping.
  83. """
  84. return self._filters