Revision 1d8f8481 test/pgerakios.py
b/test/pgerakios.py | ||
---|---|---|
29 | 29 |
print(fmt.format(*args)) |
30 | 30 |
return 0 |
31 | 31 |
|
32 |
|
|
33 | 32 |
def exn(fmt, *args): |
34 | 33 |
raise Exception(fmt.format(*args)) |
35 | 34 |
|
36 |
|
|
37 | 35 |
def cexn(b, fmt, *args): |
38 | 36 |
if(b): |
39 | 37 |
raise Exception(fmt.format(*args)) |
... | ... | |
522 | 520 |
class Entity(Config): |
523 | 521 |
# static field (in some sense --- if it is assigned it will create a new binding) |
524 | 522 |
EntityState = enum('NOT_EXISTS', 'EXISTS') |
523 |
systemName = "system" |
|
524 |
systemKey = "" |
|
525 | 525 |
|
526 | 526 |
allEntities = {} |
527 | 527 |
|
528 | 528 |
@staticmethod |
529 |
def getClass(className,name="", key="", parent=None): |
|
529 |
def get(name="",f=(lambda: Entity().set("system","",None))): |
|
530 |
printf("get name {0}",name) |
|
531 |
if(name == ""): |
|
532 |
name = "system" |
|
533 |
if( Entity.allEntities.get("system") == None): |
|
534 |
Entity.allEntities[name] = Entity().set("system","",None) |
|
530 | 535 |
e = Entity.allEntities.get(name) |
531 | 536 |
if(e == None): |
532 |
e = locals()[className]() |
|
533 |
if(name == "system" or name == ""): |
|
534 |
e.set("system", "", None) |
|
535 |
else: |
|
536 |
cexn(parent == None, "Entity.get of a non-existent entity with name {0} and no parent.", name) |
|
537 |
#cexn(not isinstance(parent, Entity), "Entity.get parent of {0} is not an Entity!", name) |
|
538 |
e.set(name, key, parent) |
|
539 |
Entity.allEntities[name] = e |
|
540 |
|
|
537 |
Entity.allEntities[name] = f() |
|
541 | 538 |
return e |
542 | 539 |
|
543 | 540 |
@staticmethod |
544 |
def get(name="", key="", parent=None): |
|
545 |
Entity.get("Entity",name,key,parent) |
|
546 |
|
|
547 |
|
|
548 |
@staticmethod |
|
549 | 541 |
def list(): |
550 | 542 |
return [v for k, v in Entity.allEntities.iteritems()] |
551 | 543 |
|
... | ... | |
592 | 584 |
printf("\n") |
593 | 585 |
for name,parentName in acceptedList: |
594 | 586 |
e = find((lambda e: e.entityName == name),entityList) |
595 |
if(parentName != e.parent.entityName): |
|
587 |
if(e.parent != None and parentName != e.parent.entityName):
|
|
596 | 588 |
exn("Parent of {0} is {1} and not {2}.",e.entityName,parentName,e.parent.parentName) |
597 | 589 |
for e in ok: |
598 | 590 |
e.state = Entity.EntityState.EXISTS |
... | ... | |
614 | 606 |
return not (self.__eq__(other)) |
615 | 607 |
|
616 | 608 |
def __init__(self): |
617 |
self.set(None, None, None)
|
|
609 |
self.set("system", "", None)
|
|
618 | 610 |
self._commissions = [] |
619 | 611 |
self._resources = [] |
620 | 612 |
|
... | ... | |
630 | 622 |
self.set(None, None, None) |
631 | 623 |
|
632 | 624 |
def set(self, name, password, parent): |
625 |
cexn(parent == None and name != "system", "Entity.get of a non-existent entity with name {0} and no parent.", name) |
|
633 | 626 |
self.entityName = name |
634 | 627 |
self.entityKey = password |
635 | 628 |
self.parent = parent |
636 | 629 |
self.state = Entity.EntityState.NOT_EXISTS |
630 |
return self |
|
637 | 631 |
|
638 | 632 |
def exists(self, query=False): |
639 | 633 |
self._check() |
... | ... | |
724 | 718 |
|
725 | 719 |
class ResourceHolder(Entity): |
726 | 720 |
|
727 |
root = Entity.get("pgerakios", "key1",Entity.get())
|
|
728 |
resourceNames = ["pithos","cyclades.vm","cyclades.cpu","cyclades.mem"]
|
|
721 |
root = Entity.get("pgerakios", lambda: Entity().set("pgerakios","key1",Entity.get("system")))
|
|
722 |
resourceNames = ["pithos","cyclades_vm","cyclades_cpu","cyclades_mem"]
|
|
729 | 723 |
|
730 | 724 |
def __init__(self): |
731 | 725 |
super(Entity,self).__init__() |
... | ... | |
760 | 754 |
|
761 | 755 |
class Group(ResourceHolder): |
762 | 756 |
|
763 |
groupRoot = Entity.getClass("Group","group","group",ResourceHolder.root)
|
|
757 |
groupRoot = Entity.get("group",lambda: Group().set("group","group",ResourceHolder.root))
|
|
764 | 758 |
systemGroupName = "system" |
765 | 759 |
systemGroupKey = "system" |
766 | 760 |
|
... | ... | |
774 | 768 |
|
775 | 769 |
@staticmethod |
776 | 770 |
def get(name,key): |
777 |
ret = Entity.getClass("Group",name,key,Group.groupRoot)
|
|
771 |
ret = Entity.get(name,lambda: Group().set(name,key,Group.groupRoot))
|
|
778 | 772 |
if(name == Group.systemGroupName): |
779 | 773 |
ret.makeSystem() |
780 | 774 |
elif(ret.exists(True) == False): |
... | ... | |
810 | 804 |
def makeSystem(self): |
811 | 805 |
if(self.initializedSystem): |
812 | 806 |
return |
813 |
#TODO: create system resources here |
|
807 |
# |
|
808 |
for r in self.getResources(): |
|
809 |
r.quantity = 1000 |
|
810 |
self.saveResources(True) |
|
811 |
# |
|
814 | 812 |
self.initializedSystem = True |
815 | 813 |
|
816 | 814 |
|
... | ... | |
831 | 829 |
|
832 | 830 |
|
833 | 831 |
class User(ResourceHolder): |
834 |
|
|
835 |
userRoot = Entity.getClass("User","user","user",ResourceHolder.root) |
|
832 |
userRoot = Entity.get("user",lambda: User().set("user","user",ResourceHolder.root)) |
|
836 | 833 |
|
837 | 834 |
@staticmethod |
838 | 835 |
def listUsers(): |
... | ... | |
840 | 837 |
|
841 | 838 |
@staticmethod |
842 | 839 |
def get(name,key): |
843 |
return Entity.getClass("User",name,key,User.userRoot)
|
|
840 |
return Entity.get(name,lambda: User().set(name,key,User.userRoot))
|
|
844 | 841 |
|
845 | 842 |
def __init__(self): |
846 | 843 |
super(ResourceHolder,self).__init__(None) |
... | ... | |
881 | 878 |
for r in self.getResources(): |
882 | 879 |
groupUserPolicy = group.getUserPolicyFor(r.resourceName) |
883 | 880 |
self.commission.addResource(r,groupUserPolicy.quantity) |
884 |
self.commit() |
|
881 |
#DO NOT COMMIT HERE |
|
882 |
# self.commit !!! no |
|
885 | 883 |
|
886 | 884 |
|
887 | 885 |
# Main program |
... | ... | |
889 | 887 |
try: |
890 | 888 |
|
891 | 889 |
# Group1 |
890 |
printf("Step 1") |
|
892 | 891 |
group1 = Group.get("group1","group1") |
893 | 892 |
|
893 |
printf("Step 2 name : {0}",group1.entityName) |
|
894 | 894 |
#["pithos","cyclades.vm","cyclades.cpu","cyclades.mem"] |
895 |
group1.savePolicyQuantities('pithos'=10,'cyclades.vm'=2,'cyclades.mem'=3) |
|
895 |
group1.savePolicyQuantities(pithos=10,cyclades_vm=2,cyclades_mem=3) |
|
896 |
|
|
896 | 897 |
|
897 | 898 |
|
899 |
printf("Step 3 ") |
|
898 | 900 |
user1 = User.get("prodromos", "key1") |
901 |
|
|
902 |
printf("Step 4 ") |
|
899 | 903 |
user1.joinGroup(group1) |
904 |
printf("Step 5") |
|
905 |
user1.commit() |
|
906 |
printf("Step 6") |
|
907 |
user1.release() |
|
900 | 908 |
|
901 | 909 |
finally: |
902 | 910 |
for e in Entity.list(): |
Also available in: Unified diff