1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
#!/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 legacy_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
def gte_function_builder(name, gte_version):
"""
Build and return a version comparison function.
Ex: name = 'oo_version_gte_3_6'
version = '3.6'
returns oo_version_gte_3_6, a function which based on the
version will return true if the provided version is greater
than or equal to the function's version
"""
def _gte_function(version):
"""
Dynamic function created by gte_function_builder.
Ex: version = '3.1'
returns True/False
"""
version_gte = False
if str(version) >= LooseVersion(gte_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.
"""
# Each element of versions is composed of (major, minor_start, minor_end)
# Origin began versioning 3.x with 3.6, so begin 3.x with 3.6.
versions = [(3, 6, 10)]
def __init__(self):
"""
Creates a new FilterModule for ose version checking.
"""
self._filters = {}
# For each set of (major, minor, minor_iterations)
for major, minor_start, minor_end in self.versions:
# For each minor version in the range
for minor in range(minor_start, minor_end):
# Create the function name
func_name = 'oo_version_gte_{}_{}'.format(major, minor)
# Create the function with the builder
func = gte_function_builder(func_name, "{}.{}.0".format(major, minor))
# Add the function to the mapping
self._filters[func_name] = func
# Create filters with special versioning requirements.
# Treat all Origin 1.x as special case.
legacy_filters = [{'name': 'oo_version_gte_3_1_or_1_1',
'versions': {'enterprise': '3.0.2.905',
'origin': '1.1.0'}},
{'name': 'oo_version_gte_3_1_1_or_1_1_1',
'versions': {'enterprise': '3.1.1',
'origin': '1.1.1'}},
{'name': 'oo_version_gte_3_2_or_1_2',
'versions': {'enterprise': '3.1.1.901',
'origin': '1.2.0'}},
{'name': 'oo_version_gte_3_3_or_1_3',
'versions': {'enterprise': '3.3.0',
'origin': '1.3.0'}},
{'name': 'oo_version_gte_3_4_or_1_4',
'versions': {'enterprise': '3.4.0',
'origin': '1.4.0'}},
{'name': 'oo_version_gte_3_5_or_1_5',
'versions': {'enterprise': '3.5.0',
'origin': '1.5.0'}}]
for legacy_filter in legacy_filters:
self._filters[legacy_filter['name']] = legacy_gte_function_builder(legacy_filter['name'],
legacy_filter['versions'])
def filters(self):
"""
Return the filters mapping.
"""
return self._filters
|