rolebinding.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. # pylint: skip-file
  2. # flake8: noqa
  3. # pylint: disable=too-many-instance-attributes
  4. class RoleBindingConfig(object):
  5. ''' Handle rolebinding config '''
  6. # pylint: disable=too-many-arguments
  7. def __init__(self,
  8. name,
  9. namespace,
  10. kubeconfig,
  11. group_names=None,
  12. role_ref=None,
  13. subjects=None,
  14. usernames=None):
  15. ''' constructor for handling rolebinding options '''
  16. self.kubeconfig = kubeconfig
  17. self.name = name
  18. self.namespace = namespace
  19. self.group_names = group_names
  20. self.role_ref = role_ref
  21. self.subjects = subjects
  22. self.usernames = usernames
  23. self.data = {}
  24. self.create_dict()
  25. def create_dict(self):
  26. ''' create a default rolebinding as a dict '''
  27. self.data['apiVersion'] = 'v1'
  28. self.data['kind'] = 'RoleBinding'
  29. self.data['groupNames'] = self.group_names
  30. self.data['metadata']['name'] = self.name
  31. self.data['metadata']['namespace'] = self.namespace
  32. self.data['roleRef'] = self.role_ref
  33. self.data['subjects'] = self.subjects
  34. self.data['userNames'] = self.usernames
  35. # pylint: disable=too-many-instance-attributes,too-many-public-methods
  36. class RoleBinding(Yedit):
  37. ''' Class to model a rolebinding openshift object'''
  38. group_names_path = "groupNames"
  39. role_ref_path = "roleRef"
  40. subjects_path = "subjects"
  41. user_names_path = "userNames"
  42. kind = 'RoleBinding'
  43. def __init__(self, content):
  44. '''RoleBinding constructor'''
  45. super(RoleBinding, self).__init__(content=content)
  46. self._subjects = None
  47. self._role_ref = None
  48. self._group_names = None
  49. self._user_names = None
  50. @property
  51. def subjects(self):
  52. ''' subjects property '''
  53. if self._subjects is None:
  54. self._subjects = self.get_subjects()
  55. return self._subjects
  56. @subjects.setter
  57. def subjects(self, data):
  58. ''' subjects property setter'''
  59. self._subjects = data
  60. @property
  61. def role_ref(self):
  62. ''' role_ref property '''
  63. if self._role_ref is None:
  64. self._role_ref = self.get_role_ref()
  65. return self._role_ref
  66. @role_ref.setter
  67. def role_ref(self, data):
  68. ''' role_ref property setter'''
  69. self._role_ref = data
  70. @property
  71. def group_names(self):
  72. ''' group_names property '''
  73. if self._group_names is None:
  74. self._group_names = self.get_group_names()
  75. return self._group_names
  76. @group_names.setter
  77. def group_names(self, data):
  78. ''' group_names property setter'''
  79. self._group_names = data
  80. @property
  81. def user_names(self):
  82. ''' user_names property '''
  83. if self._user_names is None:
  84. self._user_names = self.get_user_names()
  85. return self._user_names
  86. @user_names.setter
  87. def user_names(self, data):
  88. ''' user_names property setter'''
  89. self._user_names = data
  90. def get_group_names(self):
  91. ''' return groupNames '''
  92. return self.get(RoleBinding.group_names_path) or []
  93. def get_user_names(self):
  94. ''' return usernames '''
  95. return self.get(RoleBinding.user_names_path) or []
  96. def get_role_ref(self):
  97. ''' return role_ref '''
  98. return self.get(RoleBinding.role_ref_path) or {}
  99. def get_subjects(self):
  100. ''' return subjects '''
  101. return self.get(RoleBinding.subjects_path) or []
  102. #### ADD #####
  103. def add_subject(self, inc_subject):
  104. ''' add a subject '''
  105. if self.subjects:
  106. # pylint: disable=no-member
  107. self.subjects.append(inc_subject)
  108. else:
  109. self.put(RoleBinding.subjects_path, [inc_subject])
  110. return True
  111. def add_role_ref(self, inc_role_ref):
  112. ''' add a role_ref '''
  113. if not self.role_ref:
  114. self.put(RoleBinding.role_ref_path, {"name": inc_role_ref})
  115. return True
  116. return False
  117. def add_group_names(self, inc_group_names):
  118. ''' add a group_names '''
  119. if self.group_names:
  120. # pylint: disable=no-member
  121. self.group_names.append(inc_group_names)
  122. else:
  123. self.put(RoleBinding.group_names_path, [inc_group_names])
  124. return True
  125. def add_user_name(self, inc_user_name):
  126. ''' add a username '''
  127. if self.user_names:
  128. # pylint: disable=no-member
  129. self.user_names.append(inc_user_name)
  130. else:
  131. self.put(RoleBinding.user_names_path, [inc_user_name])
  132. return True
  133. #### /ADD #####
  134. #### Remove #####
  135. def remove_subject(self, inc_subject):
  136. ''' remove a subject '''
  137. try:
  138. # pylint: disable=no-member
  139. self.subjects.remove(inc_subject)
  140. except ValueError as _:
  141. return False
  142. return True
  143. def remove_role_ref(self, inc_role_ref):
  144. ''' remove a role_ref '''
  145. if self.role_ref and self.role_ref['name'] == inc_role_ref:
  146. del self.role_ref['name']
  147. return True
  148. return False
  149. def remove_group_name(self, inc_group_name):
  150. ''' remove a groupname '''
  151. try:
  152. # pylint: disable=no-member
  153. self.group_names.remove(inc_group_name)
  154. except ValueError as _:
  155. return False
  156. return True
  157. def remove_user_name(self, inc_user_name):
  158. ''' remove a username '''
  159. try:
  160. # pylint: disable=no-member
  161. self.user_names.remove(inc_user_name)
  162. except ValueError as _:
  163. return False
  164. return True
  165. #### /REMOVE #####
  166. #### UPDATE #####
  167. def update_subject(self, inc_subject):
  168. ''' update a subject '''
  169. try:
  170. # pylint: disable=no-member
  171. index = self.subjects.index(inc_subject)
  172. except ValueError as _:
  173. return self.add_subject(inc_subject)
  174. self.subjects[index] = inc_subject
  175. return True
  176. def update_group_name(self, inc_group_name):
  177. ''' update a groupname '''
  178. try:
  179. # pylint: disable=no-member
  180. index = self.group_names.index(inc_group_name)
  181. except ValueError as _:
  182. return self.add_group_names(inc_group_name)
  183. self.group_names[index] = inc_group_name
  184. return True
  185. def update_user_name(self, inc_user_name):
  186. ''' update a username '''
  187. try:
  188. # pylint: disable=no-member
  189. index = self.user_names.index(inc_user_name)
  190. except ValueError as _:
  191. return self.add_user_name(inc_user_name)
  192. self.user_names[index] = inc_user_name
  193. return True
  194. def update_role_ref(self, inc_role_ref):
  195. ''' update a role_ref '''
  196. self.role_ref['name'] = inc_role_ref
  197. return True
  198. #### /UPDATE #####
  199. #### FIND ####
  200. def find_subject(self, inc_subject):
  201. ''' find a subject '''
  202. index = None
  203. try:
  204. # pylint: disable=no-member
  205. index = self.subjects.index(inc_subject)
  206. except ValueError as _:
  207. return index
  208. return index
  209. def find_group_name(self, inc_group_name):
  210. ''' find a group_name '''
  211. index = None
  212. try:
  213. # pylint: disable=no-member
  214. index = self.group_names.index(inc_group_name)
  215. except ValueError as _:
  216. return index
  217. return index
  218. def find_user_name(self, inc_user_name):
  219. ''' find a user_name '''
  220. index = None
  221. try:
  222. # pylint: disable=no-member
  223. index = self.user_names.index(inc_user_name)
  224. except ValueError as _:
  225. return index
  226. return index
  227. def find_role_ref(self, inc_role_ref):
  228. ''' find a user_name '''
  229. if self.role_ref and self.role_ref['name'] == inc_role_ref['name']:
  230. return self.role_ref
  231. return None