def _parse_homepage(self, json_body): py_obj = json.loads(json_body) srv_root_url = py_obj['href'] self._srv_root_url = srv_root_url for link in py_obj['links']: # strip base from *_url to get *_uri uri = link['link']['href'].replace(srv_root_url, '') if link['link']['rel'] == 'collection': cls = utils.obj_type_to_vnc_class(link['link']['name'], __name__) if not cls: continue cls.create_uri = uri elif link['link']['rel'] == 'resource-base': cls = utils.obj_type_to_vnc_class(link['link']['name'], __name__) if not cls: continue resource_type = link['link']['name'] cls.resource_uri_base[resource_type] = uri elif link['link']['rel'] == 'action': act_type = link['link']['name'] self._action_uri[act_type] = uri
def _prop_map_get_elem_key(self, id, obj_field, elem): _, res_type = self.id_to_fq_name_type(id) obj_class = utils.obj_type_to_vnc_class(res_type, __name__) key_name = obj_class.prop_map_field_key_names[obj_field] if isinstance(value, GeneratedsSuper): return getattr(value, key_name) return value[key_name]
def _parse_homepage(self, py_obj): srv_root_url = py_obj["href"] self._srv_root_url = srv_root_url for link in py_obj["links"]: # strip base from *_url to get *_uri uri = link["link"]["href"].replace(srv_root_url, "") if link["link"]["rel"] == "collection": cls = utils.obj_type_to_vnc_class(link["link"]["name"], __name__) if not cls: continue cls.create_uri = uri elif link["link"]["rel"] == "resource-base": cls = utils.obj_type_to_vnc_class(link["link"]["name"], __name__) if not cls: continue resource_type = link["link"]["name"] cls.resource_uri_base[resource_type] = uri elif link["link"]["rel"] == "action": act_type = link["link"]["name"] self._action_uri[act_type] = uri
def _parse_homepage(self, py_obj): srv_root_url = py_obj['href'] self._srv_root_url = srv_root_url for link in py_obj['links']: # strip base from *_url to get *_uri uri = link['link']['href'].replace(srv_root_url, '') if link['link']['rel'] == 'collection': cls = utils.obj_type_to_vnc_class(link['link']['name'], __name__) if not cls: continue cls.create_uri = uri elif link['link']['rel'] == 'resource-base': cls = utils.obj_type_to_vnc_class(link['link']['name'], __name__) if not cls: continue resource_type = link['link']['name'] cls.resource_uri_base[resource_type] = uri elif link['link']['rel'] == 'action': act_type = link['link']['name'] self._action_uri[act_type] = uri
def restore_config(self, create, resource, json_body): cls = utils.obj_type_to_vnc_class(resource, __name__) if not cls: return None if create: uri = cls.create_uri content = self._request_server(rest.OP_POST, uri, data=json_body) else: obj_dict = json.loads(json_body) uri = cls.resource_uri_base[resource] + '/' uri += obj_dict[resource]['uuid'] content = self._request_server(rest.OP_PUT, uri, data=json_body) return json.loads(content)
def resource_list(self, obj_type, parent_id=None, parent_fq_name=None, back_ref_id=None, obj_uuids=None, fields=None, detail=False, count=False, filters=None): if not obj_type: raise ResourceTypeUnknownError(obj_type) obj_class = utils.obj_type_to_vnc_class(obj_type, __name__) if not obj_class: raise ResourceTypeUnknownError(obj_type) query_params = {} do_post_for_list = False if parent_fq_name: parent_fq_name_str = ':'.join(parent_fq_name) query_params['parent_fq_name_str'] = parent_fq_name_str elif parent_id: if isinstance(parent_id, list): query_params['parent_id'] = ','.join(parent_id) if len(parent_id) > self.POST_FOR_LIST_THRESHOLD: do_post_for_list = True else: query_params['parent_id'] = parent_id if back_ref_id: if isinstance(back_ref_id, list): query_params['back_ref_id'] = ','.join(back_ref_id) if len(back_ref_id) > self.POST_FOR_LIST_THRESHOLD: do_post_for_list = True else: query_params['back_ref_id'] = back_ref_id if obj_uuids: comma_sep_obj_uuids = ','.join(u for u in obj_uuids) query_params['obj_uuids'] = comma_sep_obj_uuids if len(obj_uuids) > self.POST_FOR_LIST_THRESHOLD: do_post_for_list = True if fields: comma_sep_fields = ','.join(f for f in fields) query_params['fields'] = comma_sep_fields query_params['detail'] = detail query_params['count'] = count if filters: query_params['filters'] = ','.join( '%s==%s' %(k,json.dumps(v)) for k,v in filters.items()) if do_post_for_list: uri = self._action_uri.get('list-bulk-collection') if not uri: raise # use same keys as in GET with additional 'type' query_params['type'] = obj_type json_body = json.dumps(query_params) content = self._request_server(rest.OP_POST, uri, json_body) else: # GET /<collection> try: content = self._request_server(rest.OP_GET, obj_class.create_uri, data = query_params) except NoIdError: # dont allow NoIdError propagate to user return [] if not detail: return json.loads(content) resource_dicts = json.loads(content)['%ss' %(obj_type)] resource_objs = [] for resource_dict in resource_dicts: obj_dict = resource_dict['%s' %(obj_type)] resource_obj = obj_class.from_dict(**obj_dict) resource_obj.clear_pending_updates() resource_obj.set_server_conn(self) resource_objs.append(resource_obj) return resource_objs