openshift_master_facts_default_predicates.py 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # pylint: disable=missing-docstring
  2. from ansible.errors import AnsibleError
  3. from ansible.plugins.lookup import LookupBase
  4. class LookupModule(LookupBase):
  5. # pylint: disable=too-many-branches,too-many-statements,too-many-arguments
  6. def run(self, terms, variables=None, regions_enabled=True, short_version=None,
  7. cloudprovider_enabled=False, **kwargs):
  8. predicates = []
  9. if short_version is None:
  10. if 'openshift_release' in variables:
  11. release = variables['openshift_release']
  12. if release.startswith('v'):
  13. short_version = release[1:]
  14. else:
  15. short_version = release
  16. short_version = '.'.join(short_version.split('.')[0:2])
  17. elif 'openshift_version' in variables:
  18. version = variables['openshift_version']
  19. short_version = '.'.join(version.split('.')[0:2])
  20. else:
  21. # pylint: disable=line-too-long
  22. raise AnsibleError("Either OpenShift needs to be installed or openshift_release needs to be specified")
  23. if short_version not in ['3.6', '3.7', '3.8', '3.9', '3.10', 'latest']:
  24. raise AnsibleError("Unknown short_version %s" % short_version)
  25. if short_version == 'latest':
  26. short_version = '3.10'
  27. # Predicates ordered according to OpenShift Origin source:
  28. # origin/vendor/k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go
  29. if short_version in ['3.6']:
  30. predicates.extend([
  31. {'name': 'NoVolumeZoneConflict'},
  32. {'name': 'MaxEBSVolumeCount'},
  33. {'name': 'MaxGCEPDVolumeCount'},
  34. {'name': 'MatchInterPodAffinity'},
  35. {'name': 'NoDiskConflict'},
  36. {'name': 'GeneralPredicates'},
  37. {'name': 'PodToleratesNodeTaints'},
  38. {'name': 'CheckNodeMemoryPressure'},
  39. {'name': 'CheckNodeDiskPressure'},
  40. ])
  41. if short_version in ['3.7', '3.8']:
  42. predicates.extend([
  43. {'name': 'NoVolumeZoneConflict'},
  44. {'name': 'MaxEBSVolumeCount'},
  45. {'name': 'MaxGCEPDVolumeCount'},
  46. {'name': 'MaxAzureDiskVolumeCount'},
  47. {'name': 'MatchInterPodAffinity'},
  48. {'name': 'NoDiskConflict'},
  49. {'name': 'GeneralPredicates'},
  50. {'name': 'PodToleratesNodeTaints'},
  51. {'name': 'CheckNodeMemoryPressure'},
  52. {'name': 'CheckNodeDiskPressure'},
  53. {'name': 'NoVolumeNodeConflict'},
  54. ])
  55. if short_version in ['3.9', '3.10']:
  56. predicates.extend([
  57. {'name': 'NoVolumeZoneConflict'},
  58. {'name': 'MaxEBSVolumeCount'},
  59. {'name': 'MaxGCEPDVolumeCount'},
  60. {'name': 'MaxAzureDiskVolumeCount'},
  61. {'name': 'MatchInterPodAffinity'},
  62. {'name': 'NoDiskConflict'},
  63. {'name': 'GeneralPredicates'},
  64. {'name': 'PodToleratesNodeTaints'},
  65. {'name': 'CheckNodeMemoryPressure'},
  66. {'name': 'CheckNodeDiskPressure'},
  67. {'name': 'CheckVolumeBinding'},
  68. ])
  69. if regions_enabled:
  70. if cloudprovider_enabled:
  71. region_label = 'failure-domain.beta.kubernetes.io/region'
  72. else:
  73. region_label = 'region'
  74. region_predicate = {
  75. 'name': 'Region',
  76. 'argument': {
  77. 'serviceAffinity': {
  78. 'labels': [region_label]
  79. }
  80. }
  81. }
  82. predicates.append(region_predicate)
  83. return predicates