Refactoring, VMM added, uncloud-host mostly new, migration is better now
This commit is contained in:
parent
cd9d4cb78c
commit
ba515f0b48
12 changed files with 423 additions and 364 deletions
|
|
@ -1,17 +1,16 @@
|
|||
import argparse
|
||||
import multiprocessing as mp
|
||||
import time
|
||||
import sys
|
||||
|
||||
from ucloud.common.request import RequestEntry, RequestType
|
||||
from ucloud.common.host import HostPool
|
||||
from ucloud.shared import shared
|
||||
from ucloud.settings import settings
|
||||
from ucloud.common.vm import VMStatus
|
||||
from ucloud.vmm import VMM
|
||||
from os.path import join as join_path
|
||||
|
||||
from . import virtualmachine, logger
|
||||
|
||||
vmm = virtualmachine.VMM()
|
||||
|
||||
|
||||
def update_heartbeat(hostname):
|
||||
"""Update Last HeartBeat Time for :param hostname: in etcd"""
|
||||
|
|
@ -25,6 +24,16 @@ def update_heartbeat(hostname):
|
|||
time.sleep(10)
|
||||
|
||||
|
||||
def maintenance():
|
||||
vmm = VMM()
|
||||
running_vms = vmm.discover()
|
||||
for vm_uuid in running_vms:
|
||||
if vmm.is_running(vm_uuid) and vmm.get_status(vm_uuid) == 'running':
|
||||
vm = shared.vm_pool.get(join_path(settings['etcd']['vm_prefix'], vm_uuid))
|
||||
vm.status = VMStatus.running
|
||||
shared.vm_pool.put(vm)
|
||||
|
||||
|
||||
def main(hostname):
|
||||
host_pool = shared.host_pool
|
||||
host = next(filter(lambda h: h.hostname == hostname, host_pool.hosts), None)
|
||||
|
|
@ -34,8 +43,7 @@ def main(hostname):
|
|||
heartbeat_updating_process = mp.Process(target=update_heartbeat, args=(hostname,))
|
||||
heartbeat_updating_process.start()
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
sys.exit("No Need To Go Further. ucloud-host heartbeat updating mechanism is not working")
|
||||
raise e.__class__('ucloud-host heartbeat updating mechanism is not working') from e
|
||||
|
||||
for events_iterator in [
|
||||
shared.etcd_client.get_prefix(settings['etcd']['request_prefix'], value_in_json=True),
|
||||
|
|
@ -45,36 +53,37 @@ def main(hostname):
|
|||
request_event = RequestEntry(request_event)
|
||||
|
||||
if request_event.type == "TIMEOUT":
|
||||
vmm.maintenance(host)
|
||||
continue
|
||||
maintenance()
|
||||
|
||||
# If the event is directed toward me OR I am destination of a InitVMMigration
|
||||
if request_event.hostname == host.key or request_event.destination == host.key:
|
||||
if request_event.hostname == host.key:
|
||||
logger.debug("VM Request: %s", request_event)
|
||||
|
||||
shared.request_pool.client.client.delete(request_event.key)
|
||||
vm_entry = shared.vm_pool.get(request_event.uuid)
|
||||
vm_entry = shared.etcd_client.get(join_path(settings['etcd']['vm_prefix'], request_event.uuid))
|
||||
|
||||
if vm_entry:
|
||||
vm = virtualmachine.VM(vm_entry)
|
||||
if request_event.type == RequestType.StartVM:
|
||||
vmm.start(vm_entry)
|
||||
vm.start()
|
||||
|
||||
elif request_event.type == RequestType.StopVM:
|
||||
vmm.stop(vm_entry)
|
||||
vm.stop()
|
||||
|
||||
elif request_event.type == RequestType.DeleteVM:
|
||||
vmm.delete(vm_entry)
|
||||
vm.delete()
|
||||
|
||||
elif request_event.type == RequestType.InitVMMigration:
|
||||
vmm.start(vm_entry, host.key)
|
||||
vm.start(destination_host_key=host.key)
|
||||
|
||||
elif request_event.type == RequestType.TransferVM:
|
||||
vmm.transfer(request_event)
|
||||
host = host_pool.get(request_event.destination_host_key)
|
||||
if host:
|
||||
vm.migrate(destination=host.hostname)
|
||||
else:
|
||||
logger.error('Host %s not found!', request_event.destination_host_key)
|
||||
else:
|
||||
logger.info("VM Entry missing")
|
||||
|
||||
logger.info("Running VMs %s", vmm.running_vms)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
argparser = argparse.ArgumentParser()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue