reservation agent WIP check-in
authorScott Baker <smbaker@gmail.com>
Sun, 19 May 2013 23:20:09 +0000 (16:20 -0700)
committerScott Baker <smbaker@gmail.com>
Sun, 19 May 2013 23:20:09 +0000 (16:20 -0700)
planetstack/openstack/reservationagent.py [new file with mode: 0644]

diff --git a/planetstack/openstack/reservationagent.py b/planetstack/openstack/reservationagent.py
new file mode 100644 (file)
index 0000000..86c4e91
--- /dev/null
@@ -0,0 +1,51 @@
+import datetime
+import os
+import sys
+#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
+import time
+import django.utils
+from core.models.sliver import Sliver
+from core.models.reservation import Reservation, ReservedResource
+
+class ReservationAgent:
+
+    def run(self):
+        while True :
+            slivers = {}
+
+            tNow = django.utils.timezone.now()
+            print "Processing reservations, tNow is %s" % tNow
+            reservations = Reservation.objects.filter(startTime__lte = tNow)
+            for reservation in reservations:
+                print "  Processing reservation %s" % reservation
+                if reservation.endTime <= tNow:
+                    print "    deleting expired reservation"
+                    reservation.delete()
+                for reservedResource in reservation.reservedResources.all():
+                    sliver_resources = slivers.get(reservedResource.sliver.id, {})
+                    sliver_resources[reservedResource.resource.name] = reservedResource.quantity
+                    slivers[reservedResource.sliver.id] = sliver_resources
+
+            print "Sliver reservation set"
+            for (sliverid, sliver_resources) in slivers.items():
+                print "  sliver", sliverid,
+                for (name, value) in sliver_resources.items():
+                    print str(name)+":", value,
+                print
+
+            print "Updating slivers"
+            for sliver in Sliver.objects.all():
+                sliver_resv = slivers.get(sliver.id, {})
+                numberCores = sliver_resv.get("numberCores", 0)
+                if numberCores != sliver.numberCores:
+                    print "sliver %s setting numberCores to %s" % (sliver.name, numberCores)
+                    sliver.numberCores = numberCores
+                    sliver.save()
+
+            print "sleep"
+            time.sleep(7)
+
+
+if __name__ == '__main__':
+    ReservationAgent().run()
+