Small changes here and there. Typo fix, little bit refactoring
This commit is contained in:
		
					parent
					
						
							
								5fffcd9510
							
						
					
				
			
			
				commit
				
					
						70ec3f832b
					
				
			
		
					 2 changed files with 29 additions and 17 deletions
				
			
		
							
								
								
									
										32
									
								
								main.py
									
										
									
									
									
								
							
							
						
						
									
										32
									
								
								main.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -36,6 +36,7 @@ logging.basicConfig(
 | 
			
		|||
    datefmt="%d-%b-%y %H:%M:%S",
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class VM:
 | 
			
		||||
    key: str
 | 
			
		||||
| 
						 | 
				
			
			@ -75,13 +76,11 @@ def need_running_vm(func):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def create_vm(vm):
 | 
			
		||||
    image = client.get(
 | 
			
		||||
        f"/v1/image/{vm.value['image_uuid']}", value_in_json=True
 | 
			
		||||
    )
 | 
			
		||||
    image = client.get(f"/v1/image/{vm.value['image_uuid']}", value_in_json=True)
 | 
			
		||||
    if image:
 | 
			
		||||
        logging.debug(image)
 | 
			
		||||
 | 
			
		||||
        logging.info("Creating New VM...")
 | 
			
		||||
 | 
			
		||||
        _command_to_create = f"rbd clone images/{vm.image_uuid}@protected uservms/{vm.uuid}"
 | 
			
		||||
        try:
 | 
			
		||||
            subprocess.call(_command_to_create.split(" "))
 | 
			
		||||
| 
						 | 
				
			
			@ -89,16 +88,20 @@ def create_vm(vm):
 | 
			
		|||
            VM_POOL.put(vm)
 | 
			
		||||
        except:
 | 
			
		||||
            logging.exception("Can't clone image")
 | 
			
		||||
    else:
 | 
			
		||||
        logging.info(f"Image not found for {vm.image_uuid}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def start_vm(vm_path, e):
 | 
			
		||||
def start_vm(e):
 | 
			
		||||
    vm_path = f"rbd:uservms/{e.uuid}"
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        user_vms = RBD.ls("uservms")
 | 
			
		||||
    except:
 | 
			
		||||
        logging.info("Can't access uservms pool")
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    if not vm_path.split("/")[-1] in user_vms:
 | 
			
		||||
    if e.uuid not in user_vms:
 | 
			
		||||
        logging.info(f"Image file of vm {e.key} does not exists")
 | 
			
		||||
        logging.info(f"Deleting vm {e.key}")
 | 
			
		||||
        client.client.delete(e.key)
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +184,7 @@ def shutdown_vm(e):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def delete_vm(e):
 | 
			
		||||
    # FIXME: Implementation Obseleted after CEPH Integeration
 | 
			
		||||
    # TODO: Delete VM Image From CEPH
 | 
			
		||||
    logging.info(f"Deleting VM {e.key}")
 | 
			
		||||
    shutdown_vm(e)
 | 
			
		||||
    client.client.delete(e.key)
 | 
			
		||||
| 
						 | 
				
			
			@ -191,7 +194,7 @@ def get_vm(vm_list: list, vm_key) -> Union[VM, None]:
 | 
			
		|||
    return next((vm for vm in vm_list if vm.key == vm_key), None)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def maintenence(host):
 | 
			
		||||
def maintenance(host):
 | 
			
		||||
    _vms = VM_POOL.by_host(host.key)
 | 
			
		||||
    alleged_running_vms = VM_POOL.by_status("RUNNING", _vms)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -242,13 +245,12 @@ def main():
 | 
			
		|||
 | 
			
		||||
            if e.status == "TIMEOUT":
 | 
			
		||||
                logging.info("Timeout")
 | 
			
		||||
                maintenence(host)
 | 
			
		||||
                maintenance(host)
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            # TODO: Re-evaluate Migration Design
 | 
			
		||||
            if hasattr(e, "migration_destination"):
 | 
			
		||||
                e_migration_destination = e.value[
 | 
			
		||||
                    "migration_destination"
 | 
			
		||||
                ]
 | 
			
		||||
                e_migration_destination = e.value["migration_destination"]
 | 
			
		||||
            else:
 | 
			
		||||
                e_migration_destination = ""
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -267,8 +269,7 @@ def main():
 | 
			
		|||
                    resume_vm(e)
 | 
			
		||||
 | 
			
		||||
                elif e.status == "REQUESTED_START":
 | 
			
		||||
                    vm_path = f"rbd:uservms/{e.uuid}"
 | 
			
		||||
                    start_vm(vm_path, e)
 | 
			
		||||
                    start_vm(e)
 | 
			
		||||
 | 
			
		||||
                elif e.status == "REQUESTED_SHUTDOWN":
 | 
			
		||||
                    shutdown_vm(e)
 | 
			
		||||
| 
						 | 
				
			
			@ -276,9 +277,6 @@ def main():
 | 
			
		|||
                elif e.status == "DELETED":
 | 
			
		||||
                    delete_vm(e)
 | 
			
		||||
 | 
			
		||||
                # elif e_status == "REQUESTED_MIGRATION":
 | 
			
		||||
                #     if e.value["migration_destination"]
 | 
			
		||||
 | 
			
		||||
                logging.info(f"Running VMs {running_vms}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								setup.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								setup.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
import argparse
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
argparser = argparse.ArgumentParser()
 | 
			
		||||
argparser.add_argument("--production", action="store_true")
 | 
			
		||||
argparser.add_argument("--development", action="store_true")
 | 
			
		||||
args = argparser.parse_args()
 | 
			
		||||
 | 
			
		||||
if args.development:
 | 
			
		||||
    if not os.path.exists("etcd3_wrapper"):
 | 
			
		||||
        os.symlink("../etcd3_wrapper", "etcd3_wrapper")
 | 
			
		||||
 | 
			
		||||
    if not os.path.exists("ucloud_common"):
 | 
			
		||||
        os.symlink("../ucloud_common", "ucloud_common")
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue