[slapos.slap] Implement Partition.getInformation()

parent 35ebe7fd
...@@ -491,7 +491,17 @@ class ComputerPartition(SlapRequester): ...@@ -491,7 +491,17 @@ class ComputerPartition(SlapRequester):
""" """
if not getattr(self, '_hateoas_navigator', None): if not getattr(self, '_hateoas_navigator', None):
raise Exception('SlapOS Master Hateoas API required for this operation is not availble.') raise Exception('SlapOS Master Hateoas API required for this operation is not availble.')
return self._hateoas_navigator.getSoftwareReleaseInformation(partition_reference)
raw_information = self._hateoas_navigator.getRelatedInstanceInformation(partition_reference)
software_instance = SoftwareInstance()
# XXX redefine SoftwareInstance to be more consistent
for key, value in raw_information.iteritems():
if key in ['_links']:
continue
setattr(software_instance, '_%s' % key, value)
setattr(software_instance, '_software_release_url', raw_information['_links']['software_release'])
return software_instance
def getId(self): def getId(self):
if not getattr(self, '_partition_id', None): if not getattr(self, '_partition_id', None):
...@@ -825,6 +835,7 @@ class HateoasNavigator(object): ...@@ -825,6 +835,7 @@ class HateoasNavigator(object):
result = self.GET('%s/Base_getHateoasMaster' % self.slapos_master_hateoas_uri) result = self.GET('%s/Base_getHateoasMaster' % self.slapos_master_hateoas_uri)
return json.loads(result) return json.loads(result)
# XXX rename to be more generic
def _hateoasGetPerson(self): def _hateoasGetPerson(self):
person_link = self._hateoasGetMaster()['_links']['action_object_jump']['href'] person_link = self._hateoasGetMaster()['_links']['action_object_jump']['href']
result = self.GET(person_link) result = self.GET(person_link)
...@@ -841,13 +852,28 @@ class HateoasNavigator(object): ...@@ -841,13 +852,28 @@ class HateoasNavigator(object):
result = self.GET(getter_link) result = self.GET(getter_link)
return json.loads(result)['_links']['content'] return json.loads(result)['_links']['content']
# XXX static method # XXX rename me to blablaUrl(self)
def _hateoas_getActionObjectSlap(self, action_object_slap_list, action_title): def _hateoas_getRelatedHostingSubscription(self):
for action in action_object_slap_list: action_object_slap_list = self._hateoasGetPerson()['_links']['action_object_slap']
if action.get('title') == action_title: getter_link = self.hateoasGetLinkFromLinks(action_object_slap_list, 'getHateoasRelatedHostingSubscription')
result = self.GET(getter_link)
return json.loads(result)['_links']['action_object_jump']['href']
# Static method
def hateoasGetLinkFromLinks(self, links, title):
if type(links) == dict:
if links.get('title') == title:
return action['href']
raise NotFoundError('Action %s not found.' % title)
for action in links:
if action.get('title') == title:
return action['href'] return action['href']
else: else:
raise NotFoundError('Action %s not found.' % action) raise NotFoundError('Action %s not found.' % title)
# XXX remove me
def _hateoas_getActionObjectSlap(self, action_object_slap_list, action_title):
return self.hateoasGetLinkFromLinks(action_object_slap_list, action_title)
def _hateoasGetInformation(self, url): def _hateoasGetInformation(self, url):
result = self.GET(url) result = self.GET(url)
...@@ -859,6 +885,12 @@ class HateoasNavigator(object): ...@@ -859,6 +885,12 @@ class HateoasNavigator(object):
result = self.GET(object_link) result = self.GET(object_link)
return json.loads(result) return json.loads(result)
def getHateoasInstanceList(self, hosting_subscription_url):
hosting_subscription = json.loads(self.GET(hosting_subscription_url))
instance_list_url = self.hateoasGetLinkFromLinks(hosting_subscription['_links']['action_object_slap'], 'getHateoasInstanceList')
instance_list = json.loads(self.GET(instance_list_url))
return instance_list['_links']['content']
def getHostingSubscriptionDict(self): def getHostingSubscriptionDict(self):
hosting_subscription_link_list = self._hateoas_getHostingSubscriptionDict() hosting_subscription_link_list = self._hateoas_getHostingSubscriptionDict()
hosting_subscription_dict = {} hosting_subscription_dict = {}
...@@ -894,3 +926,11 @@ class HateoasNavigator(object): ...@@ -894,3 +926,11 @@ class HateoasNavigator(object):
response = json.loads(response) response = json.loads(response)
software_instance_url = response['_links']['content'][0]['href'] software_instance_url = response['_links']['content'][0]['href']
return self._hateoasGetInformation(software_instance_url) return self._hateoasGetInformation(software_instance_url)
def getRelatedInstanceInformation(self, reference):
related_hosting_subscription_url = self._hateoas_getRelatedHostingSubscription()
instance_list = self.getHateoasInstanceList(related_hosting_subscription_url)
instance_url = self.hateoasGetLinkFromLinks(instance_list, reference)
instance = self._hateoasGetInformation(instance_url)
return instance
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment