diff options
author | Jan Provaznik <jprovazn@redhat.com> | 2013-07-19 12:13:04 +0200 |
---|---|---|
committer | Tomas Sedovic <tomas@sedovic.cz> | 2013-08-01 16:18:56 +0200 |
commit | b17f99f6527a456225b66ac506996cf4a195996e (patch) | |
tree | 344d802e4ce9219d6bd452d3b287cdfc43c49fe0 | |
parent | 278fda2679c5ebe2ac025bcd98884d799eeb3dfb (diff) | |
download | tuskar-ui-b17f99f6527a456225b66ac506996cf4a195996e.tar.gz |
API integration
fixed various rack and resource class methods.
3 tests are failing:
2 flavors/nodes related tests (out of scope of this patch)
1 rack test - 'list_racks' method is unknown for test
data - will look at this later
Change-Id: Ia9bf3b3311ce04906e6f70a6f49a61a50db1fe45
4 files changed, 62 insertions, 74 deletions
diff --git a/openstack_dashboard/api/tuskar.py b/openstack_dashboard/api/tuskar.py index 31ad2e01..3289ab65 100644 --- a/openstack_dashboard/api/tuskar.py +++ b/openstack_dashboard/api/tuskar.py @@ -221,61 +221,51 @@ class Rack(StringIdAPIResourceWrapper): _attrs = ['id', 'name', 'location', 'subnet', 'nodes'] @classmethod - def create(cls, request, name, resource_class_id, location, subnet): - ## FIXME: Where is the location attribute?? Also, set nodes - ## here + def create(cls, request, name, resource_class_id, location, subnet, + nodes=[]): + ## FIXME: set nodes here rack = tuskarclient(request).racks.create( name=name, - #location=location, + location=location, subnet=subnet, - nodes=[], + nodes=nodes, + resource_class={'id': resource_class_id}, slots=0) - - ## FIXME: it would be optimal if we didn't have to make a separate - ## call for this. racks= also needs to be fixed - ## ALSO it doesn't seem to work, I can't get it to work using curl - ## from the command line - #rc = ResourceClass.get(request, resource_class_id) - #ResourceClass.update(request, resource_class_id, - # name=rc.name, - # service_type=rc.service_type, - # racks={"id": rack.id}) - return cls(rack) @classmethod def update(cls, request, rack_id, kwargs): - return cls(tuskarclient(request).racks.update(rack_id, + ## FIXME: set nodes here + rack = tuskarclient(request).racks.update(rack_id, name=kwargs['name'], - #location=location, + location=kwargs['location'], subnet=kwargs['subnet'], - nodes=[], - slots=0)) + # FIXME: set nodes + #nodes=kwargs['nodes'], + resource_class={'id': kwargs['resource_class_id']}, + slots=0) + return cls(rack) @classmethod def list(cls, request, only_free_racks=False): - ## FIXME: currently resource_class is not an attribute of a rack; can - ## that be changed? If so, we can do free_racks much more easily if only_free_racks: return [Rack(r) for r in - tuskarclient(request).racks.list()] + tuskarclient(request).racks.list() if ( + r.resource_class is None)] else: return [Rack(r) for r in tuskarclient(request).racks.list()] @classmethod def get(cls, request, rack_id): - return cls(tuskarclient(request).racks.get(rack_id)) + rack = cls(tuskarclient(request).racks.get(rack_id)) + rack.set_request(request) + return rack - ## FIXME: this is temporary @property def resource_class_id(self): - return 1 - - ## FIXME: as is this - @property - def location(self): - return "somewhere" + rclass = getattr(self._apiresource, 'resource_class', None) + return rclass['id'] if rclass else None @property def capacities(self): @@ -390,7 +380,7 @@ class Rack(StringIdAPIResourceWrapper): #return self._nodes def nodes_count(self): - return len(self.list_nodes) + return len(self._apiresource.nodes) # The idea here is to take a list of MAC addresses and assign them to # our rack. I'm attaching this here so that we can take one list, versus @@ -417,22 +407,21 @@ class Rack(StringIdAPIResourceWrapper): @property def resource_class(self): if not hasattr(self, '_resource_class'): - self._resource_class = self._apiresource.resource_class + rclass = getattr(self._apiresource, 'resource_class', None) + if rclass: + self._resource_class = ResourceClass.get(self.request, + rclass['id']) + else: + self._resource_class = None return self._resource_class -########################################################################## -# ResourceClass -########################################################################## class ResourceClass(StringIdAPIResourceWrapper): """Wrapper for the ResourceClass object returned by the dummy model. """ - _attrs = ['name', 'service_type', 'racks'] + _attrs = ['id', 'name', 'service_type', 'racks'] - ########################################################################## - # ResourceClass Class methods - ########################################################################## @classmethod def get(cls, request, resource_class_id): rc = cls(tuskarclient(request).resource_classes.get(resource_class_id)) @@ -460,21 +449,19 @@ class ResourceClass(StringIdAPIResourceWrapper): def delete(cls, request, resource_class_id): tuskarclient(request).resource_classes.delete(resource_class_id) - ########################################################################## - # ResourceClass Properties - ########################################################################## @property def racks_ids(self): """ List of unicode ids of racks added to resource class """ return [ - unicode(rack.id) for rack in ( - self.racks)] + unicode(rack['id']) for rack in ( + self._apiresource.racks)] @property def list_racks(self): """ List of racks added to ResourceClass """ if not hasattr(self, '_racks'): - self._racks = [Rack(r) for r in self.racks] + self._racks = [Rack.get(self.request, rid) for rid in ( + self.racks_ids)] return self._racks @property @@ -486,7 +473,7 @@ class ResourceClass(StringIdAPIResourceWrapper): [r for r in ( Rack.list(self.request)) if ( r.resource_class_id is None or - r.resource_class_id == self.id)] + str(r.resource_class_id) == self.id)] return self._all_racks @property @@ -663,10 +650,6 @@ class ResourceClass(StringIdAPIResourceWrapper): self._vm_capacity = Capacity(vm_capacity) return self._vm_capacity - ########################################################################## - # ResourceClass Instance methods - ########################################################################## - ## FIXME: this will have to be done some other way def set_flavors(self, request, flavors_ids, max_vms=None): return @@ -687,19 +670,13 @@ class ResourceClass(StringIdAPIResourceWrapper): # flavor=flavor._apiresource, # resource_class=self._apiresource) - ## FIXME: this will have to be done some other way def set_racks(self, request, racks_ids): - return - # simply delete all and create new racks - #for rack_id in self.racks_ids: - # rack = Rack.get(request, rack_id) - # rack._apiresource.resource_class = None - # rack._apiresource.save() - - #for rack_id in racks_ids: - # rack = Rack.get(request, rack_id) - # rack._apiresource.resource_class = self._apiresource - # rack._apiresource.save() + # FIXME: there is a bug now in tuskar, we have to remove all racks at + # first and then add new ones: + # https://github.com/tuskar/tuskar/issues/37 + tuskarclient(request).resource_classes.update(self.id, racks=[]) + racks = [{'id': rid} for rid in racks_ids] + tuskarclient(request).resource_classes.update(self.id, racks=racks) class Flavor(StringIdAPIResourceWrapper): diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/workflows.py b/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/workflows.py index a4a58b39..29181952 100644 --- a/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/workflows.py +++ b/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/workflows.py @@ -45,8 +45,7 @@ class ResourceClassInfoAndFlavorsAction(workflows.Action): ) image = forms.ChoiceField(label=_('Provisioning Image'), required=True, - choices=[('compute-img', ('Compute-Fedora19')) - ], + choices=[('compute-img', ('Compute-Fedora19'))], widget=forms.Select( attrs={'class': 'switchable'}) ) diff --git a/openstack_dashboard/test/api_tests/tuskar_tests.py b/openstack_dashboard/test/api_tests/tuskar_tests.py index bc07f0ed..eb56c8d0 100644 --- a/openstack_dashboard/test/api_tests/tuskar_tests.py +++ b/openstack_dashboard/test/api_tests/tuskar_tests.py @@ -59,19 +59,19 @@ class TuskarApiTests(test.APITestCase): self.assertIsInstance(ret_val, api.tuskar.ResourceClass) def test_resource_class_flavor_counts(self): - rc = api.tuskar.ResourceClass.get(self.request, self.rclass1.id) + rc = self.tuskar_resource_classes.first() for f in rc.resource_class_flavors: self.assertIsInstance(f, api.tuskar.ResourceClassFlavor) self.assertEquals(7, len(rc.resource_class_flavors)) def test_resource_class_racks(self): - rc = api.tuskar.ResourceClass.get(self.request, self.rclass1.id) - for rack in rc.racks: + rc = self.tuskar_resource_classes.first() + for rack in rc.list_racks: self.assertIsInstance(rack, api.tuskar.Rack) - self.assertEquals(2, len(rc.racks)) + self.assertEquals(2, len(rc.list_racks)) def test_resource_class_nodes(self): - rc = api.tuskar.ResourceClass.get(self.request, self.rclass1.id) + rc = self.tuskar_resource_classes.first() for node in rc.nodes: self.assertIsInstance(node, api.tuskar.Node) self.assertEquals(4, len(rc.nodes)) diff --git a/openstack_dashboard/test/test_data/tuskar_data.py b/openstack_dashboard/test/test_data/tuskar_data.py index 465f5fac..61230867 100644 --- a/openstack_dashboard/test/test_data/tuskar_data.py +++ b/openstack_dashboard/test/test_data/tuskar_data.py @@ -13,6 +13,7 @@ from openstack_dashboard.api.tuskar import ( Flavor, ResourceClass, Node, Rack, ResourceClassFlavor) +from collections import namedtuple import openstack_dashboard.dashboards.infrastructure.models as dummymodels @@ -33,14 +34,18 @@ def data(TEST): # Resource Classes TEST.tuskar_resource_classes = TestDataContainer() - resource_class_1 = ResourceClass(dummymodels.ResourceClass( + ResourceClassStruct = namedtuple('ResourceClassStruct', 'id service_type\ + name racks') + resource_class_1 = ResourceClass(ResourceClassStruct( id="1", service_type="compute", + racks=[{'id': 1}], name="rclass1")) - resource_class_2 = ResourceClass(dummymodels.ResourceClass( + resource_class_2 = ResourceClass(ResourceClassStruct( id="2", service_type="compute", + racks=[], name="rclass2")) """ @@ -71,10 +76,17 @@ def data(TEST): #Racks TEST.tuskar_racks = TestDataContainer() - rack_1 = Rack(dummymodels.Rack( + # FIXME: Struct is used to provide similar object-like behaviour + # as is provided by tuskarclient + RackStruct = namedtuple('RackStruct', 'id name nodes resource_class\ + location subnet') + rack_1 = Rack(RackStruct( id="1", name='rack1', - resource_class_id='1')) + location='location', + subnet='192.168.1.0/24', + nodes=[{'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}], + resource_class={'id': '1'})) TEST.tuskar_racks.add(rack_1) |