serviceaccount.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. # pylint: skip-file
  2. # flake8: noqa
  3. class ServiceAccountConfig(object):
  4. '''Service account config class
  5. This class stores the options and returns a default service account
  6. '''
  7. # pylint: disable=too-many-arguments
  8. def __init__(self, sname, namespace, kubeconfig, secrets=None, image_pull_secrets=None):
  9. self.name = sname
  10. self.kubeconfig = kubeconfig
  11. self.namespace = namespace
  12. self.secrets = secrets or []
  13. self.image_pull_secrets = image_pull_secrets or []
  14. self.data = {}
  15. self.create_dict()
  16. def create_dict(self):
  17. ''' instantiate a properly structured volume '''
  18. self.data['apiVersion'] = 'v1'
  19. self.data['kind'] = 'ServiceAccount'
  20. self.data['metadata'] = {}
  21. self.data['metadata']['name'] = self.name
  22. self.data['metadata']['namespace'] = self.namespace
  23. self.data['secrets'] = []
  24. if self.secrets:
  25. for sec in self.secrets:
  26. self.data['secrets'].append({"name": sec})
  27. self.data['imagePullSecrets'] = []
  28. if self.image_pull_secrets:
  29. for sec in self.image_pull_secrets:
  30. self.data['imagePullSecrets'].append({"name": sec})
  31. class ServiceAccount(Yedit):
  32. ''' Class to wrap the oc command line tools '''
  33. image_pull_secrets_path = "imagePullSecrets"
  34. secrets_path = "secrets"
  35. def __init__(self, content):
  36. '''ServiceAccount constructor'''
  37. super(ServiceAccount, self).__init__(content=content)
  38. self._secrets = None
  39. self._image_pull_secrets = None
  40. @property
  41. def image_pull_secrets(self):
  42. ''' property for image_pull_secrets '''
  43. if self._image_pull_secrets is None:
  44. self._image_pull_secrets = self.get(ServiceAccount.image_pull_secrets_path) or []
  45. return self._image_pull_secrets
  46. @image_pull_secrets.setter
  47. def image_pull_secrets(self, secrets):
  48. ''' property for secrets '''
  49. self._image_pull_secrets = secrets
  50. @property
  51. def secrets(self):
  52. ''' property for secrets '''
  53. if not self._secrets:
  54. self._secrets = self.get(ServiceAccount.secrets_path) or []
  55. return self._secrets
  56. @secrets.setter
  57. def secrets(self, secrets):
  58. ''' property for secrets '''
  59. self._secrets = secrets
  60. def delete_secret(self, inc_secret):
  61. ''' remove a secret '''
  62. remove_idx = None
  63. for idx, sec in enumerate(self.secrets):
  64. if sec['name'] == inc_secret:
  65. remove_idx = idx
  66. break
  67. if remove_idx:
  68. del self.secrets[remove_idx]
  69. return True
  70. return False
  71. def delete_image_pull_secret(self, inc_secret):
  72. ''' remove a image_pull_secret '''
  73. remove_idx = None
  74. for idx, sec in enumerate(self.image_pull_secrets):
  75. if sec['name'] == inc_secret:
  76. remove_idx = idx
  77. break
  78. if remove_idx:
  79. del self.image_pull_secrets[remove_idx]
  80. return True
  81. return False
  82. def find_secret(self, inc_secret):
  83. '''find secret'''
  84. for secret in self.secrets:
  85. if secret['name'] == inc_secret:
  86. return secret
  87. return None
  88. def find_image_pull_secret(self, inc_secret):
  89. '''find secret'''
  90. for secret in self.image_pull_secrets:
  91. if secret['name'] == inc_secret:
  92. return secret
  93. return None
  94. def add_secret(self, inc_secret):
  95. '''add secret'''
  96. if self.secrets:
  97. self.secrets.append({"name": inc_secret}) # pylint: disable=no-member
  98. else:
  99. self.put(ServiceAccount.secrets_path, [{"name": inc_secret}])
  100. def add_image_pull_secret(self, inc_secret):
  101. '''add image_pull_secret'''
  102. if self.image_pull_secrets:
  103. self.image_pull_secrets.append({"name": inc_secret}) # pylint: disable=no-member
  104. else:
  105. self.put(ServiceAccount.image_pull_secrets_path, [{"name": inc_secret}])