예제 #1
0
    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()
예제 #2
0
    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
예제 #4
0
    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()
예제 #5
0
    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)
예제 #6
0
 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())
예제 #9
0
    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')
예제 #10
0
    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)
예제 #11
0
    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)
예제 #12
0
 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()
예제 #13
0
 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")