Skip to content

Commit 1b667b7

Browse files
authored
chore(resources): retrieve resource instance response add message (#112)
1 parent 69597b8 commit 1b667b7

4 files changed

Lines changed: 24 additions & 7 deletions

File tree

rootfs/api/models/resource.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,10 @@ def delete(self, *args, **kwargs):
102102

103103
def detach(self, *args, **kwargs):
104104
try:
105-
# We raise an exception when a resource doesn't exist
106-
self._scheduler.svcat.get_instance(self.app.id, self.name)
107-
self._scheduler.svcat.delete_instance(self.app.id, self.name)
105+
resp = self._scheduler.svcat.get_instance(
106+
self.app.id, self.name, ignore_exception=True)
107+
if resp.status_code != 404:
108+
self._scheduler.svcat.delete_instance(self.app.id, self.name)
108109
except KubeException as e:
109110
raise ServiceUnavailable("Could not delete resource {} for application {}".format(self.name, self.app_id)) from e # noqa
110111

@@ -178,6 +179,20 @@ def attach_update(self, *args, **kwargs):
178179
'{} for {}'.format(self.name, self.app_id)
179180
raise ServiceUnavailable(msg) from e
180181

182+
@property
183+
def message(self):
184+
try:
185+
resp = self._scheduler.svcat.get_instance(
186+
self.app.id, self.name)
187+
if resp.status_code != 200:
188+
message = ""
189+
message = resp.json().get("status", {}).get("conditions", [{}])[-1].\
190+
get("message", "")
191+
return message
192+
except KubeException as e:
193+
logger.info("retrieve instance info error: {}".format(e))
194+
return ""
195+
181196
def retrieve(self, *args, **kwargs):
182197
update_flag = False
183198
if self.status != "Ready":

rootfs/api/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ class Meta:
616616
def update(self, instance, validated_data):
617617
if instance.plan.split(':')[0] != validated_data.get('plan', '').split(':')[0]: # noqa
618618
raise DryccException("the resource instance cann't changed")
619-
if instance.state == "Provisioning":
619+
if instance.status == "Provisioning":
620620
raise DryccException("this resource instance is in progress")
621621
instance.plan = validated_data.get('plan')
622622
instance.options.update(validated_data.get('options', {}))

rootfs/api/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,9 @@ def get_object(self):
799799
def retrieve(self, request, *args, **kwargs):
800800
resource = self.get_object()
801801
resource.retrieve(request)
802-
return super(AppSingleResourceViewSet, self).retrieve(request, *args, **kwargs) # noqa
802+
response = super(AppSingleResourceViewSet, self).retrieve(request, *args, **kwargs) # noqa
803+
response.data["message"] = resource.message
804+
return response
803805

804806
def destroy(self, request, *args, **kwargs):
805807
resource = self.get_object()

rootfs/scheduler/resources/svcat.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def get_serviceplans(self, namespace=None):
5959
raise KubeHTTPException(response, message)
6060
return response
6161

62-
def get_instance(self, namespace, name=None):
62+
def get_instance(self, namespace, name=None, ignore_exception=False,):
6363
"""
6464
Fetch a single serviceinstance or a list of serviceinstances
6565
"""
@@ -71,7 +71,7 @@ def get_instance(self, namespace, name=None):
7171
url = self.api('/namespaces/{}/serviceinstances', namespace)
7272
message = 'get serviceinstances'
7373
response = self.http_get(url)
74-
if self.unhealthy(response.status_code):
74+
if not ignore_exception and self.unhealthy(response.status_code):
7575
raise KubeHTTPException(response, message)
7676
return response
7777

0 commit comments

Comments
 (0)