def last_operation(self, instance_id: str, operation_data: Optional[str], **kwargs) -> LastOperation: instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() if instance.get('state') == self.CREATING: instance['state'] = self.CREATED return LastOperation(OperationState.SUCCEEDED) elif instance.get('state') == self.DELETING: del self.service_instances[instance_id] raise errors.ErrInstanceDoesNotExist()
def get_instance(self, instance_id: str, **kwargs) -> GetInstanceDetailsSpec: instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() return GetInstanceDetailsSpec(self.service_guid, self.plan_guid)
def last_operation(self, instance_id: str, operation_data: str) -> LastOperation: logger.info("last_opertation") if not instance_id in self.provisioned_services: raise errors.ErrInstanceDoesNotExist() spec = self.provisioned_services[instance_id]["spec"] op = self.provisioned_services[instance_id]["last_op"] lo = LastOperation(op, spec) return lo
def get_binding(self, instance_id: str, binding_id: str, **kwargs) -> GetBindingSpec: instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() if instance.get('state') == self.BOUND: return GetBindingSpec()
def deprovision(self, instance_id: str, details: DeprovisionDetails, async_allowed: bool, **kwargs) -> DeprovisionServiceSpec: instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() if instance.get('state') == self.CREATED: del self.service_instances[instance_id] return DeprovisionServiceSpec(False)
def get_instance(self, instance_id: str, **kwargs) -> GetInstanceDetailsSpec: instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() provision_detail = instance.get('provision_details') parameters = {'github_repo': instance.get('repo_clone_url')} return GetInstanceDetailsSpec(provision_detail.service_id, provision_detail.plan_id, parameters=parameters)
def deprovision(self, instance_id: str, details: DeprovisionDetails, async_allowed: bool) -> DeprovisionServiceSpec: logger.info("deprovision") logger.info("request to deprovision instance_id=%s" % instance_id) logger.info("deprovision: details=%s" % details) if not instance_id in self.provisioned_services.keys(): raise errors.ErrInstanceDoesNotExist() provider = self.provisioned_services[instance_id]["provider"] result = provider.deprovision(instance_id, details, async_allowed) self.provisioned_services[instance_id]["spec"] = result self.provisioned_services[instance_id]["last_op"]="deprovision" return result
def test_returns_410_if_service_instance_already_gone(self): self.broker.deprovision.side_effect = errors.ErrInstanceDoesNotExist() response = self.client.delete( "/v2/service_instances/abc?service_id=service-id-here&plan_id=plan-id-here", headers={ 'X-Broker-Api-Version': '2.13', 'Authorization': self.auth_header }) self.assertEqual(response.status_code, http.HTTPStatus.GONE) self.assertEqual(response.json, dict())
def deprovision(self, instance_id: str, details: DeprovisionDetails, async_allowed: bool, **kwargs) -> DeprovisionServiceSpec: if not async_allowed: raise errors.ErrAsyncRequired() instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() if instance.get('state') == self.CREATED: instance['state'] = self.DELETING return DeprovisionServiceSpec(True, 'deprovision')
def test_returns_404_if_instance_not_exists(self): instance_guid = str(uuid4()) self.broker.get_instance.side_effect = errors.ErrInstanceDoesNotExist() response = self.client.get( "/v2/service_instances/{}".format(instance_guid), headers={ 'X-Broker-Api-Version': '2.14', 'Authorization': self.auth_header }) self.assertEqual(HTTPStatus.NOT_FOUND, response.status_code) self.assertEqual({}, response.json)
def test_returns_410_for_a_deleted_or_unknown_instance(self): self.broker.last_operation.side_effect = errors.ErrInstanceDoesNotExist( ) query = "service_id=123&plan_id=456&operation=service-guid-here%20operation-data" response = self.client.get( "/v2/service_instances/here-instance_id/last_operation?%s" % query, headers={ 'X-Broker-Api-Version': '2.13', 'Authorization': self.auth_header }) self.assertEqual(response.status_code, http.HTTPStatus.GONE) self.assertEqual(response.json['state'], OperationState.SUCCEEDED.value)
def get_binding(self, instance_id: str, binding_id: str, **kwargs) -> GetBindingSpec: instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() if instance.get('state') == self.BOUND: clone_url = instance.get('repo_clone_url') html_url = instance.get('repo_html_url') creden = { 'git_repo_url': html_url, 'git_repo_clone_url': clone_url } return GetBindingSpec(credentials=creden) else: raise errors.ErrBindingDoesNotExist()
def deprovision(self, instance_id: str, details: DeprovisionDetails, async_allowed: bool, **kwargs) -> DeprovisionServiceSpec: instance = self.service_instances.get(instance_id) if instance is None: raise errors.ErrInstanceDoesNotExist() if instance.get('state') == self.CREATED: print(self.service_instances[instance_id]) context_instance = self.service_instances[instance_id] project_name = context_instance.get('project_name') api_url = context_instance.get( 'repo_hooks_url') #api endpoint to delete hook hook_id = context_instance.get('repo_hook_id') #hook id jenkins_utils.deprovision_job(project_name, api_url, hook_id) del self.service_instances[instance_id] return DeprovisionServiceSpec(False) elif instance.get('state') in [self.BOUND, self.BINDING]: raise errors.ErrBadRequest("Instance Binded,Can't deprovision")