Merge branch 'master' of ssh://git.planet-lab.org/git/plstackapi
authorScott Baker <smbaker@gmail.com>
Wed, 12 Nov 2014 09:12:52 +0000 (01:12 -0800)
committerScott Baker <smbaker@gmail.com>
Wed, 12 Nov 2014 09:12:52 +0000 (01:12 -0800)
43 files changed:
planetstack/core/admin.py
planetstack/core/dashboard/views/customize.py
planetstack/core/migrations/0005_auto_20141111_2311.py [new file with mode: 0644]
planetstack/core/migrations/0006_auto_20141111_2314.py [new file with mode: 0644]
planetstack/core/models/__init__.py
planetstack/core/models/flavor.py
planetstack/core/models/image.py
planetstack/core/models/network.py
planetstack/core/models/planetstackspecific.py
planetstack/core/models/reservation.py
planetstack/core/models/serviceresource.py
planetstack/core/models/site.py
planetstack/core/models/slice.py
planetstack/core/models/user.py
planetstack/core/models/userdeployments.py
planetstack/ec2_observer/deleters/site_deleter.py
planetstack/ec2_observer/deleters/site_deployment_deleter.py
planetstack/ec2_observer/deleters/slice_deleter.py
planetstack/ec2_observer/deleters/slice_deployment_deleter.py
planetstack/ec2_observer/deleters/sliver_deleter.py
planetstack/ec2_observer/deleters/user_deleter.py
planetstack/ec2_observer/deleters/user_deployment_deleter.py
planetstack/ec2_observer/steps/sync_nodes.py
planetstack/ec2_observer/steps/sync_site_deployments.py
planetstack/ec2_observer/steps/sync_sites.py
planetstack/ec2_observer/steps/sync_slivers.py
planetstack/genapi.py
planetstack/model_policies/model_policy_Network.py
planetstack/model_policies/model_policy_Slice.py
planetstack/model_policies/model_policy_User.py
planetstack/openstack/reservationagent.py
planetstack/openstack_observer/steps/__init__.py
planetstack/openstack_observer/steps/sync_image_deployments.py
planetstack/openstack_observer/steps/sync_site_deployments.py
planetstack/openstack_observer/steps/sync_site_privileges.py
planetstack/openstack_observer/steps/sync_sites.py
planetstack/openstack_observer/steps/sync_slice_deployments.py
planetstack/openstack_observer/steps/sync_slice_memberships.py
planetstack/openstack_observer/steps/sync_slices.py
planetstack/openstack_observer/steps/sync_slivers.py
planetstack/openstack_observer/steps/sync_user_deployments.py
planetstack/openstack_observer/steps/sync_users.py
planetstack/tests/generate_billing_sample.py

index a84b8bc..cd0e5dd 100644 (file)
@@ -409,7 +409,7 @@ class SitePrivilegeInline(PlStackTabularInline):
         return SitePrivilege.select_by_user(request.user)
 
 class SiteDeploymentInline(PlStackTabularInline):
-    model = SiteDeployments
+    model = SiteDeployment
     extra = 0
     suit_classes = 'suit-tab suit-tab-deployments'
     fields = ['backend_status_icon', 'deployment','site']
