|
@@ -0,0 +1,147 @@
|
|
|
+# pylint: skip-file
|
|
|
+# flake8: noqa
|
|
|
+
|
|
|
+# pylint: disable=too-many-instance-attributes
|
|
|
+class OCStorageClass(OpenShiftCLI):
|
|
|
+ ''' Class to wrap the oc command line tools '''
|
|
|
+ kind = 'sc'
|
|
|
+
|
|
|
+ # pylint allows 5
|
|
|
+ # pylint: disable=too-many-arguments
|
|
|
+ def __init__(self,
|
|
|
+ config,
|
|
|
+ verbose=False):
|
|
|
+ ''' Constructor for OCStorageClass '''
|
|
|
+ super(OCStorageClass, self).__init__(None, kubeconfig=config.kubeconfig, verbose=verbose)
|
|
|
+ self.config = config
|
|
|
+ self.storage_class = None
|
|
|
+
|
|
|
+ def exists(self):
|
|
|
+ ''' return whether a storageclass exists'''
|
|
|
+ if self.storage_class:
|
|
|
+ return True
|
|
|
+
|
|
|
+ return False
|
|
|
+
|
|
|
+ def get(self):
|
|
|
+ '''return storageclass '''
|
|
|
+ result = self._get(self.kind, self.config.name)
|
|
|
+ if result['returncode'] == 0:
|
|
|
+ self.storage_class = StorageClass(content=result['results'][0])
|
|
|
+ elif '\"%s\" not found' % self.config.name in result['stderr']:
|
|
|
+ result['returncode'] = 0
|
|
|
+ result['results'] = [{}]
|
|
|
+
|
|
|
+ return result
|
|
|
+
|
|
|
+ def delete(self):
|
|
|
+ '''delete the object'''
|
|
|
+ return self._delete(self.kind, self.config.name)
|
|
|
+
|
|
|
+ def create(self):
|
|
|
+ '''create the object'''
|
|
|
+ return self._create_from_content(self.config.name, self.config.data)
|
|
|
+
|
|
|
+ def update(self):
|
|
|
+ '''update the object'''
|
|
|
+ # parameters are currently unable to be updated. need to delete and recreate
|
|
|
+ self.delete()
|
|
|
+ return self.create()
|
|
|
+
|
|
|
+ def needs_update(self):
|
|
|
+ ''' verify an update is needed '''
|
|
|
+ # check if params have updated
|
|
|
+ if self.storage_class.get_parameters() == self.config.parameters:
|
|
|
+ return False
|
|
|
+
|
|
|
+ return True
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ # pylint: disable=too-many-return-statements,too-many-branches
|
|
|
+ # TODO: This function should be refactored into its individual parts.
|
|
|
+ def run_ansible(params, check_mode):
|
|
|
+ '''run the ansible idempotent code'''
|
|
|
+
|
|
|
+ rconfig = StorageClassConfig(params['name'],
|
|
|
+ provisioner="kubernetes.io/{}".format(params['provisioner']),
|
|
|
+ parameters=params['parameters'],
|
|
|
+ annotations=params['annotations'],
|
|
|
+ api_version="storage.k8s.io/{}".format(params['api_version']),
|
|
|
+ default_sc=params['default_storage_class'],
|
|
|
+ kubeconfig=params['kubeconfig'],
|
|
|
+ )
|
|
|
+
|
|
|
+ oc_sc = OCStorageClass(rconfig, verbose=params['debug'])
|
|
|
+
|
|
|
+ state = params['state']
|
|
|
+
|
|
|
+ api_rval = oc_sc.get()
|
|
|
+
|
|
|
+ #####
|
|
|
+ # Get
|
|
|
+ #####
|
|
|
+ if state == 'list':
|
|
|
+ return {'changed': False, 'results': api_rval['results'], 'state': 'list'}
|
|
|
+
|
|
|
+ ########
|
|
|
+ # Delete
|
|
|
+ ########
|
|
|
+ if state == 'absent':
|
|
|
+ if oc_sc.exists():
|
|
|
+
|
|
|
+ if check_mode:
|
|
|
+ return {'changed': True, 'msg': 'Would have performed a delete.'}
|
|
|
+
|
|
|
+ api_rval = oc_sc.delete()
|
|
|
+
|
|
|
+ return {'changed': True, 'results': api_rval, 'state': 'absent'}
|
|
|
+
|
|
|
+ return {'changed': False, 'state': 'absent'}
|
|
|
+
|
|
|
+ if state == 'present':
|
|
|
+ ########
|
|
|
+ # Create
|
|
|
+ ########
|
|
|
+ if not oc_sc.exists():
|
|
|
+
|
|
|
+ if check_mode:
|
|
|
+ return {'changed': True, 'msg': 'Would have performed a create.'}
|
|
|
+
|
|
|
+ # Create it here
|
|
|
+ api_rval = oc_sc.create()
|
|
|
+
|
|
|
+ if api_rval['returncode'] != 0:
|
|
|
+ return {'failed': True, 'msg': api_rval}
|
|
|
+
|
|
|
+ # return the created object
|
|
|
+ api_rval = oc_sc.get()
|
|
|
+
|
|
|
+ if api_rval['returncode'] != 0:
|
|
|
+ return {'failed': True, 'msg': api_rval}
|
|
|
+
|
|
|
+ return {'changed': True, 'results': api_rval, 'state': 'present'}
|
|
|
+
|
|
|
+ ########
|
|
|
+ # Update
|
|
|
+ ########
|
|
|
+ if oc_sc.needs_update():
|
|
|
+ api_rval = oc_sc.update()
|
|
|
+
|
|
|
+ if api_rval['returncode'] != 0:
|
|
|
+ return {'failed': True, 'msg': api_rval}
|
|
|
+
|
|
|
+ # return the created object
|
|
|
+ api_rval = oc_sc.get()
|
|
|
+
|
|
|
+ if api_rval['returncode'] != 0:
|
|
|
+ return {'failed': True, 'msg': api_rval}
|
|
|
+
|
|
|
+ return {'changed': True, 'results': api_rval, 'state': 'present'}
|
|
|
+
|
|
|
+ return {'changed': False, 'results': api_rval, 'state': 'present'}
|
|
|
+
|
|
|
+
|
|
|
+ return {'failed': True,
|
|
|
+ 'changed': False,
|
|
|
+ 'msg': 'Unknown state passed. %s' % state,
|
|
|
+ 'state': 'unknown'}
|