from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.contrib.auth.signals import user_logged_in
from django.utils import timezone
+import django_evolution
class ReadonlyTabularInline(admin.TabularInline):
list_display = ('role_type',)
-class DeploymentNetworkAdminForm(forms.ModelForm):
+class DeploymentAdminForm(forms.ModelForm):
sites = forms.ModelMultipleChoiceField(
queryset=Site.objects.all(),
required=False,
)
)
class Meta:
- model = DeploymentNetwork
+ model = Deployment
def __init__(self, *args, **kwargs):
- super(DeploymentNetworkAdminForm, self).__init__(*args, **kwargs)
+ super(DeploymentAdminForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
self.fields['sites'].initial = self.instance.sites.all()
def save(self, commit=True):
- deploymentNetwork = super(DeploymentNetworkAdminForm, self).save(commit=False)
+ deploymentNetwork = super(DeploymentAdminForm, self).save(commit=False)
if commit:
deploymentNetwork.save()
return deploymentNetwork
-class DeploymentNetworkAdmin(PlanetStackBaseAdmin):
- form = DeploymentNetworkAdminForm
+class DeploymentAdmin(PlanetStackBaseAdmin):
+ form = DeploymentAdminForm
inlines = [NodeInline,SliverInline]
def get_formsets(self, request, obj=None):
fields = ['image_id', 'name', 'disk_format', 'container_format']
class NodeAdmin(admin.ModelAdmin):
- list_display = ('name', 'site', 'deploymentNetwork')
- list_filter = ('deploymentNetwork',)
+ list_display = ('name', 'site', 'deployment')
+ list_filter = ('deployment',)
class SliverForm(forms.ModelForm):
# unregister the Group model from admin.
admin.site.unregister(Group)
+#Do not show django evolution in the admin interface
+from django_evolution.models import Version, Evolution
+admin.site.unregister(Version)
+admin.site.unregister(Evolution)
+
+
+# When debugging it is often easier to see all the classes, but for regular use
+# only the top-levels should be displayed
+showAll = False
+
+admin.site.register(Deployment, DeploymentAdmin)
admin.site.register(Site, SiteAdmin)
-admin.site.register(SitePrivilege, SitePrivilegeAdmin)
admin.site.register(Slice, SliceAdmin)
-admin.site.register(SliceMembership, SliceMembershipAdmin)
#admin.site.register(Subnet)
-admin.site.register(Image, ImageAdmin)
-admin.site.register(Node, NodeAdmin)
-admin.site.register(Sliver, SliverAdmin)
admin.site.register(Key, KeyAdmin)
-admin.site.register(Role, RoleAdmin)
-admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)
-admin.site.register(ServiceClass, ServiceClassAdmin)
-admin.site.register(Reservation, ReservationAdmin)
+
+
+if showAll:
+ admin.site.register(Node, NodeAdmin)
+ admin.site.register(SliceMembership, SliceMembershipAdmin)
+ admin.site.register(SitePrivilege, SitePrivilegeAdmin)
+ admin.site.register(Role, RoleAdmin)
+ admin.site.register(Sliver, SliverAdmin)
+ admin.site.register(ServiceClass, ServiceClassAdmin)
+ admin.site.register(Reservation, ReservationAdmin)
+ admin.site.register(Image, ImageAdmin)
from types import StringTypes
-from core.models import DeploymentNetwork
+from core.models import Deployment
from django.contrib.auth import authenticate
def _get_deployment_networks(filter):
if isinstance(filter, StringTypes) and filter.isdigit():
filter = int(filter)
if isinstance(filter, int):
- deployment_networks = DeploymentNetwork.objects.filter(id=filter)
+ deployment_networks = Deployment.objects.filter(id=filter)
elif isinstance(filter, StringTypes):
- deployment_networks = DeploymentNetwork.objects.filter(name=filter)
+ deployment_networks = Deployment.objects.filter(name=filter)
elif isinstance(filter, dict):
- deployment_networks = DeploymentNetwork.objects.filter(**filter)
+ deployment_networks = Deployment.objects.filter(**filter)
else:
deployment_networks = []
return deployment_networks
def add_deployment_network(auth, name):
user = authenticate(username=auth.get('username'),
password=auth.get('password'))
- deployment = DeploymentNetwork(name=name)
+ deployment = Deployment(name=name)
deployment.save()
return deployment
[
{
"pk": 1,
- "model": "core.deploymentnetwork",
+ "model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:09.331Z",
"name": "VICCI",
},
{
"pk": 2,
- "model": "core.deploymentnetwork",
+ "model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:15.013Z",
"name": "VINI",
},
{
"pk": 3,
- "model": "core.deploymentnetwork",
+ "model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
"name": "PlanetLab Classic",
},
{
"pk": 4,
- "model": "core.deploymentnetwork",
+ "model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:29.569Z",
"name": "GENI",
"deployments": [],
"abbreviated_name": ""
}
+},
+{
+ "pk": 1,
+ "model": "core.user",
+ "fields": {
+ "firstname": "PA",
+ "user_url": null,
+ "lastname": "DMIN",
+ "is_active": true,
+ "site": null,
+ "phone": null,
+ "kuser_id": null,
+ "is_staff": true,
+ "last_login": "2013-05-28T00:10:27.088Z",
+ "key": null,
+ "timezone": "America/New_York",
+ "is_admin": true,
+ "password": "pbkdf2_sha256$10000$uMW3Svx8sYju$Olv9L2iY9WX+eUBsEHtcArU+Jc8P3eLUqt643gb6wVU=",
+ "email": "padmin@vicci.org"
+ }
+},
+{
+ "pk": 1,
+ "model": "core.serviceclass",
+ "fields": {
+ "updated": "2013-05-10T23:30:52.931Z",
+ "membershipFee": 0,
+ "membershipFeeMonths": 0,
+ "created": "2013-05-10T23:30:52.931Z",
+ "upgradeFrom": [
+ 2,
+ 3
+ ],
+ "commitment": 0,
+ "name": "Best Effort",
+ "upgradeRequiresApproval": false,
+ "description": "Best Effort"
+ }
+},
+{
+ "pk": 2,
+ "model": "core.serviceclass",
+ "fields": {
+ "updated": "2013-05-10T23:35:51.694Z",
+ "membershipFee": 100,
+ "membershipFeeMonths": 1,
+ "created": "2013-05-10T23:33:24.930Z",
+ "upgradeFrom": [
+ 1,
+ 3
+ ],
+ "commitment": 365,
+ "name": "Silver",
+ "upgradeRequiresApproval": false,
+ "description": "Silver"
+ }
+},
+{
+ "pk": 3,
+ "model": "core.serviceclass",
+ "fields": {
+ "updated": "2013-05-10T23:34:01.320Z",
+ "membershipFee": 18000,
+ "membershipFeeMonths": 12,
+ "created": "2013-05-10T23:34:01.320Z",
+ "upgradeFrom": [
+ 1,
+ 2
+ ],
+ "commitment": 365,
+ "name": "Gold",
+ "upgradeRequiresApproval": false,
+ "description": "Gold"
+ }
+},
+{
+ "pk": 1,
+ "model": "core.serviceresource",
+ "fields": {
+ "updated": "2013-05-10T23:44:50.862Z",
+ "name": "Cycles",
+ "bucketMaxSize": 0,
+ "created": "2013-05-10T23:37:09.312Z",
+ "serviceClass": 1,
+ "maxUnitsDeployment": 0,
+ "bucketInRate": 0,
+ "cost": 7,
+ "calendarReservable": false,
+ "maxDuration": 0,
+ "maxUnitsNode": 0
+ }
+},
+{
+ "pk": 2,
+ "model": "core.serviceresource",
+ "fields": {
+ "updated": "2013-05-10T23:44:39.936Z",
+ "name": "Cycles",
+ "bucketMaxSize": 0,
+ "created": "2013-05-10T23:44:39.936Z",
+ "serviceClass": 2,
+ "maxUnitsDeployment": 0,
+ "bucketInRate": 0,
+ "cost": 7,
+ "calendarReservable": false,
+ "maxDuration": 0,
+ "maxUnitsNode": 0
+ }
+},
+{
+ "pk": 3,
+ "model": "core.serviceresource",
+ "fields": {
+ "updated": "2013-05-10T23:45:16.137Z",
+ "name": "Cycles",
+ "bucketMaxSize": 0,
+ "created": "2013-05-10T23:45:16.137Z",
+ "serviceClass": 3,
+ "maxUnitsDeployment": 0,
+ "bucketInRate": 0,
+ "cost": 7,
+ "calendarReservable": false,
+ "maxDuration": 0,
+ "maxUnitsNode": 0
+ }
+},
+{
+ "pk": 4,
+ "model": "core.serviceresource",
+ "fields": {
+ "updated": "2013-05-10T23:47:39.033Z",
+ "name": "numberCores",
+ "bucketMaxSize": 210,
+ "created": "2013-05-10T23:46:33.201Z",
+ "serviceClass": 2,
+ "maxUnitsDeployment": 210,
+ "bucketInRate": 10,
+ "cost": 7,
+ "calendarReservable": true,
+ "maxDuration": 168,
+ "maxUnitsNode": 6
+ }
+},
+{
+ "pk": 5,
+ "model": "core.serviceresource",
+ "fields": {
+ "updated": "2013-05-10T23:47:31.771Z",
+ "name": "numberCores",
+ "bucketMaxSize": 0,
+ "created": "2013-05-10T23:47:31.770Z",
+ "serviceClass": 3,
+ "maxUnitsDeployment": 210,
+ "bucketInRate": 0,
+ "cost": 0,
+ "calendarReservable": true,
+ "maxDuration": 8760,
+ "maxUnitsNode": 6
+ }
}
]
from .plcorebase import PlCoreBase
-from .deploymentnetwork import DeploymentNetwork
+from .deployment import Deployment
from .site import Site
from .site import SitePrivilege
from .image import Image
# Create your models here.
-class DeploymentNetwork(PlCoreBase):
- name = models.CharField(max_length=200, unique=True, help_text="Name of the Deployment Network")
+class Deployment(PlCoreBase):
+ name = models.CharField(max_length=200, unique=True, help_text="Name of the Deployment")
def __unicode__(self): return u'%s' % (self.name)
from django.db import models
from core.models import PlCoreBase
from core.models import Site
-from core.models import DeploymentNetwork
+from core.models import Deployment
# Create your models here.
class Node(PlCoreBase):
name = models.CharField(max_length=200, unique=True, help_text="Name of the Node")
site = models.ForeignKey(Site, related_name='nodes')
- deploymentNetwork = models.ForeignKey(DeploymentNetwork, related_name='nodes')
+ deployment = models.ForeignKey(Deployment, related_name='nodes')
def __unicode__(self): return u'%s' % (self.name)
from django.db import models
from core.models import PlCoreBase
from core.models import Site
-from core.models import DeploymentNetwork
+from core.models import Deployment
# Create your models here.
from django.db import models
from core.models import PlCoreBase
from core.models import Site
-from core.models import DeploymentNetwork
+from core.models import Deployment
from core.models import ServiceClass
# Create your models here.
import os
from django.db import models
from core.models import PlCoreBase
-from core.models import DeploymentNetwork
+from core.models import Deployment
class Site(PlCoreBase):
is_public = models.BooleanField(default=True, help_text="Indicates the visibility of this site to other members")
abbreviated_name = models.CharField(max_length=80)
- deployments = models.ManyToManyField(DeploymentNetwork, blank=True, related_name='sites')
+ deployments = models.ManyToManyField(Deployment, blank=True, related_name='sites')
def __unicode__(self): return u'%s' % (self.name)
from core.models import Site
from core.models import User
from core.models import Role
-from core.models import DeploymentNetwork
+from core.models import Deployment
from core.models import ServiceClass
# Create your models here.
from core.models import Slice
from core.models import Node
from core.models import Site
-from core.models import DeploymentNetwork
+from core.models import Deployment
# Create your models here.
class Sliver(PlCoreBase):
key = models.ForeignKey(Key, related_name='slivers')
slice = models.ForeignKey(Slice, related_name='slivers')
node = models.ForeignKey(Node, related_name='slivers')
- deploymentNetwork = models.ForeignKey(DeploymentNetwork, verbose_name='deployment', related_name='sliver_deploymentNetwork')
+ deploymentNetwork = models.ForeignKey(Deployment, verbose_name='deployment', related_name='sliver_deploymentNetwork')
numberCores = models.IntegerField(verbose_name="Number of Cores", help_text="Number of cores for sliver", default=0)
'site',
'role')
-class DeploymentNetworkSerializer(serializers.HyperlinkedModelSerializer):
+class DeploymentSerializer(serializers.HyperlinkedModelSerializer):
# HyperlinkedModelSerializer doesn't include the id by default
id = serializers.Field()
sites = serializers.HyperlinkedRelatedField(view_name='deploymentnetwork-detail')
class Meta:
- model = DeploymentNetwork
+ model = Deployment
fields = ('id',
'name',
'sites'
SliceMembership: SliceMembershipSerializer,
Node: NodeSerializer,
Sliver: SliverSerializer,
- DeploymentNetwork: DeploymentNetworkSerializer,
+ Deployment: DeploymentSerializer,
Image: ImageSerializer,
None: None,
}
from rest_framework import status
from core.api.deployment_networks import add_deployment_network, delete_deployment_network, get_deployment_networks
-from core.serializers import DeploymentNetworkSerializer
+from core.serializers import DeploymentSerializer
from util.request import parse_request
-class DeploymentNetworkListCreate(APIView):
+class DeploymentListCreate(APIView):
"""
List all deployment networks or create a new role.
"""
elif 'deploymentNetwork' in data:
deployment = add_deployment_network(data['auth'], data['deploymentNetwork'].get('name'))
- serializer = DeploymentNetworkSerializer(deployment)
+ serializer = DeploymentSerializer(deployment)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
deployment_networks = get_deployment_networks(data['auth'])
- serializer = DeploymentNetworkSerializer(deployment_networks, many=True)
+ serializer = DeploymentSerializer(deployment_networks, many=True)
return Response(serializer.data)
-class DeploymentNetworkRetrieveUpdateDestroy(APIView):
+class DeploymentRetrieveUpdateDestroy(APIView):
"""
Retrieve, update or delete a deployment network
"""
deployment_networks = get_deployment_networks(data['auth'], pk)
if not deployment_networks:
return Response(status=status.HTTP_404_NOT_FOUND)
- serializer = DeploymentNetworkSerializer(deployment_networks[0])
+ serializer = DeploymentSerializer(deployment_networks[0])
return Response(serializer.data)
def put(self, request, pk, format=None):
import os
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
+#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
import string
import random
if 'viccidev10' not in node.name:
nodes_dict[node.name] = node
- deployment = DeploymentNetwork.objects.filter(name='VICCI')[0]
+ deployment = Deployment.objects.filter(name='VICCI')[0]
login_bases = ['princeton', 'stanford', 'gt', 'uw', 'mpisws']
sites = Site.objects.filter(login_base__in=login_bases)
# collect nova nodes:
'django.contrib.admindocs',
'rest_framework',
'django_extensions',
- 'core',
'django_evolution',
+ 'core',
)
# A sample logging configuration. The only tangible logging
from core.views.slice_memberships import SliceMembershipListCreate, SliceMembershipRetrieveUpdateDestroy
from core.views.slivers import SliverListCreate, SliverRetrieveUpdateDestroy
from core.views.keys import KeyListCreate, KeyRetrieveUpdateDestroy
-from core.views.deployment_networks import DeploymentNetworkListCreate, DeploymentNetworkRetrieveUpdateDestroy
+from core.views.deployment_networks import DeploymentListCreate, DeploymentRetrieveUpdateDestroy
from core.views.images import ImageListCreate, ImageRetrieveUpdateDestroy
from core.views.nodes import NodeListCreate, NodeRetrieveUpdateDestroy
from core.models import Site
url(r'^plstackapi/nodes/$', NodeListCreate.as_view(), name='node-list'),
url(r'^plstackapi/nodes/(?P<pk>[a-zA-Z0-9_\-]+)/$', NodeRetrieveUpdateDestroy.as_view(), name='node-detail'),
- url(r'^plstackapi/deploymentnetworks/$', DeploymentNetworkListCreate.as_view(), name='deploymentnetwork-list'),
- url(r'^plstackapi/deploymentnetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentNetworkRetrieveUpdateDestroy.as_view(), name='deploymentnetwork-detail'),
+ url(r'^plstackapi/deploymentnetworks/$', DeploymentListCreate.as_view(), name='deploymentnetwork-list'),
+ url(r'^plstackapi/deploymentnetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentRetrieveUpdateDestroy.as_view(), name='deploymentnetwork-detail'),
url(r'^plstackapi/images/$', ImageListCreate.as_view(), name='image-list'),
url(r'^plstackapi/images/(?P<pk>[a-zA-Z0-9_\-]+)/$', ImageRetrieveUpdateDestroy.as_view(), name='image-detail'),