k8s.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # encoding: utf-8
  2. from .utils import parse_k8s_time
  3. L_K8S_ARCH = 'kubernetes.io/arch'
  4. L_K8S_MASTER = 'node-role.kubernetes.io/master'
  5. L_ONECLOUD_CONTROLLER = 'onecloud.yunion.io/controller'
  6. L_ONECLOUD_HOST = 'onecloud.yunion.io/host'
  7. class Resource(object):
  8. def __init__(self, obj):
  9. self.obj = obj
  10. def get(self, *keys):
  11. obj = self.obj
  12. for key in keys:
  13. obj = obj.get(key, None)
  14. if not obj:
  15. return None
  16. return obj
  17. def get_spec(self):
  18. return self.get('spec')
  19. def get_metadata(self):
  20. return self.get('metadata')
  21. def get_status(self):
  22. return self.get('status')
  23. def get_name(self):
  24. return self.get('metadata', 'name')
  25. def get_labels(self):
  26. return self.get('metadata', 'labels')
  27. def get_annotations(self):
  28. return self.get('metadata', 'annotations')
  29. def get_label(self, key):
  30. return self.get_labels().get(key, None)
  31. def creationTimestamp(self):
  32. create_str = self.get('metadata', 'creationTimestamp')
  33. return parse_k8s_time(create_str)
  34. class Node(object):
  35. def __init__(self, obj):
  36. self.node = Resource(obj)
  37. def get_addresses(self):
  38. addrs = self.node.get('status', 'addresses')
  39. return addrs
  40. def get_address(self, a_type):
  41. addrs = self.get_addresses()
  42. for addr in addrs:
  43. if addr.get('type') == a_type:
  44. return addr.get('address')
  45. return None
  46. def get_ip(self):
  47. return self.get_address('InternalIP')
  48. def get_hostname(self):
  49. return self.get_address('Hostname')
  50. def is_master(self):
  51. return L_K8S_MASTER in self.node.get_labels()
  52. def is_onecloud_role(self, role):
  53. val = self.node.get_label(role)
  54. if val == 'enable':
  55. return True
  56. return False
  57. def is_onecloud_controller(self):
  58. return self.is_onecloud_role(L_ONECLOUD_CONTROLLER)
  59. def is_onecloud_host(self):
  60. return self.is_onecloud_role(L_ONECLOUD_HOST)
  61. def creationTimestamp(self):
  62. return self.node.creationTimestamp()