def delete(self, name, grouponly=False): """ deletes the named cluster ::param grouponly: in default, when deleting a cluster, the group object along with its VMs will be deleted, if grouponly=True, then the VMs will be preserved """ from cloudmesh.experiment.group_usage import remove_vm_from_group_while_deleting vms = self.vms(name)[name] if not grouponly: clouds = [] for vmname, value in vms.iteritems(): cloudname = value['cm_cloud'] id_ = value['id'] banner("Deleting vm->{0} on cloud->{1}".format( vmname, cloudname)) result = self.mongodb.vm_delete(cloudname, id_, self.username) print(result) if cloudname not in clouds: clouds.append(cloudname) remove_vm_from_group_while_deleting(self.username, vmname) time.sleep(5) for cloud in clouds: self.mongodb.release_unused_public_ips(cloud, self.username) self.mongodb.refresh(cm_user_id=self.username, types=['servers']) banner("Deleting group->{0}".format(name)) self.GroupManage.delete_group(name)
def delete(self, name, grouponly=False): """ deletes the named cluster ::param grouponly: in default, when deleting a cluster, the group object along with its VMs will be deleted, if grouponly=True, then the VMs will be preserved """ from cloudmesh.experiment.group_usage import remove_vm_from_group_while_deleting vms = self.vms(name)[name] if not grouponly: clouds = [] for vmname, value in vms.iteritems(): cloudname = value['cm_cloud'] id_ = value['id'] banner("Deleting vm->{0} on cloud->{1}".format(vmname, cloudname)) result = self.mongodb.vm_delete(cloudname, id_, self.username) print(result) if cloudname not in clouds: clouds.append(cloudname) remove_vm_from_group_while_deleting(self.username, vmname) time.sleep(5) for cloud in clouds: self.mongodb.release_unused_public_ips(cloud, self.username) self.mongodb.refresh(cm_user_id=self.username, types=['servers']) banner("Deleting group->{0}".format(name)) self.GroupManage.delete_group(name)
def delete_vm(username, cloudname, server_id_list=None, preview=False, refresh=False): ''' delete vms of a cloud of a user, this function provides several ways to find and delete vms :param server_id_list:: the list of VMs(id) to delete :param preview:: True if the user wants to preview and confirm before start to delete TODO: what if fail, how to acknowledge it range search: now if prefix not given, all vms whose index are in the range will be deleted, regardless of its prefix it looks like even though delete a vm and return {msg: seccess}, sometimes refresh after 5 sec, it might be still there ''' # changed the scope of this import # Benefit: other functions are not affected with this import # drawback: hard to see which module is being loaded in this file # Hyungro Lee 12/01/2014 from cloudmesh.experiment.group_usage import remove_vm_from_group_while_deleting try: mongo = cm_mongo() except: Console.error("There is a problem with the mongo server") return False if refresh: mongo.activate(cm_user_id=username, names=[cloudname]) mongo.refresh(cm_user_id=username, names=[cloudname], types=['servers']) serverdata = mongo.servers( clouds=[cloudname], cm_user_id=username)[cloudname] # ------------------------- # preview and confirm confirm_deletion = True if preview: if server_id_list == []: Console.warning("no vm meets the condition") return False else: resserverdata = {} for i in server_id_list: resserverdata[i] = serverdata[i] cloudobj = CloudManage() itemkeys = {"openstack": [ ['name', 'name'], ['status', 'status'], ['addresses', 'addresses'], ['id', 'id'], ['flavor', 'flavor', 'id'], ['image', 'image', 'id'], ['user_id', 'cm_user_id'], ['metadata', 'metadata'], ['key_name', 'key_name'], ['created', 'created'], ['cloud', 'cm_cloud'] ], "ec2": [ ["name", "id"], ["status", "extra", "status"], ["addresses", "public_ips"], ["flavor", "extra", "instance_type"], ['id', 'id'], ['image', 'extra', 'imageId'], ["user_id", 'user_id'], ["metadata", "metadata"], ["key_name", "extra", "key_name"], ["created", "extra", "launch_time"] ], "aws": [ ["name", "name"], ["status", "extra", "status"], ["addresses", "public_ips"], ["flavor", "extra", "instance_type"], ['id', 'id'], ['image', 'extra', 'image_id'], ["user_id", "user_id"], ["metadata", "metadata"], ["key_name", "extra", "key_name"], ["created", "extra", "launch_time"] ], "azure": [ ['name', 'name'], ['status', 'status'], ['addresses', 'vip'], ['flavor', 'flavor', 'id'], ['id', 'id'], ['image', 'image', 'id'], ['user_id', 'user_id'], ['metadata', 'metadata'], ['key_name', 'key_name'], ['created', 'created'], ] } cloudobj.print_cloud_servers(username=username, cloudname=cloudname, itemkeys=itemkeys, refresh=False, output=False, serverdata=resserverdata) if yn_choice("confirm to delete these vms?", default='n', tries=3): pass else: confirm_deletion = False # ------------------------- # deleting if confirm_deletion: if server_id_list == []: return watch = time.time() useQueue = False if useQueue: # not functioning cloudmanager = mongo.clouds[username][cloudname]["manager"] cm_type = mongo.get_cloud_info(username, cloudname)['cm_type'] package = "cloudmesh.iaas.%s.queue" % cm_type name = "tasks" imported = getattr(__import__(package, fromlist=[name]), name) queue_name = "%s-%s" % (cm_type, "servers") for i in server_id_list: tempservername = serverdata[i]['name'].encode("ascii") banner( "Deleting vm->{0} on cloud->{1}".format(tempservername, cloudname)) result = imported.vm_delete.apply_async( (cloudname, i, username), queue=queue_name) print("job status:", result.state) try: remove_vm_from_group_while_deleting(username, tempservername) except Exception, err: Console.error(str(err)) return # print result.traceback ######### imported.wait.apply_async( args=None, kwargs={'t': 10}, queue=queue_name) handleip = imported.release_unused_public_ips.apply_async( (cloudname, username), queue=queue_name) handlerefresh = imported.refresh.apply_async(args=None, kwargs={'cm_user_id': username, 'names': [cloudname], 'types': ['servers']}, queue=queue_name) # print handleip.state # print handleip.traceback # print handlerefresh.state # print handlerefresh.traceback if preview: print("to check realtime vm status: list vm --refresh") else: for i in server_id_list: tempservername = serverdata[i]['name'].encode("ascii") banner( "Deleting vm->{0} on cloud->{1}".format(tempservername, cloudname)) result = mongo.vm_delete(cloudname, i, username) pprint(result) try: remove_vm_from_group_while_deleting(username, tempservername) except Exception, err: Console.error(str(err)) return time.sleep(5) mongo.release_unused_public_ips(cloudname, username) mongo.refresh(username, names=[cloudname], types=['servers'])