def response_generator(self, ex): """ Handle exception raised in all operations. It will return object with proper error code, which can be used in client to display proper error message. """ status = -1 command_output = "{}".format(str(ex)) try: logger.info("Error code %s " % ex.response['Error']['Code']) if ex.response['Error']['Code'] == Strings.INVALID_ACCESS_KEY: status = Status.UNAUTHORIZED elif ex.response['Error']['Code'] == Strings.ENTITY_EXISTS: status = Status.CONFLICT_STATUS elif ex.response['Error']['Code'] == Strings.NO_SUCH_ENTITY: status = Status.NOT_FOUND elif ex.response['Error']['Code'] == Strings.SIGNATURE_NOT_MATCH: status = Status.UNAUTHORIZED elif ex.response['Error']['Code'] == Strings.QUOTA_EXCEEDED: status = Status.BAD_REQUEST response = CommandResponse(status=status, msg=command_output) except Exception as ex: response = CommandResponse(status=status, msg=command_output) return response
def create(self): """ Handle user create operation. """ user_args = {} user_args['UserName'] = self.args.get("name", None) path = self.args.get("path", None) if path is not None: user_args['Path'] = path try: result = self.client.create_user(**user_args) metadata = result.get('ResponseMetadata') if metadata is not None: status = metadata.get('HTTPStatusCode') response = CommandResponse(status, result) logger.info("User created successfully") else: response = self.response_generator("No Response received.") except ClientError as e: response = self.response_generator(e) except Exception as ex: logger.info("Exception %s " % str(ex)) status = -1 if type(ex) == Strings.CONNECTION_ERROR: status = Status.SERVICE_UNAVAILABLE response = CommandResponse(status=status, msg=str(ex)) return response
def create(self): """ Handles account creation operation. """ name = self.args.get("name", None) email = self.args.get("email", None) logger.info("Inside create command") parameters = {'Action': 'CreateAccount', 'AccountName': name, 'Email': email} try: response, data = execute_cmd(self.client, parameters) if response.status == Status.CREATED_STATUS: account_response = json.loads( json.dumps(xmltodict.parse(data))) account = \ account_response['CreateAccountResponse'][ 'CreateAccountResult'][ 'Account'] temp_account_response = CommandResponse( response.status, account) return temp_account_response else: logger.info("Status %s " % response.status) temp_account_response = CommandResponse(response.status, None) return temp_account_response except Exception as ex: logger.info("Exception %s " % str(ex)) status = -1 if type(ex) == Strings.CONNECTION_ERROR: status = Status.SERVICE_UNAVAILABLE temp_account_response = CommandResponse(status=status, msg=str(ex)) return temp_account_response
def list(self): """ Handles account list operation """ parameters = {'Action': Strings.LIST_ACCOUNTS} try: response, data = execute_cmd(self.client, parameters) if response.status == Status.OK_STATUS: account_response = json.loads( json.dumps(xmltodict.parse(data))) accounts = \ account_response['ListAccountsResponse'][ 'ListAccountsResult'][ 'Accounts'] temp_account_response = CommandResponse(response.status, accounts) return temp_account_response else: temp_account_response = CommandResponse(response.status, None) return temp_account_response except Exception as ex: status = -1 if type(ex) == Strings.CONNECTION_ERROR: status = Status.SERVICE_UNAVAILABLE temp_account_response = CommandResponse(status=status, msg=str(ex)) return temp_account_response
def remove(self): """ Handle user remove operation. """ user_args = {} user_args['UserName'] = self.args.get("name", None) try: result = self.client.delete_user(**user_args) metadata = result.get('ResponseMetadata') if metadata is not None: status = metadata.get('HTTPStatusCode') response = CommandResponse(status, result) logger.info("User removed successfully") else: response = self.response_generator("No Response received.") except Exception as ex: response = self.response_generator(ex) return response
def list(self): """ Handles user list operation. """ user_args = {} try: logger.info("Inside list command") result = self.client.list_users(**user_args) metadata = result.get('ResponseMetadata') if metadata is not None: status = metadata.get('HTTPStatusCode') response = CommandResponse(status, result) else: response = self.response_generator("No Response received.") except Exception as ex: response = self.response_generator(ex) return response
def create(self): """ Handle access key create operation. """ access_key_args = {} access_key_args['UserName'] = self.args.get("user_name", None) try: result = self.client.create_access_key(**access_key_args) metadata = result.get('ResponseMetadata') if metadata is not None: status = metadata.get('HTTPStatusCode') response = CommandResponse(status, result) else: response = self.response_generator("No Response received.") except Exception as ex: response = self.response_generator(ex) return response
def modify(self): """ Handle user modify operation. """ user_args = {} logger.info("Inside modify command") user_args['UserName'] = self.args.get("name", None) user_args['NewUserName'] = self.args.get("new_name", None) path = self.args.get("path", None) if path is not None: user_args['NewPath'] = path try: result = self.client.update_user(**user_args) metadata = result.get('ResponseMetadata') if metadata is not None: status = metadata.get('HTTPStatusCode') response = CommandResponse(status, result) logger.info("User modified successfully") else: response = self.response_generator("No Response received.") except ClientError as ex: response = self.response_generator(ex) return response
def remove(self): """ Handles Account remove operation :return: """ logger.info("Inside Remove command ") access_key = self.args.get("access_key", None) secret_key = self.args.get("secret_key", None) from sspl_hl.utils.s3admin.s3_utils import get_client s3_client, response = get_client(access_key, secret_key, Strings.S3_SERVICE) # First check if buckets are available for this account or not. logger.info("Check if buckets are associated with Account") try: if s3_client is None: # No S3 Client available. temp_account_response = CommandResponse(msg=response.msg, status=response.status) return temp_account_response else: is_bucket_avail = self.is_buckets_available(s3_client) if is_bucket_avail: status = -1 temp_account_response = CommandResponse( status=status, msg=Strings.BUCKETS_AVAILABLE_ERROR) return temp_account_response except Exception as ex: status = -1 command_output = "{}".format(str(ex)) try: logger.info("command_output %s " % command_output) if ex.response['Error']['Code'] == Strings.INVALID_ACCESS_KEY: status = Status.UNAUTHORIZED elif ex.response['Error']['Code'] \ == Strings.SERVICE_UNAVAILABLE: status = Status.SERVICE_UNAVAILABLE response = CommandResponse(status=status, msg=command_output) except Exception: response = CommandResponse(status=status, msg=command_output) return response # Buckets are not available. force = self.args.get("force", None) name = self.args.get("name", None) headers = {"content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} parameters = {'Action': 'DeleteAccount', 'AccountName': name} parameters['force'] = force auth_header = sign_request_v2(access_key, secret_key, 'POST', '/', {}, headers) headers['Authorization'] = auth_header try: response, data = execute_cmd(self.client, parameters, headers) logger.info("Account Remove response: [%s] " % response.status) if response.status == Status.OK_STATUS: account_response = json.loads( json.dumps(xmltodict.parse(data))) temp_account_response = CommandResponse( status=response.status) return temp_account_response else: account_response = json.loads( json.dumps(xmltodict.parse(data)))['ErrorResponse'] if account_response is None: temp_account_response = CommandResponse( response.status, None) return temp_account_response status = -1 if account_response['Error']['Code'] == \ Strings.NO_SUCH_ENTITY: status = Status.NOT_FOUND elif account_response['Error']['Code'] == \ Strings.SIGNATURE_NOT_MATCH: status = Status.UNAUTHORIZED elif account_response['Error']['Code'] == \ Strings.DELETE_CONFLICT: status = Status.CONFLICT_STATUS temp_account_response = CommandResponse(status=status) return temp_account_response except Exception as ex: logger.info("Exception %s " % str(ex)) status = -1 if type(ex) == Strings.CONNECTION_ERROR: status = Status.SERVICE_UNAVAILABLE temp_account_response = CommandResponse( status=status, msg=str(ex)) return temp_account_response