Esempio n. 1
0
 def vps_open(self, vps_info, vps_image=None, is_new=True):
     vps_id = vps_info.id
     self.logger.info("to open vps %s" % (vps_id))
     if vps_info.host_id != self.host_id:
         msg = "vpsopen : vps %s host_id=%s != current host %s , abort" % (
             vps_id, vps_info.host_id, self.host_id)
         self.logger.error(msg)
         self.done_task(CMD.OPEN, vps_id, False, msg)
         return
     if not self.vpsinfo_check_ip(vps_info):
         msg = "no ip with vps %s" % (vps_id)
         self.logger.error(msg)
         self.done_task(CMD.OPEN, vps_id, False, msg)
         return
     xv = XenVPS(vps_id)
     try:
         domain_dict = XenStore.domain_name_id_map()
         limit = None
         if 'VPS_NUM_LIMIT' in dir(conf):
             limit = conf.VPS_NUM_LIMIT
         if limit and len(domain_dict.keys()) >= limit + 1:
             msg = "vps open: cannot open more than %d vps" % (limit)
             self.logger.error(msg)
             self.done_task(CMD.OPEN, vps_id, False, msg)
             return
         self.setup_vps(xv, vps_info)
         if xv.is_running():
             msg = "vps %s is running" % (vps_id)
             self.logger.error(msg)
             self.done_task(CMD.OPEN, vps_id, True, msg)
             return
         if vps_info.state in [VM_STATE.PAY, VM_STATE.OPEN, VM_STATE.CLOSE]:
             if self.vpsops.is_normal_exists(vps_id):
                 xv.check_storage_integrity()
                 xv.check_xen_config()
                 if not xv.is_running():
                     self.logger.info(
                         "seems vps %s was not closed, try to boot" %
                         (vps_id))
                     self.vpsops._boot_and_test(xv, is_new=False)
             elif self.vpsops.is_trash_exists(vps_id):
                 self.vpsops.reopen_vps(vps_id, xv)
             else:
                 self.vpsops.create_vps(xv, vps_image, is_new)
         else:
             msg = "vps%s state is %s(%s)" % (str(vps_id), vps_info.state,
                                              VM_STATE_CN[vps_info.state])
             self.logger.error(msg)
             self.done_task(CMD.OPEN, vps_id, False, msg)
             return
     except Exception, e:
         self.logger.exception("vps %s: %s" % (str(vps_id), str(e)))
         self.done_task(CMD.OPEN, vps_id, False, "error, " + str(e))
         return
Esempio n. 2
0
File: vps_mgr.py Progetto: 42qu/vps
 def vps_open(self, vps_info, vps_image=None, is_new=True):
     vps_id = vps_info.id
     self.logger.info("to open vps %s" % (vps_id))
     if vps_info.host_id != self.host_id:
         msg = "vpsopen : vps %s host_id=%s != current host %s , abort" % (
             vps_id, vps_info.host_id, self.host_id)
         self.logger.error(msg)
         self.done_task(CMD.OPEN, vps_id, False, msg)
         return
     if not self.vpsinfo_check_ip(vps_info):
         msg = "no ip with vps %s" % (vps_id)
         self.logger.error(msg)
         self.done_task(CMD.OPEN, vps_id, False, msg)
         return
     xv = XenVPS(vps_id)
     try:
         domain_dict = XenStore.domain_name_id_map()
         limit = None
         if 'VPS_NUM_LIMIT' in dir(conf):
             limit = conf.VPS_NUM_LIMIT
         if limit and len(domain_dict.keys()) >= limit + 1:
             msg = "vps open: cannot open more than %d vps" % (limit)
             self.logger.error(msg)
             self.done_task(CMD.OPEN, vps_id, False, msg)
             return
         self.setup_vps(xv, vps_info)
         if xv.is_running():
             msg = "vps %s is running" % (vps_id)
             self.logger.error(msg)
             self.done_task(CMD.OPEN, vps_id, True, msg)
             return
         if vps_info.state in [VM_STATE.PAY, VM_STATE.OPEN, VM_STATE.CLOSE]:
             if self.vpsops.is_normal_exists(vps_id):
                 xv.check_storage_integrity()
                 xv.check_xen_config()
                 if not xv.is_running():
                     self.logger.info(
                         "seems vps %s was not closed, try to boot" % (vps_id))
                     self.vpsops._boot_and_test(xv, is_new=False)
             elif self.vpsops.is_trash_exists(vps_id):
                 self.vpsops.reopen_vps(vps_id, xv)
             else:
                 self.vpsops.create_vps(xv, vps_image, is_new)
         else:
             msg = "vps%s state is %s(%s)" % (
                 str(vps_id), vps_info.state, VM_STATE_CN[vps_info.state])
             self.logger.error(msg)
             self.done_task(CMD.OPEN, vps_id, False, msg)
             return
     except Exception, e:
         self.logger.exception("vps %s: %s" % (str(vps_id), str(e)))
         self.done_task(CMD.OPEN, vps_id, False, "error, " + str(e))
         return