Small Changes, Unused import removed, Use ucloud_common.states instead of hard coded strings

This commit is contained in:
ahmadbilalkhalid 2019-07-30 20:06:42 +05:00
parent 0ecb2d9cb8
commit 0c1e9328e8
1 changed files with 10 additions and 12 deletions

22
main.py
View File

@ -4,7 +4,6 @@
# 2. v3) Introduce a status endpoint of the scheduler - # 2. v3) Introduce a status endpoint of the scheduler -
# maybe expose a prometheus compatible output # maybe expose a prometheus compatible output
import json
import argparse import argparse
import logging import logging
@ -13,9 +12,8 @@ from collections import Counter
from functools import reduce from functools import reduce
from etcd3_wrapper import Etcd3Wrapper from etcd3_wrapper import Etcd3Wrapper
from ucloud_common.enums import HostStatus from ucloud_common.vm import VmPool, VMEntry, VMStatus
from ucloud_common.vm import VmPool, VMEntry from ucloud_common.host import HostPool, HostStatus
from ucloud_common.host import HostPool
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG, level=logging.DEBUG,
@ -45,14 +43,14 @@ def remaining_resources(host_specs, vms_specs):
def get_suitable_host(vm_specs): def get_suitable_host(vm_specs):
hosts = HOST_POOL.by_status("ALIVE") hosts = HOST_POOL.by_status(HostStatus.alive)
for host in hosts: for host in hosts:
# Filter them by host_name # Filter them by host_name
vms = VM_POOL.by_host(host.key) vms = VM_POOL.by_host(host.key)
# Filter them by status # Filter them by status
vms = VM_POOL.except_status("REQUESTED_NEW", vms=vms) vms = VM_POOL.except_status(VMStatus.requested_new, vms)
running_vms_specs = [vm.specs for vm in vms] running_vms_specs = [vm.specs for vm in vms]
# Accumulate all of their combined specs # Accumulate all of their combined specs
@ -109,11 +107,11 @@ def dead_host_mitigation(dead_hosts_keys):
def assign_host(vm): def assign_host(vm):
host_name = get_suitable_host(vm.specs) host_name = get_suitable_host(vm.specs)
if host_name: if host_name:
if vm.status == "REQUESTED_NEW": if vm.status == VMStatus.requested_new:
vm.status = "SCHEDULED_DEPLOY" vm.status = VMStatus.scheduled_deploy
if vm.status == "KILLED": if vm.status == VMStatus.killed:
vm.status = "REQUESTED_START" vm.status = VMStatus.requested_start
vm.hostname = host_name vm.hostname = host_name
VM_POOL.put(vm) VM_POOL.put(vm)
@ -134,7 +132,7 @@ def main(vm_prefix, host_prefix):
PENDING_VMS = [] PENDING_VMS = []
for events_iterator in [ for events_iterator in [
client.get_prefix(vm_prefix, value_in_json=True), client.get_prefix(vm_prefix, value_in_json=True),
client.watch_prefix(vm_prefix, timeout=10, value_in_json=True), client.watch_prefix(vm_prefix, timeout=5, value_in_json=True),
]: ]:
for e in events_iterator: for e in events_iterator:
e = VMEntry(e) e = VMEntry(e)
@ -157,7 +155,7 @@ def main(vm_prefix, host_prefix):
for vm in vm_scheduled: for vm in vm_scheduled:
PENDING_VMS.remove(vm) PENDING_VMS.remove(vm)
logging.debug(f"Remaining Pending: {PENDING_VMS}") logging.debug(f"Remaining Pending: {PENDING_VMS}")
elif e.status in ["REQUESTED_NEW", "KILLED"]: elif e.status in [VMStatus.requested_new, VMStatus.killed]:
if assign_host(e) is None: if assign_host(e) is None:
PENDING_VMS.append(e) PENDING_VMS.append(e)
logging.info("No Resource Left. Emailing admin....") logging.info("No Resource Left. Emailing admin....")