|
@@ -1,143 +0,0 @@
|
|
|
-# pylint: disable=missing-docstring
|
|
|
-
|
|
|
-import re
|
|
|
-from ansible.errors import AnsibleError
|
|
|
-from ansible.plugins.lookup import LookupBase
|
|
|
-
|
|
|
-
|
|
|
-class LookupModule(LookupBase):
|
|
|
- # pylint: disable=too-many-branches,too-many-statements,too-many-arguments
|
|
|
-
|
|
|
- def run(self, terms, variables=None, regions_enabled=True, short_version=None,
|
|
|
- deployment_type=None, **kwargs):
|
|
|
-
|
|
|
- predicates = []
|
|
|
-
|
|
|
- if short_version is None or deployment_type is None:
|
|
|
- if 'openshift' not in variables:
|
|
|
- raise AnsibleError("This lookup module requires openshift_facts to be run prior to use")
|
|
|
-
|
|
|
- if deployment_type is None:
|
|
|
- if 'common' not in variables['openshift'] or 'deployment_type' not in variables['openshift']['common']:
|
|
|
- raise AnsibleError("This lookup module requires that the deployment_type be set")
|
|
|
-
|
|
|
- deployment_type = variables['openshift']['common']['deployment_type']
|
|
|
-
|
|
|
- if short_version is None:
|
|
|
- if 'short_version' in variables['openshift']['common']:
|
|
|
- short_version = variables['openshift']['common']['short_version']
|
|
|
- elif 'openshift_release' in variables:
|
|
|
- release = variables['openshift_release']
|
|
|
- if release.startswith('v'):
|
|
|
- short_version = release[1:]
|
|
|
- else:
|
|
|
- short_version = release
|
|
|
- short_version = '.'.join(short_version.split('.')[0:2])
|
|
|
- elif 'openshift_version' in variables:
|
|
|
- version = variables['openshift_version']
|
|
|
- short_version = '.'.join(version.split('.')[0:2])
|
|
|
- else:
|
|
|
- # pylint: disable=line-too-long
|
|
|
- raise AnsibleError("Either OpenShift needs to be installed or openshift_release needs to be specified")
|
|
|
- if deployment_type == 'origin':
|
|
|
- if short_version not in ['1.1', '1.2', '1.3', '1.4', '1.5', '3.6', '3.7', '3.8', '3.9', '3.10', 'latest']:
|
|
|
- raise AnsibleError("Unknown short_version %s" % short_version)
|
|
|
- elif deployment_type == 'openshift-enterprise':
|
|
|
- if short_version not in ['3.1', '3.2', '3.3', '3.4', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10', 'latest']:
|
|
|
- raise AnsibleError("Unknown short_version %s" % short_version)
|
|
|
- else:
|
|
|
- raise AnsibleError("Unknown deployment_type %s" % deployment_type)
|
|
|
-
|
|
|
- if deployment_type == 'origin':
|
|
|
- # convert short_version to enterprise short_version
|
|
|
- short_version = re.sub('^1.', '3.', short_version)
|
|
|
-
|
|
|
- if short_version == 'latest':
|
|
|
- short_version = '3.10'
|
|
|
-
|
|
|
- # Predicates ordered according to OpenShift Origin source:
|
|
|
- # origin/vendor/k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go
|
|
|
-
|
|
|
- if short_version == '3.1':
|
|
|
- predicates.extend([
|
|
|
- {'name': 'PodFitsHostPorts'},
|
|
|
- {'name': 'PodFitsResources'},
|
|
|
- {'name': 'NoDiskConflict'},
|
|
|
- {'name': 'MatchNodeSelector'},
|
|
|
- ])
|
|
|
-
|
|
|
- if short_version == '3.2':
|
|
|
- predicates.extend([
|
|
|
- {'name': 'PodFitsHostPorts'},
|
|
|
- {'name': 'PodFitsResources'},
|
|
|
- {'name': 'NoDiskConflict'},
|
|
|
- {'name': 'NoVolumeZoneConflict'},
|
|
|
- {'name': 'MatchNodeSelector'},
|
|
|
- {'name': 'MaxEBSVolumeCount'},
|
|
|
- {'name': 'MaxGCEPDVolumeCount'}
|
|
|
- ])
|
|
|
-
|
|
|
- if short_version == '3.3':
|
|
|
- predicates.extend([
|
|
|
- {'name': 'NoDiskConflict'},
|
|
|
- {'name': 'NoVolumeZoneConflict'},
|
|
|
- {'name': 'MaxEBSVolumeCount'},
|
|
|
- {'name': 'MaxGCEPDVolumeCount'},
|
|
|
- {'name': 'GeneralPredicates'},
|
|
|
- {'name': 'PodToleratesNodeTaints'},
|
|
|
- {'name': 'CheckNodeMemoryPressure'}
|
|
|
- ])
|
|
|
-
|
|
|
- if short_version == '3.4':
|
|
|
- predicates.extend([
|
|
|
- {'name': 'NoDiskConflict'},
|
|
|
- {'name': 'NoVolumeZoneConflict'},
|
|
|
- {'name': 'MaxEBSVolumeCount'},
|
|
|
- {'name': 'MaxGCEPDVolumeCount'},
|
|
|
- {'name': 'GeneralPredicates'},
|
|
|
- {'name': 'PodToleratesNodeTaints'},
|
|
|
- {'name': 'CheckNodeMemoryPressure'},
|
|
|
- {'name': 'CheckNodeDiskPressure'},
|
|
|
- {'name': 'MatchInterPodAffinity'}
|
|
|
- ])
|
|
|
-
|
|
|
- if short_version in ['3.5', '3.6']:
|
|
|
- predicates.extend([
|
|
|
- {'name': 'NoVolumeZoneConflict'},
|
|
|
- {'name': 'MaxEBSVolumeCount'},
|
|
|
- {'name': 'MaxGCEPDVolumeCount'},
|
|
|
- {'name': 'MatchInterPodAffinity'},
|
|
|
- {'name': 'NoDiskConflict'},
|
|
|
- {'name': 'GeneralPredicates'},
|
|
|
- {'name': 'PodToleratesNodeTaints'},
|
|
|
- {'name': 'CheckNodeMemoryPressure'},
|
|
|
- {'name': 'CheckNodeDiskPressure'},
|
|
|
- ])
|
|
|
-
|
|
|
- if short_version in ['3.7', '3.8', '3.9', '3.10']:
|
|
|
- predicates.extend([
|
|
|
- {'name': 'NoVolumeZoneConflict'},
|
|
|
- {'name': 'MaxEBSVolumeCount'},
|
|
|
- {'name': 'MaxGCEPDVolumeCount'},
|
|
|
- {'name': 'MaxAzureDiskVolumeCount'},
|
|
|
- {'name': 'MatchInterPodAffinity'},
|
|
|
- {'name': 'NoDiskConflict'},
|
|
|
- {'name': 'GeneralPredicates'},
|
|
|
- {'name': 'PodToleratesNodeTaints'},
|
|
|
- {'name': 'CheckNodeMemoryPressure'},
|
|
|
- {'name': 'CheckNodeDiskPressure'},
|
|
|
- {'name': 'NoVolumeNodeConflict'},
|
|
|
- ])
|
|
|
-
|
|
|
- if regions_enabled:
|
|
|
- region_predicate = {
|
|
|
- 'name': 'Region',
|
|
|
- 'argument': {
|
|
|
- 'serviceAffinity': {
|
|
|
- 'labels': ['region']
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- predicates.append(region_predicate)
|
|
|
-
|
|
|
- return predicates
|