From 2d81e638a70d66777c8fbe00d6f06cf3c51549eb Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Tue, 9 Apr 2013 02:34:10 -0400 Subject: [PATCH] enable deployment networks --- .../planetstack/api/deployment_networks.py | 26 +++++++++ plstackapi/planetstack/serializers.py | 3 +- plstackapi/planetstack/urls.py | 4 +- .../planetstack/views/deployment_networks.py | 58 +++++++++++++++++++ 4 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 plstackapi/planetstack/api/deployment_networks.py create mode 100644 plstackapi/planetstack/views/deployment_networks.py diff --git a/plstackapi/planetstack/api/deployment_networks.py b/plstackapi/planetstack/api/deployment_networks.py new file mode 100644 index 0000000..ed38702 --- /dev/null +++ b/plstackapi/planetstack/api/deployment_networks.py @@ -0,0 +1,26 @@ +from plstackapi.openstack.client import OpenStackClient +from plstackapi.openstack.driver import OpenStackDriver +from plstackapi.planetstack.api.auth import auth_check +from plstackapi.planetstack.models import DeploymentNetwork + + +def add_deployment_network(auth, name): + auth_check(auth) + deployment = DeploymentNetwork(name=name) + deployment.save() + return deployment + +def delete_deployment_network(auth, filter={}): + auth_check(auth) + deployments = DeploymentNetwork.objects.filter(**filter) + for deployment in deployments: + deployment.delete() + return 1 + +def get_deployment_networks(auth, filter={}): + auth_check(auth) + deployments = DeploymentNetwork.objects.filter(**filter) + return deployments + + + diff --git a/plstackapi/planetstack/serializers.py b/plstackapi/planetstack/serializers.py index eec58f0..df0b100 100644 --- a/plstackapi/planetstack/serializers.py +++ b/plstackapi/planetstack/serializers.py @@ -57,8 +57,7 @@ class DeploymentNetworkSerializer(serializers.HyperlinkedModelSerializer): sites = serializers.HyperlinkedRelatedField(view_name='sitedeploymentnetwork-detail') class Meta: model = DeploymentNetwork - fields = ('url', - 'name', + fields = ('name', 'sites' ) diff --git a/plstackapi/planetstack/urls.py b/plstackapi/planetstack/urls.py index f5380ea..58187d7 100644 --- a/plstackapi/planetstack/urls.py +++ b/plstackapi/planetstack/urls.py @@ -38,8 +38,8 @@ urlpatterns = patterns('', #url(r'^plstackapi/nodes/$', views.NodeList.as_view(), name='node-list'), #url(r'^plstackapi/nodes/(?P[0-9]+)/$', views.NodeDetail.as_view(), name='node-detail'), - #url(r'^plstackapi/deploymentnetworks/$', views.DeploymentNetworkList.as_view(), name='deploymentnetwork-list'), - #url(r'^plstackapi/deploymentnetworks/(?P[0-9]+)/$', views.DeploymentNetworkDetail.as_view(), name='deploymentnetwork-detail'), + url(r'^plstackapi/deploymentnetworks/$', DeploymentNetworkListCreate, name='deploymentnetwork-list'), + url(r'^plstackapi/deploymentnetworks/(?P[a-zA-Z0-9]+)/$', views.DeploymentNetworkRetrieveUpdateDestroy.as_view(), name='deploymentnetwork-detail'), #url(r'^plstackapi/sitedeploymentnetworks/$', views.SiteDeploymentNetworkList.as_view(), name='sitedeploymentnetwork-list'), #url(r'^plstackapi/sitedeploymentnetworks/(?P[0-9]+)/$', views.SiteDeploymentNetworkDetail.as_view(), name='sitedeploymentnetwork-detail'), diff --git a/plstackapi/planetstack/views/deployment_networks.py b/plstackapi/planetstack/views/deployment_networks.py new file mode 100644 index 0000000..5137807 --- /dev/null +++ b/plstackapi/planetstack/views/deployment_networks.py @@ -0,0 +1,58 @@ +from django.http import Http404 +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import status + +from plstackapi.planetstack.api.roles import add_deployment_network, delete_deployment_network, get_deployment_networks +from plstackapi.planetstack.serializers import DeploymentNetworkSerializer +from plstackapi.util.request import parse_request + + +class DeploymentNetworkListCreate(APIView): + """ + List all deployment networks or create a new role. + """ + + def post(self, request, format = None): + data = parse_request(request.DATA) + if 'auth' not in data: + return Response(status=status.HTTP_400_BAD_REQUEST) + elif 'deployment_network' in data: + deployment = add_deployment_network(data['auth'], data['deployment_network']) + serializer = DeploymentNetworkSerializer(deployment) + return Response(serializer.data, status=status.HTTP_201_CREATED) + else: + deployment_networks = get_deployment_networks(data['auth']) + serializer = DeploymentNetworkSerializer(deployment_networks, many=True) + return Response(serializer.data) + + +class DeploymentNetworkRetrieveUpdateDestroy(APIView): + """ + Retrieve, update or delete a deployment network + """ + + def post(self, request, pk, format=None): + """Retrieve a deployment network""" + data = parse_request(request.DATA) + if 'auth' not in data: + return Response(status=status.HTTP_400_BAD_REQUEST) + deployment_networks = get_deployment_networks(data['auth'], {'name': pk}) + if not deployment_networks: + return Response(status=status.HTTP_404_NOT_FOUND) + serializer = DeploymentNetworkSerializer(deployment_networks[0]) + return Response(serializer.data) + + def put(self, request, pk, format=None): + """deployment network update not implemnted""" + return Response(status=status.HTTP_404_NOT_FOUND) + + def delete(self, request, pk, format=None): + data = parse_request(request.DATA) + if 'auth' not in data: + return Response(status=status.HTTP_400_BAD_REQUEST) + delete_deployment_network(data['auth'], {'name': pk}) + return Response(status=status.HTTP_204_NO_CONTENT) + + + -- 2.47.0