enable deployment networks
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 @@
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 @@
#url(r'^plstackapi/nodes/$', views.NodeList.as_view(), name='node-list'),
#url(r'^plstackapi/nodes/(?P<pk>[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<pk>[0-9]+)/$', views.DeploymentNetworkDetail.as_view(), name='deploymentnetwork-detail'),
+ url(r'^plstackapi/deploymentnetworks/$', DeploymentNetworkListCreate, name='deploymentnetwork-list'),
+ url(r'^plstackapi/deploymentnetworks/(?P<pk>[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<pk>[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)
+
+
+