X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plstackapi%2Fopenstack%2Fmanager.py;h=c0af4ef57bd46abf1d6b2bd7e2f48212087bfc9c;hb=93048c2934db8efa983036dc6e931b5606fedd3f;hp=9cf7652b0f09dbb42d194bec614a7e9f7be5d02a;hpb=6072206079cb0cc3c33fb7bce93f9c7424effc46;p=plstackapi.git diff --git a/plstackapi/openstack/manager.py b/plstackapi/openstack/manager.py index 9cf7652..c0af4ef 100644 --- a/plstackapi/openstack/manager.py +++ b/plstackapi/openstack/manager.py @@ -93,6 +93,43 @@ class OpenStackManager: if site.tenant_id: self.driver.delete_tenant(site.tenant_id) + @require_enabled + def save_slice(self, slice): + if not slice.tenant_id: + nova_fields = {'tenant_name': slice.name, + 'description': slice.description, + 'enabled': slice.enabled} + tenant = self.driver.create_tenant(**nova_fields) + slice.tenant_id = tenant.id + + # give caller an admin role at the tenant they've created + self.driver.add_user_role(self.caller.user_id, tenant.id, 'admin') + + # refresh credentials using this tenant + self.driver.shell.connect(username=self.driver.shell.keystone.username, + password=self.driver.shell.keystone.password, + tenant=tenant.name) + + # create network + network = self.driver.create_network(slice.name) + slice.network_id = network['id'] + + # create router + router = self.driver.create_router(slice.name) + slice.router_id = router['id'] + + if slice.id and slice.tenant_id: + self.driver.update_tenant(slice.tenant_id, + description=slice.description, + enabled=slice.enabled) + + @require_enabled + def delete_slice(self, slice): + if slice.tenant_id: + self.driver.delete_router(slice.router_id) + self.driver.delete_network(slice.network_id) + self.driver.delete_tenant(slice.tenant_id) + def refresh_nodes(self): # collect local nodes nodes = Node.objects.all()