예제 #1
0
class Vrm(object):
    def __init__(self):
        self.driver = None
        self.is_synced = False
        self.logger = Logger()
        self.settings = Settings()
        self.valid_driver = self.__list_valid_driver()
    
    def __list_valid_driver(self):
        return self.settings.get_item("vrm_default","valid_driver").split(",")
        
    def init_object(self,vm_name,driver,memory=None,hd_size=None,password=None):
        if driver in self.__list_valid_driver() :
            self.driver = __import__("vrm.%s_driver" % driver,
                                 fromlist="*").Driver(vm_name,memory,hd_size,password)
            self.logger.success("[Vrm] Driver Object successfuly initialized for VirtualMacnine %s" % vm_name)
            if self.driver.is_synced :
                self.is_synced = True
                
            return True 
        else :
            self.logger.critical("[Vrm] Invalid or not supported Driver, %s" % driver)
            return False
        
        
    def register_instance(self):
        if self.is_synced :
            self.logger.warning("[Vrm] Instance %s already created" % self.driver.vm_name)
            return False
        else :
            self.driver.make_server()
            self.logger.success("[Vrm] Instance %s successfuly created" % self.driver.vm_name)
            return True
예제 #2
0
 def __init__(self,host=None,port=None):
     set = Settings()
     self.logger = Logger()
     if host or port == None :
         host = set.get_item('core','server_host')
         port = set.get_item('core','server_port')
     self.host = host
     self.port = port
     Pyro4.config.HMAC_KEY = set.get_item('core','hmac_phrase')
     if is_ip_set(self.host):
         self.daemon = VinllaDaemon(
             host = self.host,
             port = self.port
         )
     else :
         self.logger.critical(
             "[Server] Server can't bind to address %s, Node Manager not detect this IP belonging this Server" % self.host
         )
         sys.exit()
예제 #3
0
def prepare_kmod():
    kmod_list = []
    sets = Settings()
    l = Logger()
    for section in sets.config_parse.sections() :
        try :
            kmod_list.extend(
                sets.get_item(section,"kmod_required").split(",")
            )
        except :
            pass
            
    for kmod in kmod_list :
        l.info("[OperatingSystem] Succesed load kernel module %s" % kmod)
        if kmod :
            execute_command("modprobe %s" % kmod)
        else :
            pass
