From 48ce3524571e7aab170523c64efc31cc862bfde9 Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Wed, 5 Feb 2014 16:17:47 -0800 Subject: [PATCH] hpc wizard WIP --- planetstack/tests/hpc_wizard.py | 122 ++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 planetstack/tests/hpc_wizard.py diff --git a/planetstack/tests/hpc_wizard.py b/planetstack/tests/hpc_wizard.py new file mode 100644 index 0000000..fae7047 --- /dev/null +++ b/planetstack/tests/hpc_wizard.py @@ -0,0 +1,122 @@ +import datetime +import os +import operator +import socket +import pytz +import json +import random +import sys +import time + +#sys.path.append("/opt/planetstack") +sys.path.append("/home/smbaker/projects/vicci/plstackapi/planetstack") + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings") +from core.models import Slice, Sliver, ServiceClass, Reservation, Tag, Network, User, Node, Image, Deployment, Site, NetworkTemplate, NetworkSlice, Service +from hpc.models import HpcService, ServiceProvider, ContentProvider, OriginServer, CDNPrefix, HpcService + +def format_float(x): + try: + return "%10.5f" % x + except: + return str(x) + +class HpcWizard: + def __init__(self): + self.hpcService = HpcService.objects.get() + + def get_hpc_slices(self): + slices = self.hpcService.slices.all() + return slices + + def get_hpc_slivers(self): + slivers = [] + for slice in self.get_hpc_slices(): + for sliver in slice.slivers.all(): + slivers.append(sliver) + return slivers + + def fill_site_nodes(self, site, hpc_slivers=None): + if hpc_slivers is None: + hpc_slivers = self.get_hpc_slivers() + + site.availNodes = [] + site.hpcNodes = [] + for node in site.nodes.all(): + has_hpc = False + for sliver in node.slivers.all(): + if sliver in hpc_slivers: + has_hpc = True + if has_hpc: + site.hpcNodes.append(node) + else: + site.availNodes.append(node) + + def get_sites(self): + sites = list(Site.objects.all()) + + for site in sites: + self.fill_site_nodes(site, self.get_hpc_slivers()) + + return sites + + def get_site(self, site_name): + site = Site.objects.get(name=site_name) + self.fill_site_nodes(site) + return site + + def increase_slivers(self, site_name, count): + site = self.get_site(site_name) + hpc_slice = self.get_hpc_slices()[0] + while (len(site.availNodes) > 0) and (count > 0): + node = site.availNodes.pop() + hostname = node.name + sliver = Sliver(name=node.name, + slice=hpc_slice, + node=node, + image = Image.objects.all()[0], + creator = User.objects.get(email="scott@onlab.us"), + deploymentNetwork=node.deployment, + numberCores = 1, + ip=socket.gethostbyname(hostname)) + sliver.save() + + print "created sliver", sliver + + site.hpcNodes.append(node) + + count = count - 1 + + def decrease_slivers(self, site_name, count): + site = self.get_site(site_name) + hpc_slices = self.get_hpc_slices() + while (len(site.hpcNodes) > 0) and (count > 0): + node = site.hpcNodes.pop() + for sliver in node.slivers.all(): + if sliver.slice in hpc_slices: + print "deleting sliver", sliver + sliver.delete() + + site.availNodes.append(node) + count = count - 1 + + def dump(self): + print "slices:" + for slice in self.get_hpc_slices(): + print " ", slice + + print "sites:" + print "%20s %10s %10s %10s %10s" % ("name", "avail", "hpc", "lat", "long") + for site in self.get_sites(): + print "%20s %10d %10d %10s %10s" % (site.name, len(site.availNodes), len(site.hpcNodes), format_float(site.location.latitude), format_float(site.location.longitude)) + + #print "slivers:" + #for sliver in self.get_hpc_slivers(): + # print " ", sliver + +if __name__=="__main__": + x = HpcWizard() + x.dump() + + x.increase_slivers("Princeton", 1) + x.decrease_slivers("Princeton", 1) -- 2.43.0