package_version.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. """Check that available RPM packages match the required versions."""
  2. from openshift_checks import OpenShiftCheck
  3. from openshift_checks.mixins import NotContainerizedMixin
  4. class PackageVersion(NotContainerizedMixin, OpenShiftCheck):
  5. """Check that available RPM packages match the required versions."""
  6. name = "package_version"
  7. tags = ["preflight"]
  8. # NOTE: versions outside those specified are mapped to least/greatest
  9. openshift_to_ovs_version = {
  10. (3, 4): "2.4",
  11. (3, 5): ["2.6", "2.7"],
  12. (3, 6): ["2.6", "2.7", "2.8", "2.9"],
  13. (3, 7): ["2.6", "2.7", "2.8", "2.9"],
  14. (3, 8): ["2.6", "2.7", "2.8", "2.9"],
  15. (3, 9): ["2.6", "2.7", "2.8", "2.9"],
  16. (3, 10): ["2.8", "2.9"],
  17. }
  18. openshift_to_docker_version = {
  19. (3, 1): "1.8",
  20. (3, 2): "1.10",
  21. (3, 3): "1.10",
  22. (3, 4): "1.12",
  23. (3, 5): "1.12",
  24. (3, 6): "1.12",
  25. (3, 7): "1.12",
  26. (3, 8): "1.12",
  27. (3, 9): ["1.12", "1.13"],
  28. }
  29. def is_active(self):
  30. """Skip hosts that do not have package requirements."""
  31. group_names = self.get_var("group_names", default=[])
  32. master_or_node = 'oo_masters_to_config' in group_names or 'oo_nodes_to_config' in group_names
  33. return super(PackageVersion, self).is_active() and master_or_node
  34. def run(self):
  35. rpm_prefix = self.get_var("openshift_service_type")
  36. if self._templar is not None:
  37. rpm_prefix = self._templar.template(rpm_prefix)
  38. openshift_release = self.get_var("openshift_release", default='')
  39. deployment_type = self.get_var("openshift_deployment_type")
  40. check_multi_minor_release = deployment_type in ['openshift-enterprise']
  41. args = {
  42. "package_mgr": self.get_var("ansible_pkg_mgr"),
  43. "package_list": [
  44. {
  45. "name": "openvswitch",
  46. "version": self.get_required_ovs_version(),
  47. "check_multi": False,
  48. },
  49. {
  50. "name": "docker",
  51. "version": self.get_required_docker_version(),
  52. "check_multi": False,
  53. },
  54. {
  55. "name": "{}".format(rpm_prefix),
  56. "version": openshift_release,
  57. "check_multi": check_multi_minor_release,
  58. },
  59. {
  60. "name": "{}-master".format(rpm_prefix),
  61. "version": openshift_release,
  62. "check_multi": check_multi_minor_release,
  63. },
  64. {
  65. "name": "{}-node".format(rpm_prefix),
  66. "version": openshift_release,
  67. "check_multi": check_multi_minor_release,
  68. },
  69. ],
  70. }
  71. return self.execute_module_with_retries("aos_version", args)
  72. def get_required_ovs_version(self):
  73. """Return the correct Open vSwitch version(s) for the current OpenShift version."""
  74. return self.get_required_version("Open vSwitch", self.openshift_to_ovs_version)
  75. def get_required_docker_version(self):
  76. """Return the correct Docker version(s) for the current OpenShift version."""
  77. return self.get_required_version("Docker", self.openshift_to_docker_version)