def handle(self, request, data): # data_values = data nodes = data["nodes"] del data["nodes"] # # Create Storage group try: resp = api.create_storagegroup(self.request, data) if 200 <= resp.status_code < 300: data = resp.json() else: error_message = "Unable to create group" raise ValueError(resp.text) except Exception as e: strobj = "[]" exceptions.handle(self.request, _(e.message)) # # Assign storage nodes to storage group groupid = data["id"] groupid = str(groupid) count = 0 for node in nodes: count = count + 1 try: resp = api.associate_group_node(self.request, groupid, node) if 200 <= resp.status_code < 300: pass else: error_message = "Unable to associate group and storage node" raise ValueError(resp.text) except Exception as e: strobj = "[]" exceptions.handle(self.request, _(e.message)) # # Create Volume type try: # Remove any new lines in the public key volume_type = cinder.volume_type_create(request, data["name"]) messages.success(request, _("Successfully created volume type: %s") % data["name"]) except Exception as e: if getattr(e, "code", None) == 409: msg = _('Volume type name "%s" already ' "exists.") % data["name"] self._errors["name"] = self.error_class([msg]) else: exceptions.handle(self.request, _("Unable to create volume type.")) # # Creating extra specs dspecs = {} dspecs["key"] = "sds:storage_group_id" dspecs["value"] = groupid type_id = volume_type.id try: cinder.volume_type_extra_set(request, type_id, {dspecs["key"]: dspecs["value"]}) msg = _('Created extra spec "%s".') % dspecs["key"] messages.success(request, msg) except Exception: exceptions.handle(request, _("Unable to create volume type extra spec."), redirect=redirect) return data_values
def handle(self, request, data): # data_values = data nodes = data["nodes"] del data["nodes"] groupid = data["id"] groupid = str(groupid) # # Update Storage Group (Nodes can only be updated apart from other data at the moment) try: resp = api.update_storagegroup(self.request, groupid, data) if 200 <= resp.status_code < 300: data = resp.json() else: error_message = "Unable to update Storage Group" raise ValueError(resp.text) except Exception as e: strobj = "[]" exceptions.handle(self.request, _(e.message)) # # Retrieve storage node list for the selected group data_nodes = [] try: resp = api.list_groups_nodes(self.request, groupid) if resp.status_code == 200: data_nodes = resp.json() else: error_message = "Unable to retrieve Storage Nodes information." raise ValueError(error_message) except Exception as e: strobj = "[]" exceptions.handle(self.request, _(e.message)) # # Disassociate storage nodes associated with the selected storage group count = 0 for d in data_nodes: nodeid = d["id"] nodeid = str(nodeid) try: resp = api.disassociate_group_node(self.request, groupid, nodeid) if 200 <= resp.status_code < 300: pass else: error_message = "Unable to disassociate group and storage node" raise ValueError(resp.text) except Exception as e: strobj = "[]" exceptions.handle(self.request, _(e.message)) # # Assign storage nodes to storage group count = 0 for node in nodes: count = count + 1 try: resp = api.associate_group_node(self.request, groupid, node) if 200 <= resp.status_code < 300: pass else: error_message = "Unable to associate group and storage node" raise ValueError(resp.text) except Exception as e: strobj = "[]" exceptions.handle(self.request, _(e.message)) return data_values