예제 #4
0
class Driver(object):
    def __init__(self,name,memory=None,hd_size=None,password=None):
        self.settings = Settings()
        suff_name = self.settings.get_item("driver_vserver","prefix_name")
        self.vm_name = suff_name+name
        self.conf_base = self.settings.get_item("driver_vserver","conf_dir") + "/" + self.vm_name
        self.repo_base = self.settings.get_item("driver_vserver","repo_dir")
        self.buildroot = self.settings.get_item("vrm_default","buildroot")
        self.ip = self.__get_ip()
        self.is_synced = self.__check_vm()
        
        if not memory :
            self.memory = self.settings.get_item("resource","default_memory")
        else :
            self.memory = memory
        
        if not password :
            self.passwd = self.vm_name
        else :
            self.passwd = password
            
        if not hd_size :
            self.size = self.settings.get_item("resource","default_storage_space")
        else :
            self.size = hd_size
        
    def make_server(self):
        if self.__check_vm():
            pass
        else :
            self.__create_storage()
            self.__create_vm()
    
    def destroy_server(self):
        pass
    
    def alter_attribute(self,paramater,new_value):
        pass
    
    def start_server(self):
        pass
    
    def stop_server(self):
        pass
    
    def restart_server(self):
        pass
    
    def __create_vm(self):
        conf_dir = os.path.join(self.conf_base,self.vm_name)
        home = os.path.join(self.repo_base, self.vm_name)
        interface = "dummy0:%s/%s" % (self.ip, self.settings.get_item(
            "driver_vserver","network_netmask_cidr"))
        init_command = """
            vserver %s build -m skeleton \
            --hostname %s \
            --interface %s \
            --flags lock,virt_mem,virt_uptime,virt_cpu,virt_load,hide_netif\
            --initstyle sysv
            """ % (self.vm_name,self.vm_name,interface)
        execute_command(init_command)
        execute_command("rsync -arv %s /tmp/pravega/volume/%s" %
                        (home, self.vm_name))
        execute_command("umount /tmp/pravega/volume/%s" % self.vm_name)
        execute_command("rm -rf %s/*" % home) 
        execute_command("mount /dev/%s/%s" % (
            self.settings.get_item("driver_vserver","volume_group"),
            self.vm_name,
            ))
        execute_command("mount aufs-%s" % self.vm_name)
        
        os.mkdir(os.path.join(self.conf_base,'cgroup'))
        mem = open(os.path.join(self.conf_base,'cgroup/memory.limit_in_bytes'),'w')
        mem.write(""+str(self.memory)+"M\n")
        mem.close()
        
        swap = open(os.path.join(self.conf_base,'cgroup/memory.memsw.limit_in_bytes'),'w')
        swap.write(""+str(int(self.memory)+2*int(self.memory))+"M\n")
        swap.close()
        

        old_password = execute_command("openssl passwd "+self.passwd+"").strip()
        execute_command("chroot "+home+" /usr/sbin/usermod -p \""+old_password+"\" root") 
    
    def __create_storage(self):
        com1 = "lvcreate -L %s -n %s --addtag %s %s" % (
            self.size,
            self.vm_name, self.vm_name,
            self.settings.get_item("driver_vserver","volume_group"))
        
        com2 = "mkfs.%s /dev/%s/%s" % (
            self.settings.get_item("resource","default_storage_filesystem"),
            self.settings.get_item("driver_vserver","volume_group"),
            self.vm_name
        )
        
        com3 = "mkdir -p /tmp/pravega/volume/%s" % self.vm_name
        
        com4 = "mount /dev/%s/%s /tmp/pravega/volume/%s" % (
            self.settings.get_item("driver_vserver","volume_group"),
            self.vm_name,
            self.vm_name
        )
        
        execute_command(com1)
        execute_command(com2)
        execute_command(com3)
        execute_command(com4)
        self.__prepare_fstab()
    
    def __prepare_fstab(self):
        lvs = "/dev/%s/%s" % (
            self.settings.get_item("driver_vserver","volume_group"),
            self.vm_name)
        mnt = os.path.join(self.repo_base, self.vm_name)
        lv = execute_command("cat /etc/fstab | grep -c %s " % lvs)
        
        if lv != None :
            pass
        else :
            execute_command("echo '%s %s ext4 defaults 1 1' >> /etc/fstab" % (lvs,mnt))
            cmd = "echo 'aufs-%s %s aufs br:%s=rw:%s=ro 1' 1 >> /etc/fstab" % (
                self.vm_name,
                mnt,
                mnt,
                self.buildroot
            )
            execute_command(cmd)
            
    def __check_vm(self):
        repo_dir = self.settings.get_item("driver_vserver","repo_dir")
        vm_dir = os.path.join(repo_dir,self.vm_name)
        return os.path.isdir(vm_dir)
    
    def __get_ip(self):
        range_down = int(self.settings.get_item(
            "driver_vserver","network_ip_range").split("-")[0])
        range_up = int(self.settings.get_item(
            "driver_vserver","network_ip_range").split("-")[1])
        ips = self.__check_all_ip()
        ip_prefix = self.settings.get_item("driver_vserver","network_ip_prefix")
        ip = ""
        while True:
            rand = randint(range_down,range_up)
            if rand not in ips :
                ip = ip_prefix+"."+str(rand)
                break
            else :
                pass
        return ip
    
    def __check_all_ip(self):
        ip_list = []
        for vm in glob.glob("%s/../*" % self.conf_base):
            suff = execute_command("cat %s/interfaces/0/ip | cut -d '.' -f4" % vm
            )
            ip_list.append(suff)
        return ip_list
예제 #5
0
 def __init__(self):
     sets = Settings()
     logging.basicConfig(
         filename=PROJECT_ROOT+"/"+sets.get_item('core','log_file'),
         format="%(asctime)s %(message)s",
         level=logging.DEBUG)