@@ -424,7 +424,7 @@ class SiteDeploymentInline(PlStackTabularInline):
         return super(SiteDeploymentInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
     def queryset(self, request):
-        return SiteDeployments.select_by_user(request.user)
+        return SiteDeployment.select_by_user(request.user)
 
 
 class SlicePrivilegeInline(PlStackTabularInline):
@@ -455,8 +455,8 @@ class SliceNetworkInline(PlStackTabularInline):
     fields = ['backend_status_icon', 'network']
     readonly_fields = ('backend_status_icon', )
 
-class ImageDeploymentsInline(PlStackTabularInline):
-    model = ImageDeployments
+class ImageDeploymentInline(PlStackTabularInline):
+    model = ImageDeployment
     extra = 0
     verbose_name = "Image Deployments"
     verbose_name_plural = "Image Deployments"
@@ -560,8 +560,8 @@ class DeploymentAdminForm(forms.ModelForm):
         #    create/destroy the through models ourselves. There has to be
         #    a better way...
 
-        self.manipulate_m2m_objs(deployment, self.cleaned_data['sites'], deployment.sitedeployments_set.all(), SiteDeployments, "deployment", "site")
-        self.manipulate_m2m_objs(deployment, self.cleaned_data['images'], deployment.imagedeployments_set.all(), ImageDeployments, "deployment", "image")
+        self.manipulate_m2m_objs(deployment, self.cleaned_data['sites'], deployment.sitedeployments_set.all(), SiteDeployment, "deployment", "site")
+        self.manipulate_m2m_objs(deployment, self.cleaned_data['images'], deployment.imagedeployments_set.all(), ImageDeployment, "deployment", "image")
 
       self.save_m2m()
 
@@ -580,7 +580,7 @@ class DeploymentAdmin(PlanetStackBaseAdmin):
     model = Deployment
     fieldList = ['backend_status_text', 'name', 'availability_zone', 'sites', 'images', 'flavors', 'accessControl']
     fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-sites']})]
-    inlines = [DeploymentPrivilegeInline,NodeInline,TagInline] # ,ImageDeploymentsInline]
+    inlines = [DeploymentPrivilegeInline,NodeInline,TagInline] # ,ImageDeploymentInline]
     list_display = ['backend_status_icon', 'name']
     list_display_links = ('backend_status_icon', 'name', )
     readonly_fields = ('backend_status_text', )
@@ -748,8 +748,8 @@ class SliceForm(forms.ModelForm):
             raise forms.ValidationError('slice name must begin with %s' % site.login_base)
         return cleaned_data
 
-class SliceDeploymentsInline(PlStackTabularInline):
-    model = SliceDeployments
+class SliceDeploymentInline(PlStackTabularInline):
+    model = SliceDeployment
     extra = 0
     verbose_name = "Slice Deployment"
     verbose_name_plural = "Slice Deployments"
@@ -765,7 +765,7 @@ class SliceAdmin(PlanetStackBaseAdmin):
     list_display = ('backend_status_icon', 'name', 'site','serviceClass', 'slice_url', 'max_slivers')
     list_display_links = ('backend_status_icon', 'name', )
     inlines = [SlicePrivilegeInline,SliverInline, TagInline, ReservationInline,SliceNetworkInline]
-    admin_inlines = [SliceDeploymentsInline]
+    admin_inlines = [SliceDeploymentInline]
 
     user_readonly_fields = fieldList
 
@@ -892,7 +892,7 @@ class ImageAdmin(PlanetStackBaseAdmin):
 
     suit_form_tabs =(('general','Image Details'),('slivers','Slivers'),('imagedeployments','Deployments'))
 
-    inlines = [SliverInline, ImageDeploymentsInline]
+    inlines = [SliverInline, ImageDeploymentInline]
 
     user_readonly_fields = ['name', 'disk_format', 'container_format']
 
index 212cc4d..2c399eb 100644 (file)
@@ -12,7 +12,7 @@ class DashboardCustomize(View):
             dashboards = [x.strip() for x in dashboards.split(",")]\r
             dashboards = [DashboardView.objects.get(name=x) for x in dashboards]\r
 \r
-        request.user.dashboardViews.all().delete()\r
+        request.user.userdashboardviews.all().delete()\r
 \r
         for i,dashboard in enumerate(dashboards):\r
             udbv = UserDashboardView(user=request.user, dashboardView=dashboard, order=i)\r
diff --git a/planetstack/core/migrations/0005_auto_20141111_2311.py b/planetstack/core/migrations/0005_auto_20141111_2311.py
new file mode 100644 (file)
index 0000000..257cf43
--- /dev/null
@@ -0,0 +1,280 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+import core.models.network
+import django.utils.timezone
+from django.conf import settings
+import timezones.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0004_auto_20141006_1719'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ImageDeployment',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('created', models.DateTimeField(default=django.utils.timezone.now, auto_now_add=True)),
+                ('updated', models.DateTimeField(default=django.utils.timezone.now, auto_now=True)),
+                ('enacted', models.DateTimeField(default=None, null=True)),
+                ('backend_status', models.CharField(default=b'Provisioning in progress', max_length=140)),
+                ('deleted', models.BooleanField(default=False)),
+                ('glance_image_id', models.CharField(help_text=b'Glance image id', max_length=200, null=True, blank=True)),
+                ('deployment', models.ForeignKey(related_name=b'imagedeployments', to='core.Deployment')),
+                ('image', models.ForeignKey(related_name=b'imagedeployments', to='core.Image')),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='SiteDeployment',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('created', models.DateTimeField(default=django.utils.timezone.now, auto_now_add=True)),
+                ('updated', models.DateTimeField(default=django.utils.timezone.now, auto_now=True)),
+                ('enacted', models.DateTimeField(default=None, null=True)),
+                ('backend_status', models.CharField(default=b'Provisioning in progress', max_length=140)),
+                ('deleted', models.BooleanField(default=False)),
+                ('tenant_id', models.CharField(help_text=b'Keystone tenant id', max_length=200, null=True, blank=True)),
+                ('deployment', models.ForeignKey(related_name=b'sitedeployments', to='core.Deployment')),
+                ('site', models.ForeignKey(related_name=b'sitedeployments', to='core.Site')),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='SliceDeployment',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('created', models.DateTimeField(default=django.utils.timezone.now, auto_now_add=True)),
+                ('updated', models.DateTimeField(default=django.utils.timezone.now, auto_now=True)),
+                ('enacted', models.DateTimeField(default=None, null=True)),
+                ('backend_status', models.CharField(default=b'Provisioning in progress', max_length=140)),
+                ('deleted', models.BooleanField(default=False)),
+                ('tenant_id', models.CharField(help_text=b'Keystone tenant id', max_length=200, null=True, blank=True)),
+                ('network_id', models.CharField(help_text=b'Quantum network', max_length=256, null=True, blank=True)),
+                ('router_id', models.CharField(help_text=b'Quantum router id', max_length=256, null=True, blank=True)),
+                ('subnet_id', models.CharField(help_text=b'Quantum subnet id', max_length=256, null=True, blank=True)),
+                ('deployment', models.ForeignKey(related_name=b'slicedeployments', to='core.Deployment')),
+                ('slice', models.ForeignKey(related_name=b'slicedeployments', to='core.Slice')),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='UserDeployment',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('created', models.DateTimeField(default=django.utils.timezone.now, auto_now_add=True)),
+                ('updated', models.DateTimeField(default=django.utils.timezone.now, auto_now=True)),
+                ('enacted', models.DateTimeField(default=None, null=True)),
+                ('backend_status', models.CharField(default=b'Provisioning in progress', max_length=140)),
+                ('deleted', models.BooleanField(default=False)),
+                ('kuser_id', models.CharField(help_text=b'Keystone user id', max_length=200, null=True, blank=True)),
+                ('deployment', models.ForeignKey(related_name=b'userdeployments', to='core.Deployment')),
+                ('user', models.ForeignKey(related_name=b'userdeployments', to=settings.AUTH_USER_MODEL)),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=(models.Model,),
+        ),
+        migrations.RemoveField(
+            model_name='imagedeployments',
+            name='deployment',
+        ),
+        migrations.RemoveField(
+            model_name='imagedeployments',
+            name='image',
+        ),
+        migrations.RemoveField(
+            model_name='sitedeployments',
+            name='deployment',
+        ),
+        migrations.RemoveField(
+            model_name='sitedeployments',
+            name='site',
+        ),
+        migrations.RemoveField(
+            model_name='slicedeployments',
+            name='deployment',
+        ),
+        migrations.RemoveField(
+            model_name='slicedeployments',
+            name='slice',
+        ),
+        migrations.RemoveField(
+            model_name='userdeployments',
+            name='deployment',
+        ),
+        migrations.RemoveField(
+            model_name='userdeployments',
+            name='user',
+        ),
+        migrations.AlterField(
+            model_name='deploymentcredential',
+            name='deployment',
+            field=models.ForeignKey(related_name=b'deploymentcredentials', to='core.Deployment', help_text=b'The User this credential is associated with'),
+        ),
+        migrations.AlterField(
+            model_name='deploymentprivilege',
+            name='deployment',
+            field=models.ForeignKey(related_name=b'deploymentprivileges', to='core.Deployment'),
+        ),
+        migrations.AlterField(
+            model_name='deploymentprivilege',
+            name='role',
+            field=models.ForeignKey(related_name=b'deploymentprivileges', to='core.DeploymentRole'),
+        ),
+        migrations.AlterField(
+            model_name='deploymentprivilege',
+            name='user',
+            field=models.ForeignKey(related_name=b'deploymentprivileges', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterField(
+            model_name='network',
+            name='ports',
+            field=models.CharField(blank=True, max_length=1024, null=True, validators=[core.models.network.ValidateNatList]),
+        ),
+        migrations.AlterField(
+            model_name='networkdeployments',
+            name='deployment',
+            field=models.ForeignKey(related_name=b'networkdeployments', to='core.Deployment'),
+        ),
+        migrations.AlterField(
+            model_name='networkdeployments',
+            name='network',
+            field=models.ForeignKey(related_name=b'networkdeployments', to='core.Network'),
+        ),
+        migrations.AlterField(
+            model_name='networkparameter',
+            name='parameter',
+            field=models.ForeignKey(related_name=b'networkparameters', to='core.NetworkParameterType', help_text=b'The type of the parameter'),
+        ),
+        migrations.AlterField(
+            model_name='networkslice',
+            name='network',
+            field=models.ForeignKey(related_name=b'networkslices', to='core.Network'),
+        ),
+        migrations.AlterField(
+            model_name='networkslice',
+            name='slice',
+            field=models.ForeignKey(related_name=b'networkslices', to='core.Slice'),
+        ),
+        migrations.AlterField(
+            model_name='networksliver',
+            name='network',
+            field=models.ForeignKey(related_name=b'networkslivers', to='core.Network'),
+        ),
+        migrations.AlterField(
+            model_name='networksliver',
+            name='sliver',
+            field=models.ForeignKey(related_name=b'networkslivers', to='core.Sliver'),
+        ),
+        migrations.AlterField(
+            model_name='planetstackprivilege',
+            name='planetstack',
+            field=models.ForeignKey(related_name=b'planetstackprivileges', default=1, to='core.PlanetStack'),
+        ),
+        migrations.AlterField(
+            model_name='planetstackprivilege',
+            name='user',
+            field=models.ForeignKey(related_name=b'planetstackprivileges', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterField(
+            model_name='reservedresource',
+            name='reservationSet',
+            field=models.ForeignKey(related_name=b'reservedresources', to='core.Reservation'),
+        ),
+        migrations.AlterField(
+            model_name='reservedresource',
+            name='resource',
+            field=models.ForeignKey(related_name=b'reservedresources', to='core.ServiceResource'),
+        ),
+        migrations.AlterField(
+            model_name='reservedresource',
+            name='sliver',
+            field=models.ForeignKey(related_name=b'reservedresources', to='core.Sliver'),
+        ),
+        migrations.AlterField(
+            model_name='serviceresource',
+            name='serviceClass',
+            field=models.ForeignKey(related_name=b'serviceresources', to='core.ServiceClass'),
+        ),
+        migrations.AlterField(
+            model_name='site',
+            name='deployments',
+            field=models.ManyToManyField(help_text=b'Select which sites are allowed to host nodes in this deployment', related_name=b'sites', through='core.SiteDeployment', to=b'core.Deployment', blank=True),
+        ),
+        migrations.AlterField(
+            model_name='sitecredential',
+            name='site',
+            field=models.ForeignKey(related_name=b'sitecredentials', to='core.Site', help_text=b'The User this credential is associated with'),
+        ),
+        migrations.AlterField(
+            model_name='siteprivilege',
+            name='role',
+            field=models.ForeignKey(related_name=b'siteprivileges', to='core.SiteRole'),
+        ),
+        migrations.AlterField(
+            model_name='siteprivilege',
+            name='site',
+            field=models.ForeignKey(related_name=b'siteprivileges', to='core.Site'),
+        ),
+        migrations.AlterField(
+            model_name='siteprivilege',
+            name='user',
+            field=models.ForeignKey(related_name=b'siteprivileges', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterField(
+            model_name='slicecredential',
+            name='slice',
+            field=models.ForeignKey(related_name=b'slicecredentials', to='core.Slice', help_text=b'The User this credential is associated with'),
+        ),
+        migrations.AlterField(
+            model_name='sliceprivilege',
+            name='role',
+            field=models.ForeignKey(related_name=b'sliceprivileges', to='core.SliceRole'),
+        ),
+        migrations.AlterField(
+            model_name='sliceprivilege',
+            name='slice',
+            field=models.ForeignKey(related_name=b'sliceprivileges', to='core.Slice'),
+        ),
+        migrations.AlterField(
+            model_name='sliceprivilege',
+            name='user',
+            field=models.ForeignKey(related_name=b'sliceprivileges', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterField(
+            model_name='user',
+            name='timezone',
+            field=timezones.fields.TimeZoneField(default=b'America/New_York', max_length=100, choices=[(b'Pacific/Midway', b'(GMT-1100) Pacific/Midway'), (b'Pacific/Niue', b'(GMT-1100) Pacific/Niue'), (b'Pacific/Pago_Pago', b'(GMT-1100) Pacific/Pago_Pago'), (b'America/Adak', b'(GMT-1000) America/Adak'), (b'Pacific/Honolulu', b'(GMT-1000) Pacific/Honolulu'), (b'Pacific/Johnston', b'(GMT-1000) Pacific/Johnston'), (b'Pacific/Rarotonga', b'(GMT-1000) Pacific/Rarotonga'), (b'Pacific/Tahiti', b'(GMT-1000) Pacific/Tahiti'), (b'US/Hawaii', b'(GMT-1000) US/Hawaii'), (b'Pacific/Marquesas', b'(GMT-0930) Pacific/Marquesas'), (b'America/Anchorage', b'(GMT-0900) America/Anchorage'), (b'America/Juneau', b'(GMT-0900) America/Juneau'), (b'America/Nome', b'(GMT-0900) America/Nome'), (b'America/Sitka', b'(GMT-0900) America/Sitka'), (b'America/Yakutat', b'(GMT-0900) America/Yakutat'), (b'Pacific/Gambier', b'(GMT-0900) Pacific/Gambier'), (b'US/Alaska', b'(GMT-0900) US/Alaska'), (b'America/Dawson', b'(GMT-0800) America/Dawson'), (b'America/Los_Angeles', b'(GMT-0800) America/Los_Angeles'), (b'America/Metlakatla', b'(GMT-0800) America/Metlakatla'), (b'America/Santa_Isabel', b'(GMT-0800) America/Santa_Isabel'), (b'America/Tijuana', b'(GMT-0800) America/Tijuana'), (b'America/Vancouver', b'(GMT-0800) America/Vancouver'), (b'America/Whitehorse', b'(GMT-0800) America/Whitehorse'), (b'Pacific/Pitcairn', b'(GMT-0800) Pacific/Pitcairn'), (b'US/Pacific', b'(GMT-0800) US/Pacific'), (b'America/Boise', b'(GMT-0700) America/Boise'), (b'America/Cambridge_Bay', b'(GMT-0700) America/Cambridge_Bay'), (b'America/Chihuahua', b'(GMT-0700) America/Chihuahua'), (b'America/Creston', b'(GMT-0700) America/Creston'), (b'America/Dawson_Creek', b'(GMT-0700) America/Dawson_Creek'), (b'America/Denver', b'(GMT-0700) America/Denver'), (b'America/Edmonton', b'(GMT-0700) America/Edmonton'), (b'America/Hermosillo', b'(GMT-0700) America/Hermosillo'), (b'America/Inuvik', b'(GMT-0700) America/Inuvik'), (b'America/Mazatlan', b'(GMT-0700) America/Mazatlan'), (b'America/Ojinaga', b'(GMT-0700) America/Ojinaga'), (b'America/Phoenix', b'(GMT-0700) America/Phoenix'), (b'America/Yellowknife', b'(GMT-0700) America/Yellowknife'), (b'US/Arizona', b'(GMT-0700) US/Arizona'), (b'US/Mountain', b'(GMT-0700) US/Mountain'), (b'America/Bahia_Banderas', b'(GMT-0600) America/Bahia_Banderas'), (b'America/Belize', b'(GMT-0600) America/Belize'), (b'America/Cancun', b'(GMT-0600) America/Cancun'), (b'America/Chicago', b'(GMT-0600) America/Chicago'), (b'America/Costa_Rica', b'(GMT-0600) America/Costa_Rica'), (b'America/El_Salvador', b'(GMT-0600) America/El_Salvador'), (b'America/Guatemala', b'(GMT-0600) America/Guatemala'), (b'America/Indiana/Knox', b'(GMT-0600) America/Indiana/Knox'), (b'America/Indiana/Tell_City', b'(GMT-0600) America/Indiana/Tell_City'), (b'America/Managua', b'(GMT-0600) America/Managua'), (b'America/Matamoros', b'(GMT-0600) America/Matamoros'), (b'America/Menominee', b'(GMT-0600) America/Menominee'), (b'America/Merida', b'(GMT-0600) America/Merida'), (b'America/Mexico_City', b'(GMT-0600) America/Mexico_City'), (b'America/Monterrey', b'(GMT-0600) America/Monterrey'), (b'America/North_Dakota/Beulah', b'(GMT-0600) America/North_Dakota/Beulah'), (b'America/North_Dakota/Center', b'(GMT-0600) America/North_Dakota/Center'), (b'America/North_Dakota/New_Salem', b'(GMT-0600) America/North_Dakota/New_Salem'), (b'America/Rainy_River', b'(GMT-0600) America/Rainy_River'), (b'America/Rankin_Inlet', b'(GMT-0600) America/Rankin_Inlet'), (b'America/Regina', b'(GMT-0600) America/Regina'), (b'America/Resolute', b'(GMT-0600) America/Resolute'), (b'America/Swift_Current', b'(GMT-0600) America/Swift_Current'), (b'America/Tegucigalpa', b'(GMT-0600) America/Tegucigalpa'), (b'America/Winnipeg', b'(GMT-0600) America/Winnipeg'), (b'Pacific/Galapagos', b'(GMT-0600) Pacific/Galapagos'), (b'US/Central', b'(GMT-0600) US/Central'), (b'America/Atikokan', b'(GMT-0500) America/Atikokan'), (b'America/Bogota', b'(GMT-0500) America/Bogota'), (b'America/Cayman', b'(GMT-0500) America/Cayman'), (b'America/Detroit', b'(GMT-0500) America/Detroit'), (b'America/Eirunepe', b'(GMT-0500) America/Eirunepe'), (b'America/Guayaquil', b'(GMT-0500) America/Guayaquil'), (b'America/Havana', b'(GMT-0500) America/Havana'), (b'America/Indiana/Indianapolis', b'(GMT-0500) America/Indiana/Indianapolis'), (b'America/Indiana/Marengo', b'(GMT-0500) America/Indiana/Marengo'), (b'America/Indiana/Petersburg', b'(GMT-0500) America/Indiana/Petersburg'), (b'America/Indiana/Vevay', b'(GMT-0500) America/Indiana/Vevay'), (b'America/Indiana/Vincennes', b'(GMT-0500) America/Indiana/Vincennes'), (b'America/Indiana/Winamac', b'(GMT-0500) America/Indiana/Winamac'), (b'America/Iqaluit', b'(GMT-0500) America/Iqaluit'), (b'America/Jamaica', b'(GMT-0500) America/Jamaica'), (b'America/Kentucky/Louisville', b'(GMT-0500) America/Kentucky/Louisville'), (b'America/Kentucky/Monticello', b'(GMT-0500) America/Kentucky/Monticello'), (b'America/Lima', b'(GMT-0500) America/Lima'), (b'America/Nassau', b'(GMT-0500) America/Nassau'), (b'America/New_York', b'(GMT-0500) America/New_York'), (b'America/Nipigon', b'(GMT-0500) America/Nipigon'), (b'America/Panama', b'(GMT-0500) America/Panama'), (b'America/Pangnirtung', b'(GMT-0500) America/Pangnirtung'), (b'America/Port-au-Prince', b'(GMT-0500) America/Port-au-Prince'), (b'America/Rio_Branco', b'(GMT-0500) America/Rio_Branco'), (b'America/Thunder_Bay', b'(GMT-0500) America/Thunder_Bay'), (b'America/Toronto', b'(GMT-0500) America/Toronto'), (b'Pacific/Easter', b'(GMT-0500) Pacific/Easter'), (b'US/Eastern', b'(GMT-0500) US/Eastern'), (b'America/Caracas', b'(GMT-0430) America/Caracas'), (b'America/Anguilla', b'(GMT-0400) America/Anguilla'), (b'America/Antigua', b'(GMT-0400) America/Antigua'), (b'America/Aruba', b'(GMT-0400) America/Aruba'), (b'America/Barbados', b'(GMT-0400) America/Barbados'), (b'America/Blanc-Sablon', b'(GMT-0400) America/Blanc-Sablon'), (b'America/Boa_Vista', b'(GMT-0400) America/Boa_Vista'), (b'America/Curacao', b'(GMT-0400) America/Curacao'), (b'America/Dominica', b'(GMT-0400) America/Dominica'), (b'America/Glace_Bay', b'(GMT-0400) America/Glace_Bay'), (b'America/Goose_Bay', b'(GMT-0400) America/Goose_Bay'), (b'America/Grand_Turk', b'(GMT-0400) America/Grand_Turk'), (b'America/Grenada', b'(GMT-0400) America/Grenada'), (b'America/Guadeloupe', b'(GMT-0400) America/Guadeloupe'), (b'America/Guyana', b'(GMT-0400) America/Guyana'), (b'America/Halifax', b'(GMT-0400) America/Halifax'), (b'America/Kralendijk', b'(GMT-0400) America/Kralendijk'), (b'America/La_Paz', b'(GMT-0400) America/La_Paz'), (b'America/Lower_Princes', b'(GMT-0400) America/Lower_Princes'), (b'America/Manaus', b'(GMT-0400) America/Manaus'), (b'America/Marigot', b'(GMT-0400) America/Marigot'), (b'America/Martinique', b'(GMT-0400) America/Martinique'), (b'America/Moncton', b'(GMT-0400) America/Moncton'), (b'America/Montserrat', b'(GMT-0400) America/Montserrat'), (b'America/Port_of_Spain', b'(GMT-0400) America/Port_of_Spain'), (b'America/Porto_Velho', b'(GMT-0400) America/Porto_Velho'), (b'America/Puerto_Rico', b'(GMT-0400) America/Puerto_Rico'), (b'America/Santo_Domingo', b'(GMT-0400) America/Santo_Domingo'), (b'America/St_Barthelemy', b'(GMT-0400) America/St_Barthelemy'), (b'America/St_Kitts', b'(GMT-0400) America/St_Kitts'), (b'America/St_Lucia', b'(GMT-0400) America/St_Lucia'), (b'America/St_Thomas', b'(GMT-0400) America/St_Thomas'), (b'America/St_Vincent', b'(GMT-0400) America/St_Vincent'), (b'America/Thule', b'(GMT-0400) America/Thule'), (b'America/Tortola', b'(GMT-0400) America/Tortola'), (b'Atlantic/Bermuda', b'(GMT-0400) Atlantic/Bermuda'), (b'America/St_Johns', b'(GMT-0330) America/St_Johns'), (b'America/Araguaina', b'(GMT-0300) America/Araguaina'), (b'America/Argentina/Buenos_Aires', b'(GMT-0300) America/Argentina/Buenos_Aires'), (b'America/Argentina/Catamarca', b'(GMT-0300) America/Argentina/Catamarca'), (b'America/Argentina/Cordoba', b'(GMT-0300) America/Argentina/Cordoba'), (b'America/Argentina/Jujuy', b'(GMT-0300) America/Argentina/Jujuy'), (b'America/Argentina/La_Rioja', b'(GMT-0300) America/Argentina/La_Rioja'), (b'America/Argentina/Mendoza', b'(GMT-0300) America/Argentina/Mendoza'), (b'America/Argentina/Rio_Gallegos', b'(GMT-0300) America/Argentina/Rio_Gallegos'), (b'America/Argentina/Salta', b'(GMT-0300) America/Argentina/Salta'), (b'America/Argentina/San_Juan', b'(GMT-0300) America/Argentina/San_Juan'), (b'America/Argentina/San_Luis', b'(GMT-0300) America/Argentina/San_Luis'), (b'America/Argentina/Tucuman', b'(GMT-0300) America/Argentina/Tucuman'), (b'America/Argentina/Ushuaia', b'(GMT-0300) America/Argentina/Ushuaia'), (b'America/Asuncion', b'(GMT-0300) America/Asuncion'), (b'America/Bahia', b'(GMT-0300) America/Bahia'), (b'America/Belem', b'(GMT-0300) America/Belem'), (b'America/Campo_Grande', b'(GMT-0300) America/Campo_Grande'), (b'America/Cayenne', b'(GMT-0300) America/Cayenne'), (b'America/Cuiaba', b'(GMT-0300) America/Cuiaba'), (b'America/Fortaleza', b'(GMT-0300) America/Fortaleza'), (b'America/Godthab', b'(GMT-0300) America/Godthab'), (b'America/Maceio', b'(GMT-0300) America/Maceio'), (b'America/Miquelon', b'(GMT-0300) America/Miquelon'), (b'America/Paramaribo', b'(GMT-0300) America/Paramaribo'), (b'America/Recife', b'(GMT-0300) America/Recife'), (b'America/Santarem', b'(GMT-0300) America/Santarem'), (b'America/Santiago', b'(GMT-0300) America/Santiago'), (b'Antarctica/Palmer', b'(GMT-0300) Antarctica/Palmer'), (b'Antarctica/Rothera', b'(GMT-0300) Antarctica/Rothera'), (b'Atlantic/Stanley', b'(GMT-0300) Atlantic/Stanley'), (b'America/Montevideo', b'(GMT-0200) America/Montevideo'), (b'America/Noronha', b'(GMT-0200) America/Noronha'), (b'America/Sao_Paulo', b'(GMT-0200) America/Sao_Paulo'), (b'Atlantic/South_Georgia', b'(GMT-0200) Atlantic/South_Georgia'), (b'America/Scoresbysund', b'(GMT-0100) America/Scoresbysund'), (b'Atlantic/Azores', b'(GMT-0100) Atlantic/Azores'), (b'Atlantic/Cape_Verde', b'(GMT-0100) Atlantic/Cape_Verde'), (b'Africa/Abidjan', b'(GMT+0000) Africa/Abidjan'), (b'Africa/Accra', b'(GMT+0000) Africa/Accra'), (b'Africa/Bamako', b'(GMT+0000) Africa/Bamako'), (b'Africa/Banjul', b'(GMT+0000) Africa/Banjul'), (b'Africa/Bissau', b'(GMT+0000) Africa/Bissau'), (b'Africa/Casablanca', b'(GMT+0000) Africa/Casablanca'), (b'Africa/Conakry', b'(GMT+0000) Africa/Conakry'), (b'Africa/Dakar', b'(GMT+0000) Africa/Dakar'), (b'Africa/El_Aaiun', b'(GMT+0000) Africa/El_Aaiun'), (b'Africa/Freetown', b'(GMT+0000) Africa/Freetown'), (b'Africa/Lome', b'(GMT+0000) Africa/Lome'), (b'Africa/Monrovia', b'(GMT+0000) Africa/Monrovia'), (b'Africa/Nouakchott', b'(GMT+0000) Africa/Nouakchott'), (b'Africa/Ouagadougou', b'(GMT+0000) Africa/Ouagadougou'), (b'Africa/Sao_Tome', b'(GMT+0000) Africa/Sao_Tome'), (b'America/Danmarkshavn', b'(GMT+0000) America/Danmarkshavn'), (b'Antarctica/Troll', b'(GMT+0000) Antarctica/Troll'), (b'Atlantic/Canary', b'(GMT+0000) Atlantic/Canary'), (b'Atlantic/Faroe', b'(GMT+0000) Atlantic/Faroe'), (b'Atlantic/Madeira', b'(GMT+0000) Atlantic/Madeira'), (b'Atlantic/Reykjavik', b'(GMT+0000) Atlantic/Reykjavik'), (b'Atlantic/St_Helena', b'(GMT+0000) Atlantic/St_Helena'), (b'Europe/Dublin', b'(GMT+0000) Europe/Dublin'), (b'Europe/Guernsey', b'(GMT+0000) Europe/Guernsey'), (b'Europe/Isle_of_Man', b'(GMT+0000) Europe/Isle_of_Man'), (b'Europe/Jersey', b'(GMT+0000) Europe/Jersey'), (b'Europe/Lisbon', b'(GMT+0000) Europe/Lisbon'), (b'Europe/London', b'(GMT+0000) Europe/London'), (b'GMT', b'(GMT+0000) GMT'), (b'UTC', b'(GMT+0000) UTC'), (b'Africa/Algiers', b'(GMT+0100) Africa/Algiers'), (b'Africa/Bangui', b'(GMT+0100) Africa/Bangui'), (b'Africa/Brazzaville', b'(GMT+0100) Africa/Brazzaville'), (b'Africa/Ceuta', b'(GMT+0100) Africa/Ceuta'), (b'Africa/Douala', b'(GMT+0100) Africa/Douala'), (b'Africa/Kinshasa', b'(GMT+0100) Africa/Kinshasa'), (b'Africa/Lagos', b'(GMT+0100) Africa/Lagos'), (b'Africa/Libreville', b'(GMT+0100) Africa/Libreville'), (b'Africa/Luanda', b'(GMT+0100) Africa/Luanda'), (b'Africa/Malabo', b'(GMT+0100) Africa/Malabo'), (b'Africa/Ndjamena', b'(GMT+0100) Africa/Ndjamena'), (b'Africa/Niamey', b'(GMT+0100) Africa/Niamey'), (b'Africa/Porto-Novo', b'(GMT+0100) Africa/Porto-Novo'), (b'Africa/Tunis', b'(GMT+0100) Africa/Tunis'), (b'Arctic/Longyearbyen', b'(GMT+0100) Arctic/Longyearbyen'), (b'Europe/Amsterdam', b'(GMT+0100) Europe/Amsterdam'), (b'Europe/Andorra', b'(GMT+0100) Europe/Andorra'), (b'Europe/Belgrade', b'(GMT+0100) Europe/Belgrade'), (b'Europe/Berlin', b'(GMT+0100) Europe/Berlin'), (b'Europe/Bratislava', b'(GMT+0100) Europe/Bratislava'), (b'Europe/Brussels', b'(GMT+0100) Europe/Brussels'), (b'Europe/Budapest', b'(GMT+0100) Europe/Budapest'), (b'Europe/Busingen', b'(GMT+0100) Europe/Busingen'), (b'Europe/Copenhagen', b'(GMT+0100) Europe/Copenhagen'), (b'Europe/Gibraltar', b'(GMT+0100) Europe/Gibraltar'), (b'Europe/Ljubljana', b'(GMT+0100) Europe/Ljubljana'), (b'Europe/Luxembourg', b'(GMT+0100) Europe/Luxembourg'), (b'Europe/Madrid', b'(GMT+0100) Europe/Madrid'), (b'Europe/Malta', b'(GMT+0100) Europe/Malta'), (b'Europe/Monaco', b'(GMT+0100) Europe/Monaco'), (b'Europe/Oslo', b'(GMT+0100) Europe/Oslo'), (b'Europe/Paris', b'(GMT+0100) Europe/Paris'), (b'Europe/Podgorica', b'(GMT+0100) Europe/Podgorica'), (b'Europe/Prague', b'(GMT+0100) Europe/Prague'), (b'Europe/Rome', b'(GMT+0100) Europe/Rome'), (b'Europe/San_Marino', b'(GMT+0100) Europe/San_Marino'), (b'Europe/Sarajevo', b'(GMT+0100) Europe/Sarajevo'), (b'Europe/Skopje', b'(GMT+0100) Europe/Skopje'), (b'Europe/Stockholm', b'(GMT+0100) Europe/Stockholm'), (b'Europe/Tirane', b'(GMT+0100) Europe/Tirane'), (b'Europe/Vaduz', b'(GMT+0100) Europe/Vaduz'), (b'Europe/Vatican', b'(GMT+0100) Europe/Vatican'), (b'Europe/Vienna', b'(GMT+0100) Europe/Vienna'), (b'Europe/Warsaw', b'(GMT+0100) Europe/Warsaw'), (b'Europe/Zagreb', b'(GMT+0100) Europe/Zagreb'), (b'Europe/Zurich', b'(GMT+0100) Europe/Zurich'), (b'Africa/Blantyre', b'(GMT+0200) Africa/Blantyre'), (b'Africa/Bujumbura', b'(GMT+0200) Africa/Bujumbura'), (b'Africa/Cairo', b'(GMT+0200) Africa/Cairo'), (b'Africa/Gaborone', b'(GMT+0200) Africa/Gaborone'), (b'Africa/Harare', b'(GMT+0200) Africa/Harare'), (b'Africa/Johannesburg', b'(GMT+0200) Africa/Johannesburg'), (b'Africa/Kigali', b'(GMT+0200) Africa/Kigali'), (b'Africa/Lubumbashi', b'(GMT+0200) Africa/Lubumbashi'), (b'Africa/Lusaka', b'(GMT+0200) Africa/Lusaka'), (b'Africa/Maputo', b'(GMT+0200) Africa/Maputo'), (b'Africa/Maseru', b'(GMT+0200) Africa/Maseru'), (b'Africa/Mbabane', b'(GMT+0200) Africa/Mbabane'), (b'Africa/Tripoli', b'(GMT+0200) Africa/Tripoli'), (b'Africa/Windhoek', b'(GMT+0200) Africa/Windhoek'), (b'Asia/Amman', b'(GMT+0200) Asia/Amman'), (b'Asia/Beirut', b'(GMT+0200) Asia/Beirut'), (b'Asia/Damascus', b'(GMT+0200) Asia/Damascus'), (b'Asia/Gaza', b'(GMT+0200) Asia/Gaza'), (b'Asia/Hebron', b'(GMT+0200) Asia/Hebron'), (b'Asia/Jerusalem', b'(GMT+0200) Asia/Jerusalem'), (b'Asia/Nicosia', b'(GMT+0200) Asia/Nicosia'), (b'Europe/Athens', b'(GMT+0200) Europe/Athens'), (b'Europe/Bucharest', b'(GMT+0200) Europe/Bucharest'), (b'Europe/Chisinau', b'(GMT+0200) Europe/Chisinau'), (b'Europe/Helsinki', b'(GMT+0200) Europe/Helsinki'), (b'Europe/Istanbul', b'(GMT+0200) Europe/Istanbul'), (b'Europe/Kaliningrad', b'(GMT+0200) Europe/Kaliningrad'), (b'Europe/Kiev', b'(GMT+0200) Europe/Kiev'), (b'Europe/Mariehamn', b'(GMT+0200) Europe/Mariehamn'), (b'Europe/Riga', b'(GMT+0200) Europe/Riga'), (b'Europe/Sofia', b'(GMT+0200) Europe/Sofia'), (b'Europe/Tallinn', b'(GMT+0200) Europe/Tallinn'), (b'Europe/Uzhgorod', b'(GMT+0200) Europe/Uzhgorod'), (b'Europe/Vilnius', b'(GMT+0200) Europe/Vilnius'), (b'Europe/Zaporozhye', b'(GMT+0200) Europe/Zaporozhye'), (b'Africa/Addis_Ababa', b'(GMT+0300) Africa/Addis_Ababa'), (b'Africa/Asmara', b'(GMT+0300) Africa/Asmara'), (b'Africa/Dar_es_Salaam', b'(GMT+0300) Africa/Dar_es_Salaam'), (b'Africa/Djibouti', b'(GMT+0300) Africa/Djibouti'), (b'Africa/Juba', b'(GMT+0300) Africa/Juba'), (b'Africa/Kampala', b'(GMT+0300) Africa/Kampala'), (b'Africa/Khartoum', b'(GMT+0300) Africa/Khartoum'), (b'Africa/Mogadishu', b'(GMT+0300) Africa/Mogadishu'), (b'Africa/Nairobi', b'(GMT+0300) Africa/Nairobi'), (b'Antarctica/Syowa', b'(GMT+0300) Antarctica/Syowa'), (b'Asia/Aden', b'(GMT+0300) Asia/Aden'), (b'Asia/Baghdad', b'(GMT+0300) Asia/Baghdad'), (b'Asia/Bahrain', b'(GMT+0300) Asia/Bahrain'), (b'Asia/Kuwait', b'(GMT+0300) Asia/Kuwait'), (b'Asia/Qatar', b'(GMT+0300) Asia/Qatar'), (b'Asia/Riyadh', b'(GMT+0300) Asia/Riyadh'), (b'Europe/Minsk', b'(GMT+0300) Europe/Minsk'), (b'Europe/Moscow', b'(GMT+0300) Europe/Moscow'), (b'Europe/Simferopol', b'(GMT+0300) Europe/Simferopol'), (b'Europe/Volgograd', b'(GMT+0300) Europe/Volgograd'), (b'Indian/Antananarivo', b'(GMT+0300) Indian/Antananarivo'), (b'Indian/Comoro', b'(GMT+0300) Indian/Comoro'), (b'Indian/Mayotte', b'(GMT+0300) Indian/Mayotte'), (b'Asia/Tehran', b'(GMT+0330) Asia/Tehran'), (b'Asia/Baku', b'(GMT+0400) Asia/Baku'), (b'Asia/Dubai', b'(GMT+0400) Asia/Dubai'), (b'Asia/Muscat', b'(GMT+0400) Asia/Muscat'), (b'Asia/Tbilisi', b'(GMT+0400) Asia/Tbilisi'), (b'Asia/Yerevan', b'(GMT+0400) Asia/Yerevan'), (b'Europe/Samara', b'(GMT+0400) Europe/Samara'), (b'Indian/Mahe', b'(GMT+0400) Indian/Mahe'), (b'Indian/Mauritius', b'(GMT+0400) Indian/Mauritius'), (b'Indian/Reunion', b'(GMT+0400) Indian/Reunion'), (b'Asia/Kabul', b'(GMT+0430) Asia/Kabul'), (b'Antarctica/Mawson', b'(GMT+0500) Antarctica/Mawson'), (b'Asia/Aqtau', b'(GMT+0500) Asia/Aqtau'), (b'Asia/Aqtobe', b'(GMT+0500) Asia/Aqtobe'), (b'Asia/Ashgabat', b'(GMT+0500) Asia/Ashgabat'), (b'Asia/Dushanbe', b'(GMT+0500) Asia/Dushanbe'), (b'Asia/Karachi', b'(GMT+0500) Asia/Karachi'), (b'Asia/Oral', b'(GMT+0500) Asia/Oral'), (b'Asia/Samarkand', b'(GMT+0500) Asia/Samarkand'), (b'Asia/Tashkent', b'(GMT+0500) Asia/Tashkent'), (b'Asia/Yekaterinburg', b'(GMT+0500) Asia/Yekaterinburg'), (b'Indian/Kerguelen', b'(GMT+0500) Indian/Kerguelen'), (b'Indian/Maldives', b'(GMT+0500) Indian/Maldives'), (b'Asia/Colombo', b'(GMT+0530) Asia/Colombo'), (b'Asia/Kolkata', b'(GMT+0530) Asia/Kolkata'), (b'Asia/Kathmandu', b'(GMT+0545) Asia/Kathmandu'), (b'Antarctica/Vostok', b'(GMT+0600) Antarctica/Vostok'), (b'Asia/Almaty', b'(GMT+0600) Asia/Almaty'), (b'Asia/Bishkek', b'(GMT+0600) Asia/Bishkek'), (b'Asia/Dhaka', b'(GMT+0600) Asia/Dhaka'), (b'Asia/Novosibirsk', b'(GMT+0600) Asia/Novosibirsk'), (b'Asia/Omsk', b'(GMT+0600) Asia/Omsk'), (b'Asia/Qyzylorda', b'(GMT+0600) Asia/Qyzylorda'), (b'Asia/Thimphu', b'(GMT+0600) Asia/Thimphu'), (b'Asia/Urumqi', b'(GMT+0600) Asia/Urumqi'), (b'Indian/Chagos', b'(GMT+0600) Indian/Chagos'), (b'Asia/Rangoon', b'(GMT+0630) Asia/Rangoon'), (b'Indian/Cocos', b'(GMT+0630) Indian/Cocos'), (b'Antarctica/Davis', b'(GMT+0700) Antarctica/Davis'), (b'Asia/Bangkok', b'(GMT+0700) Asia/Bangkok'), (b'Asia/Ho_Chi_Minh', b'(GMT+0700) Asia/Ho_Chi_Minh'), (b'Asia/Hovd', b'(GMT+0700) Asia/Hovd'), (b'Asia/Jakarta', b'(GMT+0700) Asia/Jakarta'), (b'Asia/Krasnoyarsk', b'(GMT+0700) Asia/Krasnoyarsk'), (b'Asia/Novokuznetsk', b'(GMT+0700) Asia/Novokuznetsk'), (b'Asia/Phnom_Penh', b'(GMT+0700) Asia/Phnom_Penh'), (b'Asia/Pontianak', b'(GMT+0700) Asia/Pontianak'), (b'Asia/Vientiane', b'(GMT+0700) Asia/Vientiane'), (b'Indian/Christmas', b'(GMT+0700) Indian/Christmas'), (b'Antarctica/Casey', b'(GMT+0800) Antarctica/Casey'), (b'Asia/Brunei', b'(GMT+0800) Asia/Brunei'), (b'Asia/Chita', b'(GMT+0800) Asia/Chita'), (b'Asia/Choibalsan', b'(GMT+0800) Asia/Choibalsan'), (b'Asia/Hong_Kong', b'(GMT+0800) Asia/Hong_Kong'), (b'Asia/Irkutsk', b'(GMT+0800) Asia/Irkutsk'), (b'Asia/Kuala_Lumpur', b'(GMT+0800) Asia/Kuala_Lumpur'), (b'Asia/Kuching', b'(GMT+0800) Asia/Kuching'), (b'Asia/Macau', b'(GMT+0800) Asia/Macau'), (b'Asia/Makassar', b'(GMT+0800) Asia/Makassar'), (b'Asia/Manila', b'(GMT+0800) Asia/Manila'), (b'Asia/Shanghai', b'(GMT+0800) Asia/Shanghai'), (b'Asia/Singapore', b'(GMT+0800) Asia/Singapore'), (b'Asia/Taipei', b'(GMT+0800) Asia/Taipei'), (b'Asia/Ulaanbaatar', b'(GMT+0800) Asia/Ulaanbaatar'), (b'Australia/Perth', b'(GMT+0800) Australia/Perth'), (b'Australia/Eucla', b'(GMT+0845) Australia/Eucla'), (b'Asia/Dili', b'(GMT+0900) Asia/Dili'), (b'Asia/Jayapura', b'(GMT+0900) Asia/Jayapura'), (b'Asia/Khandyga', b'(GMT+0900) Asia/Khandyga'), (b'Asia/Pyongyang', b'(GMT+0900) Asia/Pyongyang'), (b'Asia/Seoul', b'(GMT+0900) Asia/Seoul'), (b'Asia/Tokyo', b'(GMT+0900) Asia/Tokyo'), (b'Asia/Yakutsk', b'(GMT+0900) Asia/Yakutsk'), (b'Pacific/Palau', b'(GMT+0900) Pacific/Palau'), (b'Australia/Darwin', b'(GMT+0930) Australia/Darwin'), (b'Antarctica/DumontDUrville', b'(GMT+1000) Antarctica/DumontDUrville'), (b'Asia/Magadan', b'(GMT+1000) Asia/Magadan'), (b'Asia/Sakhalin', b'(GMT+1000) Asia/Sakhalin'), (b'Asia/Ust-Nera', b'(GMT+1000) Asia/Ust-Nera'), (b'Asia/Vladivostok', b'(GMT+1000) Asia/Vladivostok'), (b'Australia/Brisbane', b'(GMT+1000) Australia/Brisbane'), (b'Australia/Lindeman', b'(GMT+1000) Australia/Lindeman'), (b'Pacific/Chuuk', b'(GMT+1000) Pacific/Chuuk'), (b'Pacific/Guam', b'(GMT+1000) Pacific/Guam'), (b'Pacific/Port_Moresby', b'(GMT+1000) Pacific/Port_Moresby'), (b'Pacific/Saipan', b'(GMT+1000) Pacific/Saipan'), (b'Australia/Adelaide', b'(GMT+1030) Australia/Adelaide'), (b'Australia/Broken_Hill', b'(GMT+1030) Australia/Broken_Hill'), (b'Antarctica/Macquarie', b'(GMT+1100) Antarctica/Macquarie'), (b'Asia/Srednekolymsk', b'(GMT+1100) Asia/Srednekolymsk'), (b'Australia/Currie', b'(GMT+1100) Australia/Currie'), (b'Australia/Hobart', b'(GMT+1100) Australia/Hobart'), (b'Australia/Lord_Howe', b'(GMT+1100) Australia/Lord_Howe'), (b'Australia/Melbourne', b'(GMT+1100) Australia/Melbourne'), (b'Australia/Sydney', b'(GMT+1100) Australia/Sydney'), (b'Pacific/Efate', b'(GMT+1100) Pacific/Efate'), (b'Pacific/Guadalcanal', b'(GMT+1100) Pacific/Guadalcanal'), (b'Pacific/Kosrae', b'(GMT+1100) Pacific/Kosrae'), (b'Pacific/Noumea', b'(GMT+1100) Pacific/Noumea'), (b'Pacific/Pohnpei', b'(GMT+1100) Pacific/Pohnpei'), (b'Pacific/Norfolk', b'(GMT+1130) Pacific/Norfolk'), (b'Asia/Anadyr', b'(GMT+1200) Asia/Anadyr'), (b'Asia/Kamchatka', b'(GMT+1200) Asia/Kamchatka'), (b'Pacific/Funafuti', b'(GMT+1200) Pacific/Funafuti'), (b'Pacific/Kwajalein', b'(GMT+1200) Pacific/Kwajalein'), (b'Pacific/Majuro', b'(GMT+1200) Pacific/Majuro'), (b'Pacific/Nauru', b'(GMT+1200) Pacific/Nauru'), (b'Pacific/Tarawa', b'(GMT+1200) Pacific/Tarawa'), (b'Pacific/Wake', b'(GMT+1200) Pacific/Wake'), (b'Pacific/Wallis', b'(GMT+1200) Pacific/Wallis'), (b'Antarctica/McMurdo', b'(GMT+1300) Antarctica/McMurdo'), (b'Pacific/Auckland', b'(GMT+1300) Pacific/Auckland'), (b'Pacific/Enderbury', b'(GMT+1300) Pacific/Enderbury'), (b'Pacific/Fakaofo', b'(GMT+1300) Pacific/Fakaofo'), (b'Pacific/Fiji', b'(GMT+1300) Pacific/Fiji'), (b'Pacific/Tongatapu', b'(GMT+1300) Pacific/Tongatapu'), (b'Pacific/Chatham', b'(GMT+1345) Pacific/Chatham'), (b'Pacific/Apia', b'(GMT+1400) Pacific/Apia'), (b'Pacific/Kiritimati', b'(GMT+1400) Pacific/Kiritimati')]),
+        ),
+        migrations.AlterField(
+            model_name='usercredential',
+            name='user',
+            field=models.ForeignKey(related_name=b'usercredentials', to=settings.AUTH_USER_MODEL, help_text=b'The User this credential is associated with'),
+        ),
+        migrations.AlterField(
+            model_name='userdashboardview',
+            name='dashboardView',
+            field=models.ForeignKey(related_name=b'userdashboardviews', to='core.DashboardView'),
+        ),
+        migrations.AlterField(
+            model_name='userdashboardview',
+            name='user',
+            field=models.ForeignKey(related_name=b'userdashboardviews', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/planetstack/core/migrations/0006_auto_20141111_2314.py b/planetstack/core/migrations/0006_auto_20141111_2314.py
new file mode 100644 (file)
index 0000000..37a197d
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0005_auto_20141111_2311'),
+    ]
+
+    operations = [
+        migrations.DeleteModel(
+            name='ImageDeployments',
+        ),
+        migrations.DeleteModel(
+            name='SiteDeployments',
+        ),
+        migrations.DeleteModel(
+            name='SliceDeployments',
+        ),
+        migrations.DeleteModel(
+            name='UserDeployments',
+        ),
+    ]
index 2070e16..821939e 100644 (file)
@@ -5,15 +5,15 @@ from .service import Service
 from .service import ServiceAttribute
 from .tag import Tag
 from .role import Role
-from .site import Site,Deployment, DeploymentRole, DeploymentPrivilege, SiteDeployments
+from .site import Site,Deployment, DeploymentRole, DeploymentPrivilege, SiteDeployment
 from .dashboard import DashboardView
 from .user import User, UserDashboardView
 from .serviceclass import ServiceClass
 from .site import DeploymentLinkManager,DeploymentLinkDeletionManager
-from .slice import Slice, SliceDeployments
-from .site import SitePrivilege, SiteDeployments
-from .userdeployments import UserDeployments
-from .image import Image, ImageDeployments
+from .slice import Slice, SliceDeployment
+from .site import SitePrivilege, SiteDeployment
+from .userdeployments import UserDeployment
+from .image import Image, ImageDeployment
 from .node import Node
 from .serviceresource import ServiceResource
 from .slice import SliceRole
index 04747af..20002dd 100644 (file)
@@ -29,7 +29,7 @@ class FlavorParameterType(PlCoreBase):
     def __unicode__(self):  return u'%s' % (self.name)
 
 class FlavorParameter(PlCoreBase):
-    parameter = models.ForeignKey(FlavorParameterType, related_name="parameters", help_text="The type of the parameter")
+    parameter = models.ForeignKey(FlavorParameterType, related_name="flavorparameters", help_text="The type of the parameter")
     value = models.CharField(help_text="The value of this parameter", max_length=1024)
 
     flavor = models.ForeignKey(Flavor,related_name='flavorparameter')
index fdeb2cc..1bca1b9 100644 (file)
@@ -14,7 +14,7 @@ class Image(PlCoreBase):
 
     def __unicode__(self):  return u'%s' % (self.name)
 
-class ImageDeployments(PlCoreBase):
+class ImageDeployment(PlCoreBase):
     objects = DeploymentLinkManager()
     deleted_objects = DeploymentLinkDeletionManager()
     image = models.ForeignKey(Image,related_name='imagedeployments')
index ee239a7..3c5a19b 100644 (file)
@@ -125,8 +125,8 @@ class NetworkDeployments(PlCoreBase):
     deleted_objects = DeploymentLinkDeletionManager()
 
     # Stores the openstack ids at various deployments
-    network = models.ForeignKey(Network)
-    deployment = models.ForeignKey(Deployment)
+    network = models.ForeignKey(Network, related_name='networkdeployments')
+    deployment = models.ForeignKey(Deployment, related_name='networkdeployments')
     net_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum network")
     router_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum router id")
     subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
@@ -149,8 +149,8 @@ class NetworkSlice(PlCoreBase):
     # This object exists solely so we can implement the permission check when
     # adding slices to networks. It adds no additional fields to the relation.
 
-    network = models.ForeignKey(Network)
-    slice = models.ForeignKey(Slice)
+    network = models.ForeignKey(Network,related_name='networkslices')
+    slice = models.ForeignKey(Slice,related_name='networkslices')
 
     def save(self, *args, **kwds):
         slice = self.slice
@@ -178,8 +178,8 @@ class NetworkSlice(PlCoreBase):
         return qs
 
 class NetworkSliver(PlCoreBase):
-    network = models.ForeignKey(Network)
-    sliver = models.ForeignKey(Sliver)
+    network = models.ForeignKey(Network,related_name='networkslivers')
+    sliver = models.ForeignKey(Sliver,related_name='networkslivers')
     ip = models.GenericIPAddressField(help_text="Sliver ip address", blank=True, null=True)
     port_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum port id")
 
@@ -227,7 +227,7 @@ class NetworkParameterType(PlCoreBase):
     def __unicode__(self):  return u'%s' % (self.name)
 
 class NetworkParameter(PlCoreBase):
-    parameter = models.ForeignKey(NetworkParameterType, related_name="parameters", help_text="The type of the parameter")
+    parameter = models.ForeignKey(NetworkParameterType, related_name="networkparameters", help_text="The type of the parameter")
     value = models.CharField(help_text="The value of this parameter", max_length=1024)
 
     # The required fields to do a ObjectType lookup, and object_id assignment
index 9007a51..2102a6e 100644 (file)
@@ -20,8 +20,8 @@ class PlanetStackRole(PlCoreBase):
     def __unicode__(self):  return u'%s' % (self.role)
 
 class PlanetStackPrivilege(PlCoreBase):
-    user = models.ForeignKey('User', related_name='planetstack_privileges')
-    planetstack = models.ForeignKey('PlanetStack', related_name='planetstack_privileges', default=1)
+    user = models.ForeignKey('User', related_name='planetstackprivileges')
+    planetstack = models.ForeignKey('PlanetStack', related_name='planetstackprivileges', default=1)
     role = models.ForeignKey('PlanetStackRole')
 
     def __unicode__(self):  return u'%s %s %s' % (self.planetstack, self.user, self.role)
index db3769f..4dd1274 100644 (file)
@@ -32,10 +32,10 @@ class Reservation(PlCoreBase):
         return qs
 
 class ReservedResource(PlCoreBase):
-    sliver = models.ForeignKey(Sliver, related_name="reservedResourrces")
-    resource = models.ForeignKey(ServiceResource, related_name="reservedResources")
+    sliver = models.ForeignKey(Sliver, related_name="reservedresources")
+    resource = models.ForeignKey(ServiceResource, related_name="reservedresources")
     quantity = models.IntegerField(default=1)
-    reservationSet = models.ForeignKey(Reservation, related_name="reservedResources")
+    reservationSet = models.ForeignKey(Reservation, related_name="reservedresources")
 
     class Meta(PlCoreBase.Meta):
        verbose_name_plural = "Reserved Resources"
index e849425..2f88dc9 100644 (file)
@@ -8,7 +8,7 @@ from core.models import ServiceClass
 # Create your models here.
 
 class ServiceResource(PlCoreBase):
-    serviceClass = models.ForeignKey(ServiceClass, related_name = "resources")
+    serviceClass = models.ForeignKey(ServiceClass, related_name = "serviceresources")
     name = models.CharField(max_length=32)
     maxUnitsDeployment = models.IntegerField(default=1)
     maxUnitsNode = models.IntegerField(default=1)
index 0ade5df..09eb786 100644 (file)
@@ -105,7 +105,7 @@ class Site(PlCoreBase):
     abbreviated_name = models.CharField(max_length=80)
 
     #deployments = models.ManyToManyField('Deployment', blank=True, related_name='sites')
-    deployments = models.ManyToManyField('Deployment', through='SiteDeployments', blank=True, help_text="Select which sites are allowed to host nodes in this deployment", related_name='sites')
+    deployments = models.ManyToManyField('Deployment', through='SiteDeployment', blank=True, help_text="Select which sites are allowed to host nodes in this deployment", related_name='sites')
     tags = generic.GenericRelation(Tag)
 
     def __unicode__(self):  return u'%s' % (self.name)
@@ -141,9 +141,9 @@ class SiteRole(PlCoreBase):
 
 class SitePrivilege(PlCoreBase):
 
-    user = models.ForeignKey('User', related_name='site_privileges')
-    site = models.ForeignKey('Site', related_name='site_privileges')
-    role = models.ForeignKey('SiteRole')
+    user = models.ForeignKey('User', related_name='siteprivileges')
+    site = models.ForeignKey('Site', related_name='siteprivileges')
+    role = models.ForeignKey('SiteRole',related_name='siteprivileges')
 
     def __unicode__(self):  return u'%s %s %s' % (self.site, self.user, self.role)
 
@@ -193,7 +193,7 @@ class Deployment(PlCoreBase):
 
         if slice:
             potential_users.append(slice.creator)
-            for priv in slice.slice_privileges.all():
+            for priv in slice.sliceprivileges.all():
                 if priv.user not in potential_users:
                     potential_users.append(priv.user)
 
@@ -229,9 +229,9 @@ class DeploymentPrivilege(PlCoreBase):
     objects = DeploymentLinkManager()
     deleted_objects = DeploymentLinkDeletionManager()
 
-    user = models.ForeignKey('User', related_name='deployment_privileges')
-    deployment = models.ForeignKey('Deployment', related_name='deployment_privileges')
-    role = models.ForeignKey('DeploymentRole')
+    user = models.ForeignKey('User', related_name='deploymentprivileges')
+    deployment = models.ForeignKey('Deployment', related_name='deploymentprivileges')
+    role = models.ForeignKey('DeploymentRole',related_name='deploymentprivileges')
 
     def __unicode__(self):  return u'%s %s %s' % (self.deployment, self.user, self.role)
 
@@ -255,12 +255,12 @@ class DeploymentPrivilege(PlCoreBase):
             qs = DeploymentPrivilege.objects.filter(id__in=dpriv_ids)
         return qs 
 
-class SiteDeployments(PlCoreBase):
+class SiteDeployment(PlCoreBase):
     objects = DeploymentLinkManager()
     deleted_objects = DeploymentLinkDeletionManager()
 
-    site = models.ForeignKey(Site)
-    deployment = models.ForeignKey(Deployment)
+    site = models.ForeignKey(Site,related_name='sitedeployments')
+    deployment = models.ForeignKey(Deployment,related_name='sitedeployments')
     tenant_id = models.CharField(null=True, blank=True, max_length=200, help_text="Keystone tenant id")    
 
     #class Meta:
index ed10caf..d438bdf 100644 (file)
@@ -102,9 +102,9 @@ class SliceRole(PlCoreBase):
     def __unicode__(self):  return u'%s' % (self.role)
 
 class SlicePrivilege(PlCoreBase):
-    user = models.ForeignKey('User', related_name='slice_privileges')
-    slice = models.ForeignKey('Slice', related_name='slice_privileges')
-    role = models.ForeignKey('SliceRole')
+    user = models.ForeignKey('User', related_name='sliceprivileges')
+    slice = models.ForeignKey('Slice', related_name='sliceprivileges')
+    role = models.ForeignKey('SliceRole',related_name='sliceprivileges')
 
     def __unicode__(self):  return u'%s %s %s' % (self.slice, self.user, self.role)
 
@@ -120,7 +120,7 @@ class SlicePrivilege(PlCoreBase):
             qs = SlicePrivilege.objects.filter(id__in=sp_ids)
         return qs
 
-class SliceDeployments(PlCoreBase):
+class SliceDeployment(PlCoreBase):
     objects = DeploymentLinkManager()
     deleted_objects = DeploymentLinkDeletionManager()
 
@@ -136,8 +136,8 @@ class SliceDeployments(PlCoreBase):
     @staticmethod
     def select_by_user(user):
         if user.is_admin:
-            qs = SliceDeployments.objects.all()
+            qs = SliceDeployment.objects.all()
         else:
             slices = Slice.select_by_user(user)
-            qs = SliceDeployments.objects.filter(slice__in=slices)
+            qs = SliceDeployment.objects.filter(slice__in=slices)
         return qs    
index a935d22..7063f4f 100644 (file)
@@ -183,7 +183,7 @@ class User(AbstractBaseUser, DiffModelMixIn):
     def get_dashboards(self):
         DEFAULT_DASHBOARDS=["Tenant"]
 
-        dashboards = sorted(list(self.dashboardViews.all()), key=attrgetter('order'))
+        dashboards = sorted(list(self.userdashboardviews.all()), key=attrgetter('order'))
         dashboards = [x.dashboardView for x in dashboards]
 
         if not dashboards:
@@ -285,6 +285,6 @@ class User(AbstractBaseUser, DiffModelMixIn):
         self.delete(*args, **kwds)
 
 class UserDashboardView(PlCoreBase):
-     user = models.ForeignKey(User, related_name="dashboardViews")
-     dashboardView = models.ForeignKey(DashboardView, related_name="dashboardViews")
+     user = models.ForeignKey(User, related_name='userdashboardviews')
+     dashboardView = models.ForeignKey(DashboardView, related_name='userdashboardviews')
      order = models.IntegerField(default=0)
index 5685668..d0337ba 100644 (file)
@@ -6,12 +6,12 @@ from django.db.models import F, Q
 from core.models import PlCoreBase,Site,User,Deployment
 from core.models import Deployment,DeploymentLinkManager,DeploymentLinkDeletionManager
 
-class UserDeployments(PlCoreBase):
+class UserDeployment(PlCoreBase):
     objects = DeploymentLinkManager()
     deleted_objects = DeploymentLinkDeletionManager()
 
-    user = models.ForeignKey(User)
-    deployment = models.ForeignKey(Deployment)
+    user = models.ForeignKey(User,related_name='userdeployments')
+    deployment = models.ForeignKey(Deployment,related_name='userdeployments')
     kuser_id = models.CharField(null=True, blank=True, max_length=200, help_text="Keystone user id")
 
     def __unicode__(self):  return u'%s %s' % (self.user, self.deployment.name)
@@ -19,7 +19,7 @@ class UserDeployments(PlCoreBase):
     @staticmethod
     def select_by_user(user):
         if user.is_admin:
-            qs = UserDeployments.objects.all()
+            qs = UserDeployment.objects.all()
         else:
             users = Users.select_by_user(user)
             qs = Usereployments.objects.filter(user__in=slices)
index c97dee1..88a4008 100644 (file)
@@ -1,4 +1,4 @@
-from core.models import Site, SiteDeployments
+from core.models import Site, SiteDeployment
 from observer.deleter import Deleter
 from observer.deleters.site_deployment_deleter import SiteDeploymentDeleter
 
@@ -7,7 +7,7 @@ class SiteDeleter(Deleter):
     
     def call(self, pk):
         site = Site.objects.get(pk=pk)
-        site_deployments = SiteDeployments.objects.filter(site=site)
+        site_deployments = SiteDeployment.objects.filter(site=site)
         site_deployment_deleter = SiteDeploymentDeleter()
         for site_deployment in site_deployments:
             site_deployment_deleter(site_deployment.id)
index fa97be2..db344cd 100644 (file)
@@ -1,11 +1,11 @@
-from core.models import Site, SiteDeployments
+from core.models import Site, SiteDeployment
 from observer.deleter import Deleter
 
 class SiteDeploymentDeleter(Deleter):
-    model='SiteDeployments'
+    model='SiteDeployment'
 
     def call(self, pk):
-        site_deployment = SiteDeployments.objects.get(pk=pk)
+        site_deployment = SiteDeployment.objects.get(pk=pk)
         if site_deployment.tenant_id:
             driver = self.driver.admin_driver(deployment=site_deployment.deployment.name)
             driver.delete_tenant(site_deployment.tenant_id)
index 90b58c3..e7c54e6 100644 (file)
@@ -1,4 +1,4 @@
-from core.models import Slice, SliceDeployments, User
+from core.models import Slice, SliceDeployment, User
 from observer.deleter import Deleter
 from observer.deleters.slice_deployment_deleter import SliceDeploymentDeleter
 from util.logger import Logger, logging
@@ -11,7 +11,7 @@ class SliceDeleter(Deleter):
     def call(self, pk):
         slice = Slice.objects.get(pk=pk)
         slice_deployment_deleter = SliceDeploymentDeleter()
-        for slice_deployment in SliceDeployments.objects.filter(slice=slice):
+        for slice_deployment in SliceDeployment.objects.filter(slice=slice):
             try:
                 slice_deployment_deleter(slice_deployment.id)
             except:
index 33e0836..31d26fb 100644 (file)
@@ -1,12 +1,12 @@
-from core.models import Slice, SliceDeployments, User
+from core.models import Slice, SliceDeployment, User
 from observer.deleter import Deleter
 from openstack.driver import OpenStackDriver
 
 class SliceDeploymentDeleter(Deleter):
-    model='SliceDeployments'
+    model='SliceDeployment'
 
     def call(self, pk):
-        slice_deployment = SliceDeployments.objects.get(pk=pk)
+        slice_deployment = SliceDeployment.objects.get(pk=pk)
         user = User.objects.get(id=slice_deployment.slice.creator.id)
         driver = OpenStackDriver().admin_driver(deployment=slice_deployment.deployment.name)
         client_driver = driver.client_driver(caller=user,
index 097f0f7..732e535 100644 (file)
@@ -1,4 +1,4 @@
-from core.models import Sliver, SliceDeployments
+from core.models import Sliver, SliceDeployment
 from observer.deleter import Deleter
 
 class SliverDeleter(Deleter):
index 3573f8d..3f93060 100644 (file)
@@ -1,4 +1,4 @@
-from core.models import User, UserDeployments
+from core.models import User, UserDeployment
 from observer.deleter import Deleter
 from observer.deleters.user_deployment_deleter import UserDeploymentDeleter
 
@@ -8,6 +8,6 @@ class UserDeleter(Deleter):
     def call(self, pk):
         user = User.objects.get(pk=pk)
         user_deployment_deleter = UserDeploymentDeleter()
-        for user_deployment in UserDeployments.objects.filter(user=user):
+        for user_deployment in UserDeployment.objects.filter(user=user):
             user_deployment_deleter(user_deployment.id)
         user.delete()
index 49d349b..6d3825c 100644 (file)
@@ -1,11 +1,11 @@
-from core.models import User, UserDeployments
+from core.models import User, UserDeployment
 from observer.deleter import Deleter
 
 class UserDeploymentDeleter(Deleter):
     model='UserDeployment'
 
     def call(self, pk):
-        user_deployment = UserDeployments.objects.get(pk=pk)
+        user_deployment = UserDeployment.objects.get(pk=pk)
         if user_deployment.user.kuser_id:
             driver = self.driver.admin_driver(deployment=user_deployment.deployment.name)
             driver.delete_user(user_deployment.user.kuser_id)
index 9f032ed..0fa8b61 100644 (file)
@@ -20,7 +20,7 @@ class SyncNodes(SyncStep):
             return []
 
         deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
-        current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
+        current_site_deployments = SiteDeployment.objects.filter(Q(deployment=deployment))
 
         zone_ret = aws_run('ec2 describe-availability-zones')
         zones = zone_ret['AvailabilityZones']
index 7c24f68..5adccb7 100644 (file)
@@ -7,9 +7,9 @@ from core.models.site import *
 from ec2_observer.awslib import *
 import pdb
 
-class SyncSiteDeployments(SyncStep):
+class SyncSiteDeployment(SyncStep):
     requested_interval=86400
-    provides=[SiteDeployments]
+    provides=[SiteDeployment]
 
     def fetch_pending(self, deletion):
         if (deletion):
@@ -29,7 +29,7 @@ class SyncSiteDeployments(SyncStep):
         # The syncstep should catch it
         # At any rate, we should not run if there are no deployments
         deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
-        current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
+        current_site_deployments = SiteDeployment.objects.filter(Q(deployment=deployment))
         site_dict = {}
 
         for sd in current_site_deployments:
@@ -40,7 +40,7 @@ class SyncSiteDeployments(SyncStep):
             try:
                 site_record = site_dict[site]
             except KeyError:
-                sd = SiteDeployments(site=site,deployment=deployment,tenant_id=base64.urlsafe_b64encode(os.urandom(12)))
+                sd = SiteDeployment(site=site,deployment=deployment,tenant_id=base64.urlsafe_b64encode(os.urandom(12)))
                 updated_site_deployments.append(sd)
 
         return updated_site_deployments
index 0c1c7cf..0959c71 100644 (file)
@@ -16,7 +16,7 @@ class SyncSites(SyncStep):
             return []
 
         deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
-        current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
+        current_site_deployments = SiteDeployment.objects.filter(Q(deployment=deployment))
 
         zone_ret = aws_run('ec2 describe-availability-zones')
         zones = zone_ret['AvailabilityZones']
index 15cd5eb..ed75438 100644 (file)
@@ -5,7 +5,7 @@ from django.db.models import F, Q
 from planetstack.config import Config
 from ec2_observer.syncstep import SyncStep
 from core.models.sliver import Sliver
-from core.models.slice import SlicePrivilege, SliceDeployments
+from core.models.slice import SlicePrivilege, SliceDeployment
 from core.models.network import Network, NetworkSlice, NetworkDeployments
 from util.logger import Logger, logging
 from ec2_observer.awslib import *
@@ -30,7 +30,7 @@ class SyncSlivers(SyncStep):
         my_slivers = [] 
 
         for sliver in all_slivers:
-            sd = SliceDeployments.objects.filter(Q(slice=sliver.slice))
+            sd = SliceDeployment.objects.filter(Q(slice=sliver.slice))
             if (sd):
                 if (sd.deployment.name=='Amazon EC2'):
                     my_slivers.append(sliver)
index 49317e7..b368a9a 100644 (file)
@@ -105,8 +105,8 @@ def get_REST_patterns():
         url(r'plstackapi/dashboardviews/$', DashboardViewList.as_view(), name='dashboardview-list'),
         url(r'plstackapi/dashboardviews/(?P<pk>[a-zA-Z0-9\-]+)/$', DashboardViewDetail.as_view(), name ='dashboardview-detail'),
     
-        url(r'plstackapi/imagedeployments/$', ImageDeploymentsList.as_view(), name='imagedeployments-list'),
-        url(r'plstackapi/imagedeployments/(?P<pk>[a-zA-Z0-9\-]+)/$', ImageDeploymentsDetail.as_view(), name ='imagedeployments-detail'),
+        url(r'plstackapi/imagedeployments/$', ImageDeploymentList.as_view(), name='imagedeployments-list'),
+        url(r'plstackapi/imagedeployments/(?P<pk>[a-zA-Z0-9\-]+)/$', ImageDeploymentDetail.as_view(), name ='imagedeployments-detail'),
     
         url(r'plstackapi/reservedresources/$', ReservedResourceList.as_view(), name='reservedresource-list'),
         url(r'plstackapi/reservedresources/(?P<pk>[a-zA-Z0-9\-]+)/$', ReservedResourceDetail.as_view(), name ='reservedresource-detail'),
@@ -129,8 +129,8 @@ def get_REST_patterns():
         url(r'plstackapi/reservations/$', ReservationList.as_view(), name='reservation-list'),
         url(r'plstackapi/reservations/(?P<pk>[a-zA-Z0-9\-]+)/$', ReservationDetail.as_view(), name ='reservation-detail'),
     
-        url(r'plstackapi/slice_deployments/$', SliceDeploymentsList.as_view(), name='slicedeployments-list'),
-        url(r'plstackapi/slice_deployments/(?P<pk>[a-zA-Z0-9\-]+)/$', SliceDeploymentsDetail.as_view(), name ='slicedeployments-detail'),
+        url(r'plstackapi/slice_deployments/$', SliceDeploymentList.as_view(), name='slicedeployments-list'),
+        url(r'plstackapi/slice_deployments/(?P<pk>[a-zA-Z0-9\-]+)/$', SliceDeploymentDetail.as_view(), name ='slicedeployments-detail'),
     
         url(r'plstackapi/siteprivileges/$', SitePrivilegeList.as_view(), name='siteprivilege-list'),
         url(r'plstackapi/siteprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', SitePrivilegeDetail.as_view(), name ='siteprivilege-detail'),
@@ -138,8 +138,8 @@ def get_REST_patterns():
         url(r'plstackapi/planetstacks/$', PlanetStackList.as_view(), name='planetstack-list'),
         url(r'plstackapi/planetstacks/(?P<pk>[a-zA-Z0-9\-]+)/$', PlanetStackDetail.as_view(), name ='planetstack-detail'),
     
-        url(r'plstackapi/user_deployments/$', UserDeploymentsList.as_view(), name='userdeployments-list'),
-        url(r'plstackapi/user_deployments/(?P<pk>[a-zA-Z0-9\-]+)/$', UserDeploymentsDetail.as_view(), name ='userdeployments-detail'),
+        url(r'plstackapi/user_deployments/$', UserDeploymentList.as_view(), name='userdeployments-list'),
+        url(r'plstackapi/user_deployments/(?P<pk>[a-zA-Z0-9\-]+)/$', UserDeploymentDetail.as_view(), name ='userdeployments-detail'),
     
         url(r'plstackapi/accounts/$', AccountList.as_view(), name='account-list'),
         url(r'plstackapi/accounts/(?P<pk>[a-zA-Z0-9\-]+)/$', AccountDetail.as_view(), name ='account-detail'),
@@ -159,8 +159,8 @@ def get_REST_patterns():
         url(r'plstackapi/usercredentials/$', UserCredentialList.as_view(), name='usercredential-list'),
         url(r'plstackapi/usercredentials/(?P<pk>[a-zA-Z0-9\-]+)/$', UserCredentialDetail.as_view(), name ='usercredential-detail'),
     
-        url(r'plstackapi/sitedeployments/$', SiteDeploymentsList.as_view(), name='sitedeployments-list'),
-        url(r'plstackapi/sitedeployments/(?P<pk>[a-zA-Z0-9\-]+)/$', SiteDeploymentsDetail.as_view(), name ='sitedeployments-detail'),
+        url(r'plstackapi/sitedeployments/$', SiteDeploymentList.as_view(), name='sitedeployments-list'),
+        url(r'plstackapi/sitedeployments/(?P<pk>[a-zA-Z0-9\-]+)/$', SiteDeploymentDetail.as_view(), name ='sitedeployments-detail'),
     
         url(r'plstackapi/slicetags/$', SliceTagList.as_view(), name='slicetag-list'),
         url(r'plstackapi/slicetags/(?P<pk>[a-zA-Z0-9\-]+)/$', SliceTagDetail.as_view(), name ='slicetag-detail'),
@@ -757,18 +757,18 @@ class DashboardViewIdSerializer(serializers.ModelSerializer):
 
 
 
-class ImageDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
+class ImageDeploymentSerializer(serializers.HyperlinkedModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = ImageDeployments
+        model = ImageDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','image','deployment','glance_image_id',)
 
-class ImageDeploymentsIdSerializer(serializers.ModelSerializer):
+class ImageDeploymentIdSerializer(serializers.ModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = ImageDeployments
+        model = ImageDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','image','deployment','glance_image_id',)
 
 
@@ -925,18 +925,18 @@ class ReservationIdSerializer(serializers.ModelSerializer):
 
 
 
-class SliceDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
+class SliceDeploymentSerializer(serializers.HyperlinkedModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = SliceDeployments
+        model = SliceDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','slice','deployment','tenant_id','network_id','router_id','subnet_id',)
 
-class SliceDeploymentsIdSerializer(serializers.ModelSerializer):
+class SliceDeploymentIdSerializer(serializers.ModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = SliceDeployments
+        model = SliceDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','slice','deployment','tenant_id','network_id','router_id','subnet_id',)
 
 
@@ -976,18 +976,18 @@ class PlanetStackIdSerializer(serializers.ModelSerializer):
 
 
 
-class UserDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
+class UserDeploymentSerializer(serializers.HyperlinkedModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = UserDeployments
+        model = UserDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','kuser_id',)
 
-class UserDeploymentsIdSerializer(serializers.ModelSerializer):
+class UserDeploymentIdSerializer(serializers.ModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = UserDeployments
+        model = UserDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','kuser_id',)
 
 
@@ -1095,18 +1095,18 @@ class UserCredentialIdSerializer(serializers.ModelSerializer):
 
 
 
-class SiteDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
+class SiteDeploymentSerializer(serializers.HyperlinkedModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = SiteDeployments
+        model = SiteDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',)
 
-class SiteDeploymentsIdSerializer(serializers.ModelSerializer):
+class SiteDeploymentIdSerializer(serializers.ModelSerializer):
     id = serializers.Field()
     
     class Meta:
-        model = SiteDeployments
+        model = SiteDeployment
         fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',)
 
 
@@ -1234,7 +1234,7 @@ serializerLookUp = {
 
                  DashboardView: DashboardViewSerializer,
 
-                 ImageDeployments: ImageDeploymentsSerializer,
+                 ImageDeployment: ImageDeploymentSerializer,
 
                  ReservedResource: ReservedResourceSerializer,
 
@@ -1250,13 +1250,13 @@ serializerLookUp = {
 
                  Reservation: ReservationSerializer,
 
-                 SliceDeployments: SliceDeploymentsSerializer,
+                 SliceDeployment: SliceDeploymentSerializer,
 
                  SitePrivilege: SitePrivilegeSerializer,
 
                  PlanetStack: PlanetStackSerializer,
 
-                 UserDeployments: UserDeploymentsSerializer,
+                 UserDeployment: UserDeploymentSerializer,
 
                  Account: AccountSerializer,
 
@@ -1270,7 +1270,7 @@ serializerLookUp = {
 
                  UserCredential: UserCredentialSerializer,
 
-                 SiteDeployments: SiteDeploymentsSerializer,
+                 SiteDeployment: SiteDeploymentSerializer,
 
                  SliceTag: SliceTagSerializer,
 
@@ -2709,10 +2709,10 @@ class DashboardViewDetail(PlanetStackRetrieveUpdateDestroyAPIView):
 
 
 
-class ImageDeploymentsList(generics.ListCreateAPIView):
-    queryset = ImageDeployments.objects.select_related().all()
-    serializer_class = ImageDeploymentsSerializer
-    id_serializer_class = ImageDeploymentsIdSerializer
+class ImageDeploymentList(generics.ListCreateAPIView):
+    queryset = ImageDeployment.objects.select_related().all()
+    serializer_class = ImageDeploymentSerializer
+    id_serializer_class = ImageDeploymentIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
     filter_fields = ('id','created','updated','enacted','backend_status','deleted','image','deployment','glance_image_id',)
 
@@ -2724,27 +2724,27 @@ class ImageDeploymentsList(generics.ListCreateAPIView):
             return self.serializer_class
 
     def get_queryset(self):
-        return ImageDeployments.select_by_user(self.request.user)
+        return ImageDeployment.select_by_user(self.request.user)
 
     def create(self, request, *args, **kwargs):
-        obj = ImageDeployments(**request.DATA)
+        obj = ImageDeployment(**request.DATA)
         obj.caller = request.user
         if obj.can_update(request.user):
-            return super(ImageDeploymentsList, self).create(request, *args, **kwargs)
+            return super(ImageDeploymentList, self).create(request, *args, **kwargs)
         else:
             raise Exception("failed obj.can_update")
 
-        ret = super(ImageDeploymentsList, self).create(request, *args, **kwargs)
+        ret = super(ImageDeploymentList, self).create(request, *args, **kwargs)
         if (ret.status_code%100 != 200):
             raise Exception(ret.data)
 
         return ret
 
 
-class ImageDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
-    queryset = ImageDeployments.objects.select_related().all()
-    serializer_class = ImageDeploymentsSerializer
-    id_serializer_class = ImageDeploymentsIdSerializer
+class ImageDeploymentDetail(PlanetStackRetrieveUpdateDestroyAPIView):
+    queryset = ImageDeployment.objects.select_related().all()
+    serializer_class = ImageDeploymentSerializer
+    id_serializer_class = ImageDeploymentIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -2754,7 +2754,7 @@ class ImageDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
             return self.serializer_class
     
     def get_queryset(self):
-        return ImageDeployments.select_by_user(self.request.user)
+        return ImageDeployment.select_by_user(self.request.user)
 
     # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView
 
@@ -3133,10 +3133,10 @@ class ReservationDetail(PlanetStackRetrieveUpdateDestroyAPIView):
 
 
 
-class SliceDeploymentsList(generics.ListCreateAPIView):
-    queryset = SliceDeployments.objects.select_related().all()
-    serializer_class = SliceDeploymentsSerializer
-    id_serializer_class = SliceDeploymentsIdSerializer
+class SliceDeploymentList(generics.ListCreateAPIView):
+    queryset = SliceDeployment.objects.select_related().all()
+    serializer_class = SliceDeploymentSerializer
+    id_serializer_class = SliceDeploymentIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
     filter_fields = ('id','created','updated','enacted','backend_status','deleted','slice','deployment','tenant_id','network_id','router_id','subnet_id',)
 
@@ -3148,27 +3148,27 @@ class SliceDeploymentsList(generics.ListCreateAPIView):
             return self.serializer_class
 
     def get_queryset(self):
-        return SliceDeployments.select_by_user(self.request.user)
+        return SliceDeployment.select_by_user(self.request.user)
 
     def create(self, request, *args, **kwargs):
-        obj = SliceDeployments(**request.DATA)
+        obj = SliceDeployment(**request.DATA)
         obj.caller = request.user
         if obj.can_update(request.user):
-            return super(SliceDeploymentsList, self).create(request, *args, **kwargs)
+            return super(SliceDeploymentList, self).create(request, *args, **kwargs)
         else:
             raise Exception("failed obj.can_update")
 
-        ret = super(SliceDeploymentsList, self).create(request, *args, **kwargs)
+        ret = super(SliceDeploymentList, self).create(request, *args, **kwargs)
         if (ret.status_code%100 != 200):
             raise Exception(ret.data)
 
         return ret
 
 
-class SliceDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
-    queryset = SliceDeployments.objects.select_related().all()
-    serializer_class = SliceDeploymentsSerializer
-    id_serializer_class = SliceDeploymentsIdSerializer
+class SliceDeploymentDetail(PlanetStackRetrieveUpdateDestroyAPIView):
+    queryset = SliceDeployment.objects.select_related().all()
+    serializer_class = SliceDeploymentSerializer
+    id_serializer_class = SliceDeploymentIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -3178,7 +3178,7 @@ class SliceDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
             return self.serializer_class
     
     def get_queryset(self):
-        return SliceDeployments.select_by_user(self.request.user)
+        return SliceDeployment.select_by_user(self.request.user)
 
     # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView
 
@@ -3292,10 +3292,10 @@ class PlanetStackDetail(PlanetStackRetrieveUpdateDestroyAPIView):
 
 
 
-class UserDeploymentsList(generics.ListCreateAPIView):
-    queryset = UserDeployments.objects.select_related().all()
-    serializer_class = UserDeploymentsSerializer
-    id_serializer_class = UserDeploymentsIdSerializer
+class UserDeploymentList(generics.ListCreateAPIView):
+    queryset = UserDeployment.objects.select_related().all()
+    serializer_class = UserDeploymentSerializer
+    id_serializer_class = UserDeploymentIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
     filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','kuser_id',)
 
@@ -3307,27 +3307,27 @@ class UserDeploymentsList(generics.ListCreateAPIView):
             return self.serializer_class
 
     def get_queryset(self):
-        return UserDeployments.select_by_user(self.request.user)
+        return UserDeployment.select_by_user(self.request.user)
 
     def create(self, request, *args, **kwargs):
-        obj = UserDeployments(**request.DATA)
+        obj = UserDeployment(**request.DATA)
         obj.caller = request.user
         if obj.can_update(request.user):
-            return super(UserDeploymentsList, self).create(request, *args, **kwargs)
+            return super(UserDeploymentList, self).create(request, *args, **kwargs)
         else:
             raise Exception("failed obj.can_update")
 
-        ret = super(UserDeploymentsList, self).create(request, *args, **kwargs)
+        ret = super(UserDeploymentList, self).create(request, *args, **kwargs)
         if (ret.status_code%100 != 200):
             raise Exception(ret.data)
 
         return ret
 
 
-class UserDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
-    queryset = UserDeployments.objects.select_related().all()
-    serializer_class = UserDeploymentsSerializer
-    id_serializer_class = UserDeploymentsIdSerializer
+class UserDeploymentDetail(PlanetStackRetrieveUpdateDestroyAPIView):
+    queryset = UserDeployment.objects.select_related().all()
+    serializer_class = UserDeploymentSerializer
+    id_serializer_class = UserDeploymentIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -3337,7 +3337,7 @@ class UserDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
             return self.serializer_class
     
     def get_queryset(self):
-        return UserDeployments.select_by_user(self.request.user)
+        return UserDeployment.select_by_user(self.request.user)
 
     # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView
 
@@ -3663,10 +3663,10 @@ class UserCredentialDetail(PlanetStackRetrieveUpdateDestroyAPIView):
 
 
 
-class SiteDeploymentsList(generics.ListCreateAPIView):
-    queryset = SiteDeployments.objects.select_related().all()
-    serializer_class = SiteDeploymentsSerializer
-    id_serializer_class = SiteDeploymentsIdSerializer
+class SiteDeploymentList(generics.ListCreateAPIView):
+    queryset = SiteDeployment.objects.select_related().all()
+    serializer_class = SiteDeploymentSerializer
+    id_serializer_class = SiteDeploymentIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
     filter_fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',)
 
@@ -3678,27 +3678,27 @@ class SiteDeploymentsList(generics.ListCreateAPIView):
             return self.serializer_class
 
     def get_queryset(self):
-        return SiteDeployments.select_by_user(self.request.user)
+        return SiteDeployment.select_by_user(self.request.user)
 
     def create(self, request, *args, **kwargs):
-        obj = SiteDeployments(**request.DATA)
+        obj = SiteDeployment(**request.DATA)
         obj.caller = request.user
         if obj.can_update(request.user):
-            return super(SiteDeploymentsList, self).create(request, *args, **kwargs)
+            return super(SiteDeploymentList, self).create(request, *args, **kwargs)
         else:
             raise Exception("failed obj.can_update")
 
-        ret = super(SiteDeploymentsList, self).create(request, *args, **kwargs)
+        ret = super(SiteDeploymentList, self).create(request, *args, **kwargs)
         if (ret.status_code%100 != 200):
             raise Exception(ret.data)
 
         return ret
 
 
-class SiteDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
-    queryset = SiteDeployments.objects.select_related().all()
-    serializer_class = SiteDeploymentsSerializer
-    id_serializer_class = SiteDeploymentsIdSerializer
+class SiteDeploymentDetail(PlanetStackRetrieveUpdateDestroyAPIView):
+    queryset = SiteDeployment.objects.select_related().all()
+    serializer_class = SiteDeploymentSerializer
+    id_serializer_class = SiteDeploymentIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -3708,7 +3708,7 @@ class SiteDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView):
             return self.serializer_class
     
     def get_queryset(self):
-        return SiteDeployments.select_by_user(self.request.user)
+        return SiteDeployment.select_by_user(self.request.user)
 
     # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView
 
index f48b25a..88c9f1d 100644 (file)
@@ -1,11 +1,11 @@
 from core.models import *
 
 def handle(network):
-       from core.models import SliceDeployments,NetworkDeployments
+       from core.models import SliceDeployment,NetworkDeployments
        from collections import defaultdict
        # network deployments are not visible to users. We must ensure
        # networks are deployed at all deploymets available to their slices.
-       slice_deployments = SliceDeployments.objects.all()
+       slice_deployments = SliceDeployment.objects.all()
        slice_deploy_lookup = defaultdict(list)
        for slice_deployment in slice_deployments:
                slice_deploy_lookup[slice_deployment.slice].append(slice_deployment.deployment)
index cf73aa0..7523e3e 100644 (file)
@@ -1,13 +1,13 @@
 
 def handle(slice):
-       from core.models import SiteDeployments,SliceDeployments,Deployment,Network,NetworkSlice,NetworkTemplate
+       from core.models import SiteDeployment,SliceDeployment,Deployment,Network,NetworkSlice,NetworkTemplate
        from collections import defaultdict
-       site_deployments = SiteDeployments.objects.all()
+       site_deployments = SiteDeployment.objects.all()
        site_deploy_lookup = defaultdict(list)
        for site_deployment in site_deployments:
                site_deploy_lookup[site_deployment.site].append(site_deployment.deployment)
        
-       slice_deployments = SliceDeployments.objects.all()
+       slice_deployments = SliceDeployment.objects.all()
        slice_deploy_lookup = defaultdict(list)
        for slice_deployment in slice_deployments:
                slice_deploy_lookup[slice_deployment.slice].append(slice_deployment.deployment)
@@ -19,7 +19,7 @@ def handle(slice):
        for expected_deployment in expected_deployments:
                if slice not in slice_deploy_lookup or \
                   expected_deployment not in slice_deploy_lookup[slice]:
-                       sd = SliceDeployments(slice=slice, deployment=expected_deployment)
+                       sd = SliceDeployment(slice=slice, deployment=expected_deployment)
                        sd.save()
 
        # make sure slice has at least 1 public and 1 private networkd
index 6118a7b..cc8bbe6 100644 (file)
@@ -1,16 +1,16 @@
 from core.models import *
 
 def handle(user):
-       from core.models import Deployment,SiteDeployments,UserDeployments
+       from core.models import Deployment,SiteDeployment,UserDeployment
        from collections import defaultdict
        deployments = Deployment.objects.all()
-       site_deployments = SiteDeployments.objects.all()
+       site_deployments = SiteDeployment.objects.all()
        site_deploy_lookup = defaultdict(list)
        for site_deployment in site_deployments:
                site_deploy_lookup[site_deployment.site].append(site_deployment.deployment)
 
        user_deploy_lookup = defaultdict(list)
-       for user_deployment in UserDeployments.objects.all():
+       for user_deployment in UserDeployment.objects.all():
                user_deploy_lookup[user_deployment.user].append(user_deployment.deployment)
    
        all_deployments = Deployment.objects.filter() 
@@ -27,6 +27,6 @@ def handle(user):
                if not user in user_deploy_lookup or \
                  expected_deployment not in user_deploy_lookup[user]: 
                        # add new record
-                       ud = UserDeployments(user=user, deployment=expected_deployment)
+                       ud = UserDeployment(user=user, deployment=expected_deployment)
                        ud.save()    
 
index 86c4e91..0fe406b 100644 (file)
@@ -21,7 +21,7 @@ class ReservationAgent:
                 if reservation.endTime <= tNow:
                     print "    deleting expired reservation"
                     reservation.delete()
-                for reservedResource in reservation.reservedResources.all():
+                for reservedResource in reservation.reservedresources.all():
                     sliver_resources = slivers.get(reservedResource.sliver.id, {})
                     sliver_resources[reservedResource.resource.name] = reservedResource.quantity
                     slivers[reservedResource.sliver.id] = sliver_resources
index 0151af3..74f38b7 100644 (file)
@@ -12,5 +12,5 @@
 #from .sync_roles import SyncRoles
 #from .sync_nodes import SyncNodes
 #from .sync_images import SyncImages
-#from .sync_image_deployments import SyncImageDeployments
+#from .sync_image_deployments import SyncImageDeployment
 #from .garbage_collector import GarbageCollector
index 20c22a2..4bdad87 100644 (file)
@@ -5,24 +5,24 @@ from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
 from core.models import Deployment
-from core.models import Image, ImageDeployments
+from core.models import Image, ImageDeployment
 from util.logger import Logger, logging
 \r
 logger = Logger(level=logging.INFO)
 
-class SyncImageDeployments(OpenStackSyncStep):
-    provides=[ImageDeployments]
+class SyncImageDeployment(OpenStackSyncStep):
+    provides=[ImageDeployment]
     requested_interval=0
 
     def fetch_pending(self, deleted):
         if (deleted):
             return []
-         # smbaker: commented out automatic creation of ImageDeployments as
+         # smbaker: commented out automatic creation of ImageDeployment as
          #    as they will now be configured in GUI. Not sure if this is
          #    sufficient.
 
 #        # ensure images are available across all deployments
-#        image_deployments = ImageDeployments.objects.all()
+#        image_deployments = ImageDeployment.objects.all()
 #        image_deploy_lookup = defaultdict(list)
 #        for image_deployment in image_deployments:
 #            image_deploy_lookup[image_deployment.image].append(image_deployment.deployment)
@@ -33,11 +33,11 @@ class SyncImageDeployments(OpenStackSyncStep):
 #            for expected_deployment in expected_deployments:
 #                if image not in image_deploy_lookup or \
 #                  expected_deployment not in image_deploy_lookup[image]:
-#                    id = ImageDeployments(image=image, deployment=expected_deployment)
+#                    id = ImageDeployment(image=image, deployment=expected_deployment)
 #                    id.save()
 
         # now we return all images that need to be enacted
-        return ImageDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+        return ImageDeployment.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
 
     def sync_record(self, image_deployment):
         logger.info("Working on image %s on deployment %s" % (image_deployment.image.name, image_deployment.deployment.name))
index b5e9f9a..27b8648 100644 (file)
@@ -6,9 +6,9 @@ from observer.openstacksyncstep import OpenStackSyncStep
 from core.models.site import *
 from observer.ansible import *
 
-class SyncSiteDeployments(OpenStackSyncStep):
+class SyncSiteDeployment(OpenStackSyncStep):
     requested_interval=0
-    provides=[SiteDeployments, Site]
+    provides=[SiteDeployment, Site]
 
     def sync_record(self, site_deployment):
 
index d07b279..78da7b2 100644 (file)
@@ -3,7 +3,7 @@ import base64
 from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
-from core.models import User, UserDeployments, SitePrivilege, SiteDeployments   
+from core.models import User, UserDeployment, SitePrivilege, SiteDeployment   
 
 class SyncSitePrivileges(OpenStackSyncStep):
     requested_interval=0
@@ -18,9 +18,9 @@ class SyncSitePrivileges(OpenStackSyncStep):
 
     def sync_record(self, site_priv):
         # sync site privileges at all site deployments
-        site_deployments = SiteDeployments.objects.filter(site=site_priv.site)
+        site_deployments = SiteDeployment.objects.filter(site=site_priv.site)
         for site_deployment in site_deployments:
-            user_deployments = UserDeployments.objects.filter(deployment=site_deployment.deployment)
+            user_deployments = UserDeployment.objects.filter(deployment=site_deployment.deployment)
             if user_deployments:
                 kuser_id  = user_deployments[0].kuser_id
                 driver = self.driver.admin_driver(deployment=site_deployment.deployment.name)
index c560a6a..4672878 100644 (file)
@@ -14,7 +14,7 @@ class SyncSites(OpenStackSyncStep):
         site.save()
 
     def delete_record(self, site):
-        site_deployments = SiteDeployments.objects.filter(site=site)
-        site_deployment_deleter = SyncSiteDeployments().delete_record
+        site_deployments = SiteDeployment.objects.filter(site=site)
+        site_deployment_deleter = SyncSiteDeployment().delete_record
         for site_deployment in site_deployments:
             site_deployment_deleter(site_deployment)
index 97196d6..2bc2082 100644 (file)
@@ -5,23 +5,23 @@ from netaddr import IPAddress, IPNetwork
 from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.site import Deployment, SiteDeployments
-from core.models.slice import Slice, SliceDeployments
-from core.models.userdeployments import UserDeployments
+from core.models.site import Deployment, SiteDeployment
+from core.models.slice import Slice, SliceDeployment
+from core.models.userdeployments import UserDeployment
 from util.logger import Logger, logging
 from observer.ansible import *
 
 logger = Logger(level=logging.INFO)
 
-class SyncSliceDeployments(OpenStackSyncStep):
-    provides=[SliceDeployments]
+class SyncSliceDeployment(OpenStackSyncStep):
+    provides=[SliceDeployment]
     requested_interval=0
 
     def fetch_pending(self, deleted):
         if (deleted):
-            return SliceDeployments.deleted_objects.all()
+            return SliceDeployment.deleted_objects.all()
         else:
-            return SliceDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+            return SliceDeployment.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
 
     def get_next_subnet(self, deployment=None):
         # limit ourself to 10.0.x.x for now
@@ -48,7 +48,7 @@ class SyncSliceDeployments(OpenStackSyncStep):
             logger.info("deployment %r has no admin_user, skipping" % slice_deployment.deployment)
             return
 
-       deployment_users = UserDeployments.objects.filter(user=slice_deployment.slice.creator,
+       deployment_users = UserDeployment.objects.filter(user=slice_deployment.slice.creator,
                                                              deployment=slice_deployment.deployment)            
        if not deployment_users:
            logger.info("slice createor %s has not accout at deployment %s" % (slice_deployment.slice.creator, slice_deployment.deployment.name))
index b1cd223..f51a96b 100644 (file)
@@ -4,7 +4,7 @@ from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
 from core.models.slice import *
-from core.models.userdeployments import UserDeployments
+from core.models.userdeployments import UserDeployment
 from util.logger import Logger, logging
 
 logger = Logger(level=logging.INFO)
@@ -22,11 +22,11 @@ class SyncSliceMemberships(OpenStackSyncStep):
     def sync_record(self, slice_memb):
         # sync slice memberships at all slice deployments 
         logger.info("syncing slice privilege: %s %s" % (slice_memb.slice.name, slice_memb.user.email))
-        slice_deployments = SliceDeployments.objects.filter(slice=slice_memb.slice)
+        slice_deployments = SliceDeployment.objects.filter(slice=slice_memb.slice)
         for slice_deployment in slice_deployments:
             if not slice_deployment.tenant_id:
                 continue
-            user_deployments = UserDeployments.objects.filter(deployment=slice_deployment.deployment,
+            user_deployments = UserDeployment.objects.filter(deployment=slice_deployment.deployment,
                                                               user=slice_memb.user)
             if user_deployments:
                 kuser_id  = user_deployments[0].kuser_id
index a6073b6..6d6ca46 100644 (file)
@@ -4,7 +4,7 @@ from netaddr import IPAddress, IPNetwork
 from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.slice import Slice, SliceDeployments
+from core.models.slice import Slice, SliceDeployment
 from util.logger import Logger, logging
 from observer.steps.sync_slice_deployments import *
 
@@ -15,14 +15,14 @@ class SyncSlices(OpenStackSyncStep):
     requested_interval=0
 
     def sync_record(self, slice):
-        for slice_deployment in SliceDeployments.objects.filter(slice=slice):
+        for slice_deployment in SliceDeployment.objects.filter(slice=slice):
             # bump the 'updated' timestamp and trigger observer to update
             # slice across all deployments 
             slice_deployment.save()    
 
     def delete_record(self, slice):
-        slice_deployment_deleter = SyncSliceDeployments().delete_record
-        for slice_deployment in SliceDeployments.objects.filter(slice=slice):
+        slice_deployment_deleter = SyncSliceDeployment().delete_record
+        for slice_deployment in SliceDeployment.objects.filter(slice=slice):
             try:
                 slice_deployment_deleter(slice_deployment)
             except Exception,e:
index 8237896..133c0e0 100644 (file)
@@ -4,7 +4,7 @@ from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
 from core.models.sliver import Sliver
-from core.models.slice import Slice, SlicePrivilege, SliceDeployments
+from core.models.slice import Slice, SlicePrivilege, SliceDeployment
 from core.models.network import Network, NetworkSlice, NetworkDeployments
 from util.logger import Logger, logging
 from observer.ansible import *
index f7e41a0..69faa9f 100644 (file)
@@ -5,25 +5,25 @@ from collections import defaultdict
 from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.site import SiteDeployments, Deployment
+from core.models.site import SiteDeployment, Deployment
 from core.models.user import User
-from core.models.userdeployments import UserDeployments
+from core.models.userdeployments import UserDeployment
 from util.logger import Logger, logging
 
 from observer.ansible import *
 
 logger = Logger(level=logging.INFO)
 
-class SyncUserDeployments(OpenStackSyncStep):
-    provides=[UserDeployments, User]
+class SyncUserDeployment(OpenStackSyncStep):
+    provides=[UserDeployment, User]
     requested_interval=0
 
     def fetch_pending(self, deleted):
 
         if (deleted):
-            return UserDeployments.deleted_objects.all()
+            return UserDeployment.deleted_objects.all()
         else:
-            return UserDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
+            return UserDeployment.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
 
     def sync_record(self, user_deployment):
         logger.info("sync'ing user %s at deployment %s" % (user_deployment.user, user_deployment.deployment.name))
@@ -39,7 +39,7 @@ class SyncUserDeployments(OpenStackSyncStep):
        roles = []
        # setup user deployment home site roles  
         if user_deployment.user.site:
-            site_deployments = SiteDeployments.objects.filter(site=user_deployment.user.site,
+            site_deployments = SiteDeployment.objects.filter(site=user_deployment.user.site,
                                                               deployment=user_deployment.deployment)
             if site_deployments:
                 # need the correct tenant id for site at the deployment
index a22c213..242b8be 100644 (file)
@@ -5,20 +5,20 @@ from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
 from core.models.user import User
-from core.models.userdeployments import  UserDeployments
-from observer.steps.sync_user_deployments import SyncUserDeployments
+from core.models.userdeployments import  UserDeployment
+from observer.steps.sync_user_deployments import SyncUserDeployment
 
 class SyncUsers(OpenStackSyncStep):
     provides=[User]
     requested_interval=0
 
     def sync_record(self, user):
-        for user_deployment in UserDeployments.objects.filter(user=user):
+        for user_deployment in UserDeployment.objects.filter(user=user):
             # bump the 'updated' field so user account are updated across 
             # deployments.
             user_deployment.save()
 
     def delete_record(self, user):
-        user_deployment_deleter = SyncUserDeployments().delete_record
-        for user_deployment in UserDeployments.objects.filter(user=user):
+        user_deployment_deleter = SyncUserDeployment().delete_record
+        for user_deployment in UserDeployment.objects.filter(user=user):
             user_deployment_deleter(user_deployment)
index 7fdfbdd..b1413e3 100644 (file)
@@ -118,7 +118,7 @@ for slice in Slice.objects.all():
     now = int(time.time())/HOUR_SECONDS*HOUR_SECONDS
 
     charge_kind=None
-    for resource in slice.serviceClass.resources.all():
+    for resource in slice.serviceClass.serviceresources.all():
         if resource.name == "numberCores":
             charge_kind = "reservation"
             cost = resource.cost