allow ucloud-api to also be able work without ceph i.e use filesystem
This commit is contained in:
		
					parent
					
						
							
								bc803d5c08
							
						
					
				
			
			
				commit
				
					
						08cbecebdb
					
				
			
		
					 4 changed files with 31 additions and 5 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -5,3 +5,4 @@ venv/
 | 
			
		|||
settings.json
 | 
			
		||||
ucloud_common
 | 
			
		||||
etcd3_wrapper
 | 
			
		||||
log.txt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								config.py
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								config.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,4 +1,17 @@
 | 
			
		|||
import logging
 | 
			
		||||
 | 
			
		||||
from etcd3_wrapper import Etcd3Wrapper
 | 
			
		||||
from decouple import config
 | 
			
		||||
 | 
			
		||||
logging.basicConfig(
 | 
			
		||||
    level=logging.DEBUG,
 | 
			
		||||
    filename="log.txt",
 | 
			
		||||
    filemode="a",
 | 
			
		||||
    format="%(asctime)s: %(levelname)s - %(message)s",
 | 
			
		||||
    datefmt="%d-%b-%y %H:%M:%S",
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
WITHOUT_CEPH = config("WITHOUT_CEPH", False, cast=bool)
 | 
			
		||||
 | 
			
		||||
etcd_client = Etcd3Wrapper(host=config("ETCD_URL"))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								main.py
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								main.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -4,12 +4,14 @@
 | 
			
		|||
 | 
			
		||||
import json
 | 
			
		||||
import subprocess
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
from flask import Flask, request
 | 
			
		||||
from flask_restful import Resource, Api
 | 
			
		||||
from uuid import uuid4
 | 
			
		||||
from os.path import join
 | 
			
		||||
from config import etcd_client as client
 | 
			
		||||
from config import WITHOUT_CEPH, logging
 | 
			
		||||
 | 
			
		||||
from ucloud_common.vm import VmPool, VMStatus
 | 
			
		||||
from ucloud_common.host import HostPool
 | 
			
		||||
| 
						 | 
				
			
			@ -123,15 +125,23 @@ class VMAction(Resource):
 | 
			
		|||
            if action == "delete" and vm_entry.hostname == "":
 | 
			
		||||
                try:
 | 
			
		||||
                    path_without_protocol = vm_entry.path[vm_entry.path.find(":")+1:]
 | 
			
		||||
                    rc = subprocess.call(f"rbd rm {path_without_protocol}".split(" "))
 | 
			
		||||
                except FileNotFoundError:
 | 
			
		||||
                    return {"message": "VM image does not exists"}
 | 
			
		||||
                else:
 | 
			
		||||
                    if rc == 0:
 | 
			
		||||
 | 
			
		||||
                    if WITHOUT_CEPH:
 | 
			
		||||
                        command_to_delete = ["rm", os.path.join("/var/vm", vm_entry.uuid)]
 | 
			
		||||
                    else:
 | 
			
		||||
                        command_to_delete = ["rbd", "rm", path_without_protocol]
 | 
			
		||||
 | 
			
		||||
                    subprocess.check_output(command_to_delete, stderr=subprocess.PIPE)
 | 
			
		||||
                except subprocess.CalledProcessError as e:
 | 
			
		||||
                    if "No such file" in e.stderr.decode("utf-8"):
 | 
			
		||||
                        client.client.delete(vm_entry.key)
 | 
			
		||||
                        return {"message": "VM successfully deleted"}
 | 
			
		||||
                    else:
 | 
			
		||||
                        logging.exception(e)
 | 
			
		||||
                        return {"message": "Some error occurred while deleting VM"}
 | 
			
		||||
                else:
 | 
			
		||||
                    client.client.delete(vm_entry.key)
 | 
			
		||||
                    return {"message": "VM successfully deleted"}
 | 
			
		||||
 | 
			
		||||
            r = RequestEntry.from_scratch(type=f"{action.title()}VM",
 | 
			
		||||
                                          uuid=data['uuid'],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -99,8 +99,10 @@ class CreateImageSchema(BaseSchema):
 | 
			
		|||
        self.uuid: Field = Field("uuid", str, data.get("uuid", KeyError))
 | 
			
		||||
        self.name = Field("name", str, data.get("name", KeyError))
 | 
			
		||||
        self.image_store = Field("image_store", str, data.get("image_store", KeyError))
 | 
			
		||||
 | 
			
		||||
        # Validations
 | 
			
		||||
        self.uuid.validation = self.file_uuid_validation
 | 
			
		||||
        self.image_store.validation = self.image_store_name_validation
 | 
			
		||||
 | 
			
		||||
        # All Fields
 | 
			
		||||
        fields = [self.uuid, self.name, self.image_store]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue