コード例 #1
0
 def execute(self):
     try:
         name = self._message.get("hostname")
         vm_id = self._message.get("instance_id")
         status = self._message.get("state")
         LOG.debug("vm create end name is %s status is %s", name, status)
         t_obj = yield task.get_task_flow(resource=name)
         if t_obj:
             if status == "active":
                 yield task.update_task_flow_status(t_obj[0].get("id"),
                                                    status=4)
             else:
                 networks = yield get_vms_nics(
                     self._message.get("instance_id"))
                 for network in networks:
                     port_id = network.get("port_id")
                     yield network_module.request_delete_ports(
                         self._message.get("tenant_id"), port_id)
                 yield task.delete_task_flow(t_obj[0].get("id"))
         iso_list = yield list_server_attach_volume(vm_id, vd_type=3)
         if iso_list:
             for iso in iso_list:
                 yield _update_iso_volume_available(iso.get("volume_id"))
         sys = yield list_server_attach_volume(vm_id, vd_type=1)
         if sys:
             image_meta = self._message.get("image_meta")
             for k, v in image_meta.items():
                 yield update_volume_image_metadata(sys[0].get("volume_id"),
                                                    k, v)
     except Exception, e:
         LOG.error("instance create end process error %s" % e)
コード例 #2
0
 def execute(self):
     try:
         name = self._message.get("instance_id")
         status = self._message.get("state")
         LOG.debug("vm reboot end name is %s status is %s", name, status)
         t_obj = yield task.get_task_flow(resource=name)
         if t_obj:
             if status == "active":
                 yield task.update_task_flow_status(t_obj[0].get("id"),
                                                    status=4)
             else:
                 yield task.delete_task_flow(t_obj[0].get("id"))
     except Exception, e:
         LOG.error("vm reboot  end process error %s" % e)
コード例 #3
0
ファイル: server.py プロジェクト: 1026237416/Python
def del_server(vm_id_or_name, delete_volume_ids=list()):
    """
    :param vm_id_or_name:
    :param delete_volume_ids: list
    :return:
    """
    if vm_id_or_name.startswith("vm-"):
        server_task = yield task.get_task_flow(resource=vm_id_or_name)
        if server_task:
            server_task = server_task[0]
            task_id = server_task.get("id")
            server_info = server_task["body"]["server"]
            networks = server_info["networks"]
            LOG.debug("vm %s delete task", vm_id_or_name)
            yield task.delete_task_flow(task_id)
            tenant_id = server_task.get('tenant')
            LOG.debug("vm %s free quotas", vm_id_or_name)
            used_quotas = yield get_tenant_quota(tenant_id=tenant_id)
            yield update_tenant_vm_quotas(
                tenant_id=tenant_id,
                used_cores=used_quotas["used_cores"],
                used_memory=used_quotas["used_memorys"])
    else:
        try:
            vm = yield get_server(vm_id_or_name, detailed=False)
            for volume_id in delete_volume_ids:
                LOG.debug("delete vm %s  with volume %s set deleting status",
                          vm.get("name"), volume_id)
                yield set_volume_status(volume_id, status='deleting')
            if str(vm.get("vm_state")) != 'error':
                LOG.debug("delete vm %s  set deleting status", vm.get("name"))
                yield set_or_update_vm_meta(vm_id_or_name,
                                            meta_key="status",
                                            meta_value="deleting")
                attach_volumes = yield list_server_attach_volume(vm_id_or_name,
                                                                 vd_type=0)
                if attach_volumes:
                    for attach_volume in attach_volumes:
                        # if int(attach_volume.get("type")) == TYPE_VDISK:
                        LOG.debug("detach vm %s  with volume %s ",
                                  vm.get("name"), attach_volume['volume_id'])
                        yield set_volume_attach_vm_id(
                            attach_volume.get("volume_id"),
                            attach_vm_id=vm_id_or_name)
                        yield detach_server_volume(vm_id_or_name,
                                                   attach_volume['volume_id'])
                else:
                    LOG.debug("force delete  vm %s ", vm.get("name"))
                    yield server_force_delete(vm_id_or_name)
            else:
                LOG.debug("force delete  vm %s ", vm.get("name"))
                yield server_force_delete(vm_id_or_name)
            try:
                networks = yield get_vms_nics(vm.get("id"))
                for network in networks:
                    port_id = network.get("port_id")
                    yield network_module.request_delete_ports(
                        vm.get("tenant_id"), port_id)
            except Exception as e:
                LOG.error("delete ports error: %s" % e)
                raise DeletePortsFailed
        except Exception as e:
            try:
                yield set_or_update_vm_meta(vm_id_or_name,
                                            meta_key="status",
                                            meta_value="")
            except Exception as e:
                raise e
            LOG.error("del vm error: %s" % e)
コード例 #4
0
def create_reboot_start_schedule():
    LOG.debug("*************************************************")
    LOG.debug("***********   Compute Control Start  ************")
    LOG.debug("*************************************************")
    try:
        all_tasks = yield task.get_task_flow()
        host_schedule = {}
        for t_obj in all_tasks:
            host = t_obj.get("host")
            status = t_obj.get("status")
            type = t_obj.get("type")
            if host not in host_schedule:
                host_schedule[host] = {
                    "nedd_create_tasks": [],
                    "need_reboot_tasks": [],
                    "need_start_tasks": [],
                    "runnig_num": 0
                }
            if status in (SCHED_STATUS_RUNNING, SCHED_STATUS_RUN_SUCCESS):
                host_schedule[host]["runnig_num"] += 1
            if status == SCHED_STATUS_PREPARE_SUCCESS and type == SCHED_TYPE_ACTIONG_CREATE:
                host_schedule[host]["nedd_create_tasks"].append(t_obj)
            if status == SCHED_STATUS_PREPARE and type == SCHED_TYPE_ACTIONG_START:
                host_schedule[host]["need_start_tasks"].append(t_obj)
            if status == SCHED_STATUS_PREPARE and type == SCHED_TYPE_ACTIONG_REBOOT:
                host_schedule[host]["need_reboot_tasks"].append(t_obj)
            if status == SCHED_STATUS_RUN_SUCCESS:
                now = datetime.datetime.now()
                old = t_obj.get("updated_at")
                if (now - old).seconds > CONF.compute.boot_interval:
                    yield task.delete_task_flow(t_obj.get("id"))
        for k, v in host_schedule.items():
            need_running = CONF.compute.max_booting - v.get("runnig_num")
            if need_running > 0:
                for i in range(0, need_running):
                    if v["nedd_create_tasks"]:
                        t = v["nedd_create_tasks"].pop()
                        LOG.debug("boot vm name is %s  status is %s " %
                                  (t['resource'], t['status']))
                        row = yield task.update_task_flow_status(
                            t.get("id"), status=SCHED_STATUS_RUNNING)
                        if row:
                            yield __boot_vm(t)
                        continue

                    if v["need_start_tasks"]:
                        t = v["need_start_tasks"].pop()
                        vm_id = t.get("resource")
                        need_reboot = yield get_server_metas(vm_id)
                        LOG.debug("start vm name is %s  status is %s ", vm_id,
                                  t['status'])
                        row = yield task.update_task_flow_status(
                            t.get("id"), status=SCHED_STATUS_RUNNING)
                        if row:
                            iso_list = yield list_server_attach_volume(
                                vm_id, vd_type=3)
                            if iso_list:
                                for iso in iso_list:
                                    volume_id = iso.get("volume_id")
                                    yield _detach_iso_volume(volume_id, vm_id)
                            else:
                                if need_reboot.get(NEED_REBOOT):
                                    yield server_action(vm_id,
                                                        Control.REBOOT,
                                                        info={"type": "HARD"})
                                    yield del_server_meta(vm_id, [NEED_REBOOT])
                                else:
                                    yield server_action(vm_id, Control.START)
                        continue

                    if v["need_reboot_tasks"]:
                        t = v["need_reboot_tasks"].pop()
                        vm_id = t.get("resource")
                        LOG.debug("reboot vm name is %s  status is %s ",
                                  t.get("resource"), t['status'])
                        row = yield task.update_task_flow_status(
                            t.get("id"), status=SCHED_STATUS_RUNNING)
                        if row:
                            iso_list = yield list_server_attach_volume(
                                vm_id, vd_type=3)
                            if iso_list:
                                for iso in iso_list:
                                    volume_id = iso.get("volume_id")
                                    yield _detach_iso_volume(volume_id, vm_id)
                            else:
                                yield server_action(t.get("resource"),
                                                    Control.REBOOT,
                                                    info={"type": "SOFT"})
                        continue
        LOG.debug("*************************************************")
        LOG.debug("***********    Compute Control End   ************")
        LOG.debug("*************************************************")
    except Exception, e:
        LOG.error(trace())
        LOG.error(" create start reboot schedule error %s" % e)