clusterrole.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # pylint: skip-file
  2. # flake8: noqa
  3. # pylint: disable=too-many-public-methods
  4. class ClusterRole(Yedit):
  5. ''' Class to model an openshift ClusterRole'''
  6. rules_path = "rules"
  7. def __init__(self, name=None, content=None):
  8. ''' Constructor for clusterrole '''
  9. if content is None:
  10. content = ClusterRole.builder(name).yaml_dict
  11. super(ClusterRole, self).__init__(content=content)
  12. self.__rules = Rule.parse_rules(self.get(ClusterRole.rules_path)) or []
  13. @property
  14. def rules(self):
  15. return self.__rules
  16. @rules.setter
  17. def rules(self, data):
  18. self.__rules = data
  19. self.put(ClusterRole.rules_path, self.__rules)
  20. def rule_exists(self, inc_rule):
  21. '''attempt to find the inc_rule in the rules list'''
  22. for rule in self.rules:
  23. if rule == inc_rule:
  24. return True
  25. return False
  26. def compare(self, other, verbose=False):
  27. '''compare function for clusterrole'''
  28. for rule in other.rules:
  29. if rule not in self.rules:
  30. if verbose:
  31. print('Rule in other not found in self. [{}]'.format(rule))
  32. return False
  33. for rule in self.rules:
  34. if rule not in other.rules:
  35. if verbose:
  36. print('Rule in self not found in other. [{}]'.format(rule))
  37. return False
  38. return True
  39. @staticmethod
  40. def builder(name='default_clusterrole', rules=None):
  41. '''return a clusterrole with name and/or rules'''
  42. if rules is None:
  43. rules = [{'apiGroups': [""],
  44. 'attributeRestrictions': None,
  45. 'verbs': [],
  46. 'resources': []}]
  47. content = {
  48. 'apiVersion': 'v1',
  49. 'kind': 'ClusterRole',
  50. 'metadata': {'name': '{}'.format(name)},
  51. 'rules': rules,
  52. }
  53. return ClusterRole(content=content)