removing plural from model names. some cleanup
Tony Mack [Tue, 6 Jan 2015 03:48:11 +0000 (22:48 -0500)]
79 files changed:
planetstack/apigen/deps.template.json [changed mode: 0755->0644]
planetstack/apigen/dot.template.dot [changed mode: 0755->0644]
planetstack/apigen/modelgen [changed mode: 0755->0644]
planetstack/core/admin.py
planetstack/core/fixtures/alpha_data.json
planetstack/core/fixtures/beta_data.json
planetstack/core/fixtures/demo_data.json
planetstack/core/fixtures/initial_data.json
planetstack/core/migrations/0001_initial.py
planetstack/core/migrations/0002_network_field_case.py [deleted file]
planetstack/core/migrations/0003_network_field_case.py [deleted file]
planetstack/core/migrations/0004_slice_field_case.py [deleted file]
planetstack/core/models/__init__.py
planetstack/core/models/controlleruser.py [moved from planetstack/core/models/controllerusers.py with 85% similarity]
planetstack/core/models/network.py
planetstack/core/models/node.py
planetstack/core/models/site.py
planetstack/core/models/slice.py
planetstack/core/static/dashboardStatic.PNG [changed mode: 0755->0644]
planetstack/core/static/logo_opague_circles.png [changed mode: 0755->0644]
planetstack/core/static/open-cloud-themed1.png [changed mode: 0755->0644]
planetstack/core/static/opencloudApp.png [changed mode: 0755->0644]
planetstack/core/xoslib/static/js/xoslib/xos-backbone.js
planetstack/core/xoslib/up.sh [changed mode: 0755->0644]
planetstack/dependency_walker.py [changed mode: 0755->0644]
planetstack/dmdot [changed mode: 0755->0644]
planetstack/ec2_observer/deleters/__init__.py [changed mode: 0755->0644]
planetstack/ec2_observer/deleters/site_deleter.py
planetstack/ec2_observer/deleters/site_deployment_deleter.py
planetstack/ec2_observer/dmdot [changed mode: 0755->0644]
planetstack/ec2_observer/event_loop.py
planetstack/ec2_observer/start.sh [changed mode: 0755->0644]
planetstack/ec2_observer/steps/__init__.py
planetstack/ec2_observer/steps/sync_nodes.py
planetstack/ec2_observer/steps/sync_site_deployments.py
planetstack/ec2_observer/steps/sync_sites.py
planetstack/genapi.py
planetstack/hpc_observer/run.sh [changed mode: 0755->0644]
planetstack/hpc_observer/start.sh [changed mode: 0755->0644]
planetstack/hpc_observer/stop.sh [changed mode: 0755->0644]
planetstack/hpc_observer/upload.sh [changed mode: 0755->0644]
planetstack/model-deps
planetstack/model_policies/__init__.py
planetstack/model_policies/model_policy_Network.py
planetstack/model_policies/model_policy_Site.py [new file with mode: 0644]
planetstack/model_policies/model_policy_Slice.py
planetstack/model_policies/model_policy_User.py
planetstack/model_policy.py
planetstack/openstack_observer/ansible.py [changed mode: 0755->0644]
planetstack/openstack_observer/event_loop.py
planetstack/openstack_observer/run_ansible [changed mode: 0755->0644]
planetstack/openstack_observer/steps/__init__.py
planetstack/openstack_observer/steps/sync_controller_networks.py
planetstack/openstack_observer/steps/sync_controller_site_deployments.py [deleted file]
planetstack/openstack_observer/steps/sync_controller_sites.py [new file with mode: 0644]
planetstack/openstack_observer/steps/sync_controller_sites.yaml [moved from planetstack/openstack_observer/steps/sync_controller_site_deployments.yaml with 100% similarity]
planetstack/openstack_observer/steps/sync_controller_slices.py
planetstack/openstack_observer/steps/sync_controller_user_site_privileges.py [new file with mode: 0644]
planetstack/openstack_observer/steps/sync_controller_user_slice_privileges.py [new file with mode: 0644]
planetstack/openstack_observer/steps/sync_controller_users.py
planetstack/openstack_observer/steps/sync_networks.py
planetstack/openstack_observer/steps/sync_nodes.py
planetstack/openstack_observer/steps/sync_site_privileges.py
planetstack/openstack_observer/steps/sync_sites.py [deleted file]
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_users.py
planetstack/planetstack-config.py [changed mode: 0755->0644]
planetstack/redhat/planetstack-backend.service [changed mode: 0755->0644]
planetstack/scripts/opencloud [changed mode: 0755->0644]
planetstack/syndicate_observer/run.sh [changed mode: 0755->0644]
planetstack/syndicate_observer/start.sh [changed mode: 0755->0644]
planetstack/syndicate_observer/stop.sh [changed mode: 0755->0644]
planetstack/syndicate_observer/syndicate-backend.py [changed mode: 0755->0644]
planetstack/tools/diff-opencloud.py [changed mode: 0755->0644]
planetstack/tools/openstack-db-cleanup.sh [changed mode: 0755->0644]
planetstack/tools/openstack-healthcheck.py [changed mode: 0755->0644]
planetstack/tools/ssh-myslice [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index e0664a5..9e9d0c6 100644 (file)
@@ -414,6 +414,13 @@ class ControllerPrivilegeInline(PlStackTabularInline):
     def queryset(self, request):
         return ControllerPrivilege.select_by_user(request.user)
 
+class ControllerSiteInline(PlStackTabularInline):
+    model = ControllerSite
+    extra = 0
+    suit_classes = 'suit-tab suit-tab-admin-only'
+    fields = ['controller', 'site_deployment', 'tenant_id']
+
+
 class SitePrivilegeInline(PlStackTabularInline):
     model = SitePrivilege
     extra = 0
@@ -432,8 +439,8 @@ class SitePrivilegeInline(PlStackTabularInline):
     def queryset(self, request):
         return SitePrivilege.select_by_user(request.user)
 
-class SiteDeploymentsInline(PlStackTabularInline):
-    model = SiteDeployments
+class SiteDeploymentInline(PlStackTabularInline):
+    model = SiteDeployment
     extra = 0
     suit_classes = 'suit-tab suit-tab-deployments'
     fields = ['backend_status_icon', 'deployment','site', 'controller']
@@ -449,10 +456,10 @@ class SiteDeploymentsInline(PlStackTabularInline):
         if db_field.name == 'controller':
             kwargs['queryset'] = Controller.select_by_user(request.user)
 
-        return super(SiteDeploymentsInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
+        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):
@@ -597,7 +604,7 @@ 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.all(), SiteDeployments, "deployment", "site")
+        self.manipulate_m2m_objs(deployment, self.cleaned_data['sites'], deployment.sitedeployments.all(), SiteDeployment, "deployment", "site")
         self.manipulate_m2m_objs(deployment, self.cleaned_data['images'], deployment.imagedeployments.all(), ImageDeployments, "deployment", "image")
         # manipulate_m2m_objs doesn't work for Flavor/Deployment relationship
         # so well handle that manually here
@@ -656,7 +663,7 @@ class DeploymentAdmin(PlanetStackBaseAdmin):
 
 class ControllerAdminForm(forms.ModelForm):
     site_deployments = forms.ModelMultipleChoiceField(
-        queryset=SiteDeployments.objects.all(),
+        queryset=SiteDeployment.objects.all(),
         required=False,
         help_text="Select which sites deployments are managed by this controller",
         widget=FilteredSelectMultiple(
@@ -710,7 +717,7 @@ class ControllerAdminForm(forms.ModelForm):
             # save_m2m() doesn't seem to work with 'through' relations. So we
             #    create/destroy the through models ourselves. There has to be
             #    a better way...
-            #self.manipulate_m2m_objs(controller, self.cleaned_data['site_deployments'], controller.controllersitedeployments.all(), ControllerSiteDeployments, "controller", "site_deployment")
+            self.manipulate_m2m_objs(controller, self.cleaned_data['site_deployments'], controller.controllersitedeployments.all(), ControllerSite, "controller", "site_deployment")
             pass
        
         self.save_m2m()
@@ -721,7 +728,7 @@ class ControllerAdmin(PlanetStackBaseAdmin):
     model = Controller 
     fieldList = ['name', 'version', 'backend_type', 'auth_url', 'admin_user', 'admin_tenant','admin_password']
     #fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-general']})]
-    inlines = [] # ,ControllerImagesInline]
+    inlines = [ControllerSiteInline] # ,ControllerImagesInline]
     list_display = ['backend_status_icon', 'name', 'version', 'backend_type']
     list_display_links = ('backend_status_icon', 'name', )
     readonly_fields = ('backend_status_text',)
@@ -787,7 +794,7 @@ class SiteAdmin(PlanetStackBaseAdmin):
     list_display = ('backend_status_icon', 'name', 'login_base','site_url', 'enabled')
     list_display_links = ('backend_status_icon', 'name', )
     filter_horizontal = ('deployments',)
-    inlines = [SliceInline,UserInline,TagInline, SitePrivilegeInline, SiteDeploymentsInline]
+    inlines = [SliceInline,UserInline,TagInline, SitePrivilegeInline, SiteDeploymentInline]
     search_fields = ['name']
 
     def queryset(self, request):
@@ -888,8 +895,8 @@ class SliceForm(forms.ModelForm):
             raise forms.ValidationError('slice name must begin with %s' % site.login_base)
         return cleaned_data
 
-class ControllerSlicesInline(PlStackTabularInline):
-    model = ControllerSlices
+class ControllerSliceInline(PlStackTabularInline):
+    model = ControllerSlice
     extra = 0
     verbose_name = "Controller Slices"
     verbose_name_plural = "Controller Slices"
@@ -905,7 +912,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 = [ControllerSlicesInline]
+    admin_inlines = [ControllerSliceInline]
 
     user_readonly_fields = fieldList
 
@@ -1472,8 +1479,8 @@ class NetworkSlicesInline(PlStackTabularInline):
     fields = ['backend_status_icon', 'network','slice']
     readonly_fields = ('backend_status_icon', )
 
-class ControllerNetworksInline(PlStackTabularInline):
-    model = ControllerNetworks
+class ControllerNetworkInline(PlStackTabularInline):
+    model = ControllerNetwork
     extra = 0
     verbose_name_plural = "Controller Networks"
     verbose_name = "Controller Network"
@@ -1495,7 +1502,7 @@ class NetworkAdmin(PlanetStackBaseAdmin):
     readonly_fields = ("subnet", )
 
     inlines = [NetworkParameterInline, NetworkSliversInline, NetworkSlicesInline, RouterInline]
-    admin_inlines = [ControllerNetworksInline]
+    admin_inlines = [ControllerNetworkInline]
 
     form=NetworkForm
 
index 77b6547..5fa6568 100644 (file)
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:08.253Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 16
 },
 {
         "backend_status": "BadRequest()",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 18
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:28.687Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 19
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:34.657Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 20
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:40.604Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 21
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:47.047Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 22
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:15.908Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 24
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-27T14:51:01.280Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 25
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-27T15:03:49.684Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 26
 },
 {
         "backend_status": "Authorization Failed: unsupported operand type(s) for +: 'NoneType' and 'str'",
         "enacted": "2014-08-08T03:49:32.318Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 27
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:03.289Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 28
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:07.804Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 29
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:12.521Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 30
 },
 {
 {
     "fields": {
         "updated": "2014-09-26T04:06:20.072Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "llptest",
         "service": null,
         "created": "2014-04-02T18:33:34.260Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-09-26T07:22:41.108Z"
 {
     "fields": {
         "updated": "2014-10-10T14:45:07.177Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "princeton_tmtest",
         "service": null,
         "created": "2014-04-16T00:04:24.968Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 18,
-        "mountDataSets": "",
+        "mount_data_sets": "",
         "backend_status": "Provisioning in progress",
         "creator": 2,
         "enacted": "2014-10-10T14:57:29.083Z"
 {
     "fields": {
         "updated": "2014-04-23T01:26:51.982Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "arizona_cassandra",
         "service": null,
         "created": "2014-04-16T15:56:51.663Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-04-23T01:26:52.036Z"
 {
     "fields": {
         "updated": "2014-04-25T14:54:19.481Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "arizona_kairos",
         "service": null,
         "created": "2014-04-16T15:58:35.898Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-04-25T14:54:19.531Z"
 {
     "fields": {
         "updated": "2014-05-01T08:29:57.116Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "arizona_tools",
         "service": null,
         "created": "2014-04-16T15:59:48.251Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-05-01T14:22:10.461Z"
 {
     "fields": {
         "updated": "2014-05-03T23:00:36.236Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "arizona_nagios",
         "service": null,
         "created": "2014-04-16T16:38:24.914Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-05-05T14:02:24.006Z"
 {
     "fields": {
         "updated": "2014-05-06T20:06:18.290Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "arizona_swift",
         "service": null,
         "created": "2014-04-16T21:39:16.203Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 20,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-05-13T00:37:49.902Z"
 {
     "fields": {
         "updated": "2014-04-21T14:59:04.649Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "onlab_marc",
         "service": null,
         "created": "2014-04-18T20:32:09.105Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-04-21T14:59:04.712Z"
 {
     "fields": {
         "updated": "2014-10-27T20:51:26.765Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "onlab_dnsdemux",
         "service": 10,
         "created": "2014-04-29T20:27:46.565Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-10-27T20:55:37.440Z"
 {
     "fields": {
         "updated": "2014-10-27T20:54:10.007Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "onlab_dnsredir",
         "service": 10,
         "created": "2014-04-29T20:31:12.915Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-10-27T20:55:15.096Z"
 {
     "fields": {
         "updated": "2014-06-17T15:01:34.396Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "acbtest4",
         "service": null,
         "created": "2014-04-30T21:05:49.535Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 4,
         "enacted": null
 {
     "fields": {
         "updated": "2014-07-04T01:08:22.892Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "smbaker-test",
         "service": null,
         "created": "2014-05-13T00:37:47.561Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank-11-2013",
+        "mount_data_sets": "GenBank-11-2013",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
 {
     "fields": {
         "updated": "2014-07-16T22:41:49.374Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "llptenant",
         "service": null,
         "created": "2014-06-19T16:02:12.793Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank-11-2013",
+        "mount_data_sets": "GenBank-11-2013",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-08-02T18:34:48.385Z"
 {
     "fields": {
         "updated": "2014-09-24T16:46:24.962Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "nfv-test",
         "service": null,
         "created": "2014-07-18T19:50:33.120Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank-11-2013",
+        "mount_data_sets": "GenBank-11-2013",
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-09-26T07:22:57.528Z"
 {
     "fields": {
         "updated": "2014-10-08T14:41:01.523Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "princeton_syndicate",
         "service": 5,
         "created": "2014-07-24T18:04:58.309Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 100,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 6,
         "enacted": "2014-10-09T18:48:00.386Z"
 {
     "fields": {
         "updated": "2014-08-27T21:42:44.586Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "test-dpk-slice",
         "service": null,
         "created": "2014-07-25T20:18:10.790Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 44,
         "enacted": "2014-09-26T07:22:32.959Z"
 {
     "fields": {
         "updated": "2014-10-27T20:47:51.541Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_hpc",
         "service": 12,
         "created": "2014-08-01T21:13:08.385Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-10-27T20:55:55.209Z"
 {
     "fields": {
         "updated": "2014-10-13T05:56:08.211Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest",
         "service": null,
         "created": "2014-08-13T01:34:15.782Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-17T22:01:54.085Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest2",
         "service": null,
         "created": "2014-08-13T01:35:54.970Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
 {
     "fields": {
         "updated": "2014-09-19T21:12:35.800Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_cmi",
         "service": 12,
         "created": "2014-08-19T21:40:01.505Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "",
         "creator": 8,
         "enacted": "2014-09-19T21:20:04.708Z"
 {
     "fields": {
         "updated": "2014-09-11T00:30:17.802Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_test_issue",
         "service": null,
         "created": "2014-09-09T23:21:40.684Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 44,
         "enacted": "2014-09-15T07:52:11.738Z"
 {
     "fields": {
         "updated": "2014-09-10T08:01:21.608Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "us-east-1a_",
         "service": null,
         "created": "2014-09-10T08:00:53.468Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 5,
         "enacted": "2014-09-10T08:02:56.730Z"
 {
     "fields": {
         "updated": "2014-09-16T22:54:04.709Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan2",
         "service": null,
         "created": "2014-09-12T18:47:53.242Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 5,
         "enacted": "2014-09-16T22:59:56.547Z"
 {
     "fields": {
         "updated": "2014-09-12T18:51:31.033Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan3",
         "service": null,
         "created": "2014-09-12T18:51:31.033Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:16.231Z"
 {
     "fields": {
         "updated": "2014-09-12T19:04:23.162Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan4",
         "service": null,
         "created": "2014-09-12T19:04:23.162Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:18.432Z"
 {
     "fields": {
         "updated": "2014-09-12T19:16:41.990Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan5",
         "service": null,
         "created": "2014-09-12T19:16:41.990Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:20.670Z"
 {
     "fields": {
         "updated": "2014-09-15T07:12:57.834Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan6",
         "service": null,
         "created": "2014-09-15T07:12:57.834Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:22.908Z"
 {
     "fields": {
         "updated": "2014-09-15T07:15:16.246Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan7",
         "service": null,
         "created": "2014-09-15T07:15:16.246Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:25.213Z"
 {
     "fields": {
         "updated": "2014-09-15T07:18:03.925Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan8",
         "service": null,
         "created": "2014-09-15T07:18:03.925Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:27.411Z"
 {
     "fields": {
         "updated": "2014-09-15T07:31:12.107Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan9",
         "service": null,
         "created": "2014-09-15T07:31:12.107Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:51:48.950Z"
 {
     "fields": {
         "updated": "2014-09-15T07:42:13.531Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan11",
         "service": null,
         "created": "2014-09-15T07:42:13.531Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:07.246Z"
 {
     "fields": {
         "updated": "2014-09-15T07:45:20.779Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan12",
         "service": null,
         "created": "2014-09-15T07:45:20.779Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T07:52:09.456Z"
 {
     "fields": {
         "updated": "2014-09-15T07:58:58.353Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan13",
         "service": null,
         "created": "2014-09-15T07:58:58.353Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T08:00:28.796Z"
 {
     "fields": {
         "updated": "2014-09-15T08:02:45.413Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_sapan14",
         "service": null,
         "created": "2014-09-15T08:02:45.413Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": null,
         "enacted": "2014-09-15T08:09:25.299Z"
 {
     "fields": {
         "updated": "2014-09-16T22:58:07.348Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_09_16",
         "service": null,
         "created": "2014-09-16T22:58:07.348Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 44,
         "enacted": "2014-09-16T22:59:58.840Z"
 {
     "fields": {
         "updated": "2014-09-30T22:36:46.871Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_cacti",
         "service": null,
         "created": "2014-09-30T19:55:59.681Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-09-30T22:43:42.489Z"
 {
     "fields": {
         "updated": "2014-10-07T21:13:38.926Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "princeton_tmtest2",
         "service": null,
         "created": "2014-10-07T21:13:38.926Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": null,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-08T20:36:39.879Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "wash_test1",
         "service": null,
         "created": "2014-10-08T20:36:39.879Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": null,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-08T20:38:05.304Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "wash_test2",
         "service": null,
         "created": "2014-10-08T20:38:05.304Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": null,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-21T00:54:11.022Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "princeton_publicdata",
         "service": 5,
         "created": "2014-10-09T16:41:43.157Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 6,
         "enacted": "2014-10-21T01:19:40.962Z"
 {
     "fields": {
         "updated": "2014-10-09T18:18:35.616Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest3",
         "service": null,
         "created": "2014-10-09T18:18:35.616Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-15T23:44:36.199Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbaskertest3",
         "service": null,
         "created": "2014-10-15T23:09:39.090Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-17T01:28:37.634Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest4",
         "service": null,
         "created": "2014-10-16T06:58:38.654Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-16T07:41:48.632Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest5",
         "service": null,
         "created": "2014-10-16T07:38:34.933Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-22T18:00:45.519Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_nagios",
         "service": null,
         "created": "2014-10-22T03:35:22.689Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-10-22T18:11:41.748Z"
 {
     "fields": {
         "updated": "2014-10-22T16:39:24.806Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_tmtest",
         "service": null,
         "created": "2014-10-22T13:28:03.980Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 2,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-22T16:39:34.491Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_tmtest2",
         "service": null,
         "created": "2014-10-22T15:51:45.792Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 2,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-22T17:26:45.518Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "stanford_tmtest3",
         "service": null,
         "created": "2014-10-22T17:26:45.518Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 2,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-23T21:39:06.053Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest6",
         "service": null,
         "created": "2014-10-22T17:28:02.779Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-10-23T21:58:16.184Z"
 {
     "fields": {
         "updated": "2014-10-23T06:39:46.041Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest7",
         "service": null,
         "created": "2014-10-22T17:57:06.157Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-10-23T07:16:37.324Z"
 {
     "fields": {
         "updated": "2014-10-27T22:39:21.997Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_planetstack",
         "service": null,
         "created": "2014-10-27T20:41:41.388Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-10-27T20:56:21.233Z"
         "created": "2013-12-09T14:15:16.899Z",
         "deleted": false,
         "description": "Connect a sliver to the public network using dedicated public IPv4 address",
-        "sharedNetworkName": "ext-net",
-        "guaranteedBandwidth": 0,
+        "shared_network_name": "ext-net",
+        "guaranteed_bandwidth": 0,
         "visibility": "public",
-        "sharedNetworkId": "",
+        "shared_network_id": "",
         "translation": "none",
         "backend_status": "Provisioning in progress",
         "enacted": "2014-05-21T15:36:30Z"
         "created": "2013-12-09T14:17:29.551Z",
         "deleted": false,
         "description": "Connect a sliver to the public network via NAT",
-        "sharedNetworkName": "nat-net",
-        "guaranteedBandwidth": 0,
+        "shared_network_name": "nat-net",
+        "guaranteed_bandwidth": 0,
         "visibility": "private",
-        "sharedNetworkId": "",
+        "shared_network_id": "",
         "translation": "NAT",
         "backend_status": "Provisioning in progress",
         "enacted": "2014-05-21T15:36:03Z"
         "created": "2013-12-09T14:18:02.336Z",
         "deleted": false,
         "description": "A private virtual network",
-        "sharedNetworkName": "",
-        "guaranteedBandwidth": 0,
+        "shared_network_name": "",
+        "guaranteed_bandwidth": 0,
         "visibility": "private",
-        "sharedNetworkId": "",
+        "shared_network_id": "",
         "translation": "none",
         "backend_status": "Provisioning in progress",
         "enacted": "2014-05-21T15:35:54Z"
         "created": "2014-04-03T15:27:49.478Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             18
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 18,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-16T00:08:58.376Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             22
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 22,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-16T20:29:01.337Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 18,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-16T21:45:04.633Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             28
         ],
         "labels": "",
-        "guaranteedBandwidth": 5,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 5,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-16T21:46:06.015Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             28
         ],
         "labels": "",
-        "guaranteedBandwidth": 5,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 5,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-16T21:46:57.274Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             23
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 23,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-17T17:10:47.637Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 10,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 10,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 25,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-17T17:11:39.949Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 10,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 10,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 25,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-18T20:59:41.158Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             23
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 23,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-18T21:01:06.196Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             23
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 23,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-19T00:36:50.618Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 22,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-19T17:33:43.205Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             23
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 23,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-19T23:10:20.430Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-19T23:10:47.331Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             28
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-20T19:13:21.158Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             24
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 24,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-20T19:14:15.821Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             24
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 24,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T14:40:42.926Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             29
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 29,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T14:41:07.483Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             29
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 29,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T19:05:26.043Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 26,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T19:05:53.117Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 26,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T22:15:58.724Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T22:16:12.422Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T22:16:32.313Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-21T22:16:54.315Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 28,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-30T21:06:35.312Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 33,
         "backend_status": "Provisioning in progress",
         "created": "2014-04-30T21:07:08.005Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 33,
         "backend_status": "Provisioning in progress",
         "created": "2014-05-13T00:38:44.910Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 34,
         "backend_status": "Provisioning in progress",
         "created": "2014-05-13T00:39:22.999Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 34,
         "backend_status": "Provisioning in progress",
         "created": "2014-06-03T07:15:01.403Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 32,
         "backend_status": "Provisioning in progress",
         "created": "2014-06-03T07:15:33.377Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 32,
         "backend_status": "Provisioning in progress",
         "created": "2014-06-19T16:02:14.925Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 35,
         "backend_status": "Provisioning in progress",
         "created": "2014-06-19T16:02:19.171Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 35,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:48:20.878Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:50:31.250Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:51:22.976Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:51:25.979Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T20:21:52.074Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 41,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T20:23:03.991Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 41,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-01T23:37:00.625Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-01T23:37:47.334Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-02T16:43:45.571Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-02T17:29:06.716Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 45,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-02T17:29:38.618Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 45,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-04T17:24:54.199Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-13T01:34:52.241Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 49,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-13T01:35:22.598Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 49,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-13T01:36:17.189Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 50,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-13T01:36:57.559Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 50,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-19T21:40:48.549Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 53,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-19T21:41:26.950Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 53,
         "backend_status": "Provisioning in progress",
         "created": "2014-09-24T02:49:33.357Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             39
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 39,
         "backend_status": "Provisioning in progress",
         "created": "2014-09-24T02:50:11.179Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             39
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 39,
         "backend_status": "Provisioning in progress",
         "created": "2014-09-30T19:56:42.970Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 76,
         "backend_status": "Provisioning in progress",
         "created": "2014-09-30T19:57:30.963Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 76,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-07T21:13:51.326Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 78,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-07T21:14:06.175Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 78,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T14:41:03.309Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T14:41:17.387Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T20:36:52.970Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 83,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T20:37:09.898Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 83,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T20:38:16.467Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 84,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T20:38:40.508Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 84,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-09T16:41:54.752Z",
         "deleted": true,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 97,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-09T16:42:09.773Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 97,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-09T18:18:49.879Z",
         "deleted": true,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 98,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-10T14:45:07.885Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 22,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-10T14:45:22.758Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 22,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-15T17:21:17.959Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 97,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-15T23:10:01.250Z",
         "deleted": true,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 99,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-15T23:10:28.442Z",
         "deleted": true,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 99,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-16T06:53:02.247Z",
         "deleted": true,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 99,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-16T06:58:50.156Z",
         "deleted": true,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 100,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-16T07:38:47.629Z",
         "deleted": true,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 101,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-17T17:49:51.499Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 97,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T03:35:41.622Z",
         "deleted": true,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 102,
         "backend_status": "NameError(\"global name 'Exeption' is not defined\",)",
         "created": "2014-10-22T03:36:01.000Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 102,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T03:43:19.845Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 102,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T15:52:02.052Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 104,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T15:52:17.596Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 104,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T17:28:19.354Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 106,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T17:28:37.321Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 106,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T17:57:20.819Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 107,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T17:57:40.327Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 107,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-22T17:59:13.536Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 107,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-27T20:42:00.422Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 108,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-27T20:42:17.975Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 108,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-27T22:32:31.787Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 108,
         "backend_status": "Provisioning in progress",
index e5d6ac5..3abdd86 100644 (file)
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:28.687Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 19
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:34.657Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 20
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:40.604Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 21
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:47.047Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 22
 },
 {
         "backend_status": "Authorization Failed: unsupported operand type(s) for +: 'NoneType' and 'str'",
         "enacted": "2014-08-08T03:49:32.318Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 27
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:03.289Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 28
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:07.804Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 29
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:12.521Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 30
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 31
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 32
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 33
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 34
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 35
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 36
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 37
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 38
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 39
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 40
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 41
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 42
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 43
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 44
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 45
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 46
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 47
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 48
 },
 {
 {
     "fields": {
         "updated": "2014-09-19T21:11:00.746Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "onlab_dnsdemux",
         "service": 10,
         "created": "2014-04-29T20:27:46.565Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-09-19T21:20:35.271Z"
 {
     "fields": {
         "updated": "2014-10-07T06:03:18.962Z",
-        "imagePreference": null,
+        "image_preference": null,
         "name": "onlab_dnsredir",
         "service": 10,
         "created": "2014-04-29T20:31:12.915Z",
         "omf_friendly": false,
         "network": null,
         "max_slivers": 10,
-        "mountDataSets": null,
+        "mount_data_sets": null,
         "backend_status": "Provisioning in progress",
         "creator": 7,
         "enacted": "2014-10-09T18:47:35.832Z"
 {
     "fields": {
         "updated": "2014-10-08T14:41:01.523Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "princeton_syndicate",
         "service": 5,
         "created": "2014-07-24T18:04:58.309Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 100,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 6,
         "enacted": "2014-10-09T18:48:00.386Z"
 {
     "fields": {
         "updated": "2014-09-23T18:29:58.930Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_hpc",
         "service": 12,
         "created": "2014-08-01T21:13:08.385Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-09-23T19:06:55.420Z"
 {
     "fields": {
         "updated": "2014-09-19T21:12:35.800Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_cmi",
         "service": 12,
         "created": "2014-08-19T21:40:01.505Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "",
         "creator": 8,
         "enacted": "2014-09-19T21:20:04.708Z"
 {
     "fields": {
         "updated": "2014-09-30T22:36:46.871Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_cacti",
         "service": null,
         "created": "2014-09-30T19:55:59.681Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 8,
         "enacted": "2014-09-30T22:43:42.489Z"
 {
     "fields": {
         "updated": "2014-10-07T21:13:38.926Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "princeton_tmtest2",
         "service": null,
         "created": "2014-10-07T21:13:38.926Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": null,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-08T20:36:39.879Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "wash_test1",
         "service": null,
         "created": "2014-10-08T20:36:39.879Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": null,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-08T20:38:05.304Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "wash_test2",
         "service": null,
         "created": "2014-10-08T20:38:05.304Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": null,
         "enacted": null
 {
     "fields": {
         "updated": "2014-10-10T02:41:49.594Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "princeton_publicdata",
         "service": 5,
         "created": "2014-10-09T16:41:43.157Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "Provisioning in progress",
         "creator": 6,
         "enacted": "2014-10-10T14:57:41.282Z"
 {
     "fields": {
         "updated": "2014-10-09T18:18:35.616Z",
-        "imagePreference": "Ubuntu 12.04 LTS",
+        "image_preference": "Ubuntu 12.04 LTS",
         "name": "onlab_smbakertest3",
         "service": null,
         "created": "2014-10-09T18:18:35.616Z",
         "omf_friendly": false,
         "network": "Private Only",
         "max_slivers": 10,
-        "mountDataSets": "GenBank",
+        "mount_data_sets": "GenBank",
         "backend_status": "NameError(\"global name 'User' is not defined\",)",
         "creator": 8,
         "enacted": null
         "created": "2013-12-09T14:15:16.899Z",
         "deleted": false,
         "description": "Connect a sliver to the public network using dedicated public IPv4 address",
-        "sharedNetworkName": "ext-net",
-        "guaranteedBandwidth": 0,
+        "shared_network_name": "ext-net",
+        "guaranteed_bandwidth": 0,
         "visibility": "public",
-        "sharedNetworkId": "",
+        "shared_network_id": "",
         "translation": "none",
         "backend_status": "Provisioning in progress",
         "enacted": "2014-05-21T15:36:30Z"
         "created": "2013-12-09T14:17:29.551Z",
         "deleted": false,
         "description": "Connect a sliver to the public network via NAT",
-        "sharedNetworkName": "nat-net",
-        "guaranteedBandwidth": 0,
+        "shared_network_name": "nat-net",
+        "guaranteed_bandwidth": 0,
         "visibility": "private",
-        "sharedNetworkId": "",
+        "shared_network_id": "",
         "translation": "NAT",
         "backend_status": "Provisioning in progress",
         "enacted": "2014-05-21T15:36:03Z"
         "created": "2013-12-09T14:18:02.336Z",
         "deleted": false,
         "description": "A private virtual network",
-        "sharedNetworkName": "",
-        "guaranteedBandwidth": 0,
+        "shared_network_name": "",
+        "guaranteed_bandwidth": 0,
         "visibility": "private",
-        "sharedNetworkId": "",
+        "shared_network_id": "",
         "translation": "none",
         "backend_status": "Provisioning in progress",
         "enacted": "2014-05-21T15:35:54Z"
         "created": "2014-06-03T07:15:01.403Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 32,
         "backend_status": "Provisioning in progress",
         "created": "2014-06-03T07:15:33.377Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 32,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:48:20.878Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:50:31.250Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:51:22.976Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-07-25T03:51:25.979Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [
+        "permitted_slices": [
             40
         ],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-01T23:37:00.625Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-01T23:37:47.334Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-02T16:43:45.571Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-02T17:29:06.716Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 45,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-02T17:29:38.618Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 45,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-04T17:24:54.199Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 31,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-19T21:40:48.549Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 53,
         "backend_status": "Provisioning in progress",
         "created": "2014-08-19T21:41:26.950Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 53,
         "backend_status": "Provisioning in progress",
         "created": "2014-09-30T19:56:42.970Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 76,
         "backend_status": "Provisioning in progress",
         "created": "2014-09-30T19:57:30.963Z",
         "deleted": false,
         "network_id": "",
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": "",
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 3,
         "owner": 76,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T14:41:03.309Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-08T14:41:17.387Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 40,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-09T16:41:54.752Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 1,
         "owner": 97,
         "backend_status": "Provisioning in progress",
         "created": "2014-10-09T16:42:09.773Z",
         "deleted": false,
         "network_id": null,
-        "permittedSlices": [],
+        "permitted_slices": [],
         "labels": null,
-        "guaranteedBandwidth": 0,
-        "permitAllSlices": false,
+        "guaranteed_bandwidth": 0,
+        "permit_all_slices": false,
         "template": 4,
         "owner": 97,
         "backend_status": "Provisioning in progress",
index 400148f..12ee426 100644 (file)
 },
 {
     "pk": 1, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-07T23:52:01.453Z", 
         "created": "2014-05-07T23:52:01.453Z", 
 },
 {
     "pk": 2, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-07T23:52:01.455Z", 
         "created": "2014-05-07T23:52:01.455Z", 
 },
 {
     "pk": 3, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-07T23:52:01.456Z", 
         "created": "2014-05-07T23:52:01.456Z", 
 },
 {
     "pk": 4, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-07T23:52:01.457Z", 
         "created": "2014-05-07T23:52:01.456Z", 
 },
 {
     "pk": 5, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-07T23:52:01.457Z", 
         "created": "2014-05-07T23:52:01.457Z", 
 },
 {
     "pk": 6, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-07T23:52:01.458Z", 
         "created": "2014-05-07T23:52:01.458Z", 
 },
 {
     "pk": 7, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:00:37.305Z", 
         "created": "2014-05-08T00:00:37.305Z", 
 },
 {
     "pk": 8, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:01:18.181Z", 
         "created": "2014-05-08T00:01:18.181Z", 
 },
 {
     "pk": 9, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:01:29.768Z", 
         "created": "2014-05-08T00:01:29.768Z", 
 },
 {
     "pk": 10, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:01:52.173Z", 
         "created": "2014-05-08T00:01:52.173Z", 
 },
 {
     "pk": 11, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:02:03.435Z", 
         "created": "2014-05-08T00:02:03.435Z", 
 },
 {
     "pk": 12, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:02:16.038Z", 
         "created": "2014-05-08T00:02:16.038Z", 
 },
 {
     "pk": 13, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:02:33.626Z", 
         "created": "2014-05-08T00:02:33.626Z", 
 },
 {
     "pk": 14, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:02:46.549Z", 
         "created": "2014-05-08T00:02:46.549Z", 
 },
 {
     "pk": 15, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:03:01.445Z", 
         "created": "2014-05-08T00:03:01.445Z", 
 },
 {
     "pk": 16, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:03:18.238Z", 
         "created": "2014-05-08T00:03:18.238Z", 
 },
 {
     "pk": 17, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:03:32.156Z", 
         "created": "2014-05-08T00:03:32.156Z", 
 },
 {
     "pk": 18, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:03:45.449Z", 
         "created": "2014-05-08T00:03:45.448Z", 
 },
 {
     "pk": 19, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:03:59.510Z", 
         "created": "2014-05-08T00:03:59.510Z", 
 },
 {
     "pk": 20, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:04:12.516Z", 
         "created": "2014-05-08T00:04:12.516Z", 
 },
 {
     "pk": 21, 
-    "model": "core.sitedeployments", 
+    "model": "core.sitedeployment", 
     "fields": {
         "updated": "2014-05-08T00:04:25.576Z", 
         "created": "2014-05-08T00:04:25.576Z", 
     "model": "core.slice", 
     "fields": {
         "updated": "2014-08-27T22:40:05.088Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "HyperCache", 
         "service": 14, 
         "created": "2013-04-03T23:14:11.072Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:12:27.541Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "Syndicate", 
         "service": 5, 
         "created": "2013-04-03T23:14:11.072Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:17:33.686Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "DnsRedir", 
         "service": 4, 
         "created": "2013-12-04T22:48:35.584Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 8, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:18:00.528Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "DnsDemux", 
         "service": 4, 
         "created": "2013-12-04T22:49:23.051Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 8, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:19:56.253Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "Infrastructure", 
         "service": null, 
         "created": "2013-12-09T14:13:15.392Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:15:29.953Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "Stork", 
         "service": 8, 
         "created": "2013-12-13T21:49:59.476Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:16:01.742Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "Owl", 
         "service": 8, 
         "created": "2013-12-13T21:52:15.590Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:15:02.712Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "Hadoop", 
         "service": null, 
         "created": "2013-12-13T21:54:20.895Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:14:27.648Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "test", 
         "service": null, 
         "created": "2013-12-13T21:56:57.299Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-03-23T23:14:00.911Z", 
-        "imagePreference": "Ubuntu 12.04 LTS", 
+        "image_preference": "Ubuntu 12.04 LTS", 
         "name": "test2", 
         "service": null, 
         "created": "2013-12-13T22:00:03.049Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank", 
+        "mount_data_sets": "GenBank", 
         "backend_status": "Provisioning in progress", 
         "creator": 1, 
         "enacted": null
     "model": "core.slice", 
     "fields": {
         "updated": "2014-05-27T14:05:40.950Z", 
-        "imagePreference": "Hadoop 2.4.0", 
+        "image_preference": "Hadoop 2.4.0", 
         "name": "Analytics", 
         "service": null, 
         "created": "2014-05-20T17:54:07.100Z", 
         "omf_friendly": false, 
         "network": "Private Only", 
         "max_slivers": 10, 
-        "mountDataSets": "GenBank-11-2013", 
+        "mount_data_sets": "GenBank-11-2013", 
         "backend_status": "Provisioning in progress", 
         "creator": 8, 
         "enacted": null
         "created": "2013-12-09T14:15:16.899Z", 
         "deleted": false, 
         "description": "Connect a sliver to the public network using dedicated public IPv4 address", 
-        "sharedNetworkName": "ext-net", 
-        "guaranteedBandwidth": 0, 
+        "shared_network_name": "ext-net", 
+        "guaranteed_bandwidth": 0, 
         "visibility": "public", 
-        "sharedNetworkId": "", 
+        "shared_network_id": "", 
         "translation": "none", 
         "backend_status": "Provisioning in progress", 
         "enacted": "2014-05-12T19:24:09Z"
         "created": "2013-12-09T14:17:29.551Z", 
         "deleted": false, 
         "description": "Connect a sliver to the public network via NAT, with port forwarding", 
-        "sharedNetworkName": "nat-net", 
-        "guaranteedBandwidth": 0, 
+        "shared_network_name": "nat-net", 
+        "guaranteed_bandwidth": 0, 
         "visibility": "private", 
-        "sharedNetworkId": "", 
+        "shared_network_id": "", 
         "translation": "NAT", 
         "backend_status": "Provisioning in progress", 
         "enacted": "2014-05-12T19:23:54Z"
         "created": "2013-12-09T14:18:02.336Z", 
         "deleted": false, 
         "description": "A private virtual network", 
-        "sharedNetworkName": "", 
-        "guaranteedBandwidth": 0, 
+        "shared_network_name": "", 
+        "guaranteed_bandwidth": 0, 
         "visibility": "private", 
-        "sharedNetworkId": "", 
+        "shared_network_id": "", 
         "translation": "none", 
         "backend_status": "Provisioning in progress", 
         "enacted": "2014-05-12T19:23:30Z"
         "created": "2013-12-09T14:24:19.970Z", 
         "deleted": false, 
         "network_id": "7cb4291d-f8d3-4797-83b0-8deefd85bdf5", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:31:41.605Z", 
         "deleted": false, 
         "network_id": "810b4cb8-9d8e-4eee-becc-676785a07725", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:33:10.312Z", 
         "deleted": false, 
         "network_id": "4b37f048-11de-4ddd-acaf-2fc5e8716f0e", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:34:55.754Z", 
         "deleted": false, 
         "network_id": "684386d7-1286-4e58-acda-8ff45deac99e", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:36:09.261Z", 
         "deleted": false, 
         "network_id": "fa090174-ec59-4b7a-812b-9206d911fb61", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:37:02.420Z", 
         "deleted": false, 
         "network_id": "017a3914-5eaf-4bcb-8609-6d17ebcdf075", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:38:11.552Z", 
         "deleted": false, 
         "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:39:51.262Z", 
         "deleted": false, 
         "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:41:00.237Z", 
         "deleted": false, 
         "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:42:03.158Z", 
         "deleted": false, 
         "network_id": "ecdbaf66-b659-4d59-b0b7-1bf6d232ccba", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-09T14:42:49.781Z", 
         "deleted": false, 
         "network_id": "ae4d42e8-a97c-440d-9533-4bcbd62dfb00", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "public-net", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-13T21:51:04.425Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": true, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": true, 
         "template": 4, 
         "owner": 11, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-13T21:53:07.783Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": true, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": true, 
         "template": 4, 
         "owner": 12, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-13T21:55:51.703Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": true, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": true, 
         "template": 4, 
         "owner": 13, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-13T21:57:38.995Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 14, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-13T22:00:40.549Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 3, 
         "owner": 15, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:05:09.944Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 4, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:05:50.112Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 10, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:13:17.310Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 4, 
         "owner": 9, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:13:38.194Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 9, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:16:19.797Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 4, 
         "owner": 8, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:16:38.335Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 8, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:24:19.109Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [
+        "permitted_slices": [
             6, 
             8
         ], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 4, 
         "owner": 4, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:24:38.066Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 4, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:26:46.435Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 4, 
         "owner": 6, 
         "backend_status": "Provisioning in progress", 
         "created": "2013-12-18T22:27:12.647Z", 
         "deleted": false, 
         "network_id": "", 
-        "permittedSlices": [], 
+        "permitted_slices": [], 
         "labels": "", 
-        "guaranteedBandwidth": 0, 
-        "permitAllSlices": false, 
+        "guaranteed_bandwidth": 0, 
+        "permit_all_slices": false, 
         "template": 1, 
         "owner": 6, 
         "backend_status": "Provisioning in progress", 
index aef01f1..a7abdbe 100644 (file)
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:28.687Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 19
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:34.657Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 20
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:40.604Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 21
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-06-20T01:53:47.047Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 22
 },
 {
         "backend_status": "Authorization Failed: unsupported operand type(s) for +: 'NoneType' and 'str'",
         "enacted": "2014-08-08T03:49:32.318Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 27
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:03.289Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 28
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:07.804Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 29
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": "2014-08-06T17:46:12.521Z"
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 30
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 31
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 32
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 33
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 34
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 35
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 36
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 37
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 38
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 39
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 40
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 41
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 42
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 43
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 44
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 45
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 46
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 47
 },
 {
         "backend_status": "Provisioning in progress",
         "enacted": null
     },
-    "model": "core.sitedeployments",
+    "model": "core.sitedeployment",
     "pk": 48
 },
 {
index 8e1ec76..d440ded 100644 (file)
@@ -41,7 +41,7 @@ class Migration(migrations.Migration):
                 ('enacted', models.DateTimeField(default=None, null=True)),
                 ('backend_status', models.CharField(default=b'Provisioning in progress', max_length=140)),
                 ('deleted', models.BooleanField(default=False)),
-                ('timezone', 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'Canada/Pacific', b'(GMT-0800) Canada/Pacific'), (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'Canada/Mountain', b'(GMT-0700) Canada/Mountain'), (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'Canada/Central', b'(GMT-0600) Canada/Central'), (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/Montreal', b'(GMT-0500) America/Montreal'), (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'Canada/Eastern', b'(GMT-0500) Canada/Eastern'), (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'Canada/Atlantic', b'(GMT-0400) Canada/Atlantic'), (b'America/St_Johns', b'(GMT-0330) America/St_Johns'), (b'Canada/Newfoundland', b'(GMT-0330) Canada/Newfoundland'), (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')])),
+                ('timezone', 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'Canada/Pacific', b'(GMT-0800) Canada/Pacific'), (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/Shiprock', b'(GMT-0700) America/Shiprock'), (b'America/Yellowknife', b'(GMT-0700) America/Yellowknife'), (b'Canada/Mountain', b'(GMT-0700) Canada/Mountain'), (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'Canada/Central', b'(GMT-0600) Canada/Central'), (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/Grand_Turk', b'(GMT-0500) America/Grand_Turk'), (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/Montreal', b'(GMT-0500) America/Montreal'), (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'Canada/Eastern', b'(GMT-0500) Canada/Eastern'), (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/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'Canada/Atlantic', b'(GMT-0400) Canada/Atlantic'), (b'America/St_Johns', b'(GMT-0330) America/St_Johns'), (b'Canada/Newfoundland', b'(GMT-0330) Canada/Newfoundland'), (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'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/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/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/Kaliningrad', b'(GMT+0300) Europe/Kaliningrad'), (b'Europe/Minsk', b'(GMT+0300) Europe/Minsk'), (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/Moscow', b'(GMT+0400) Europe/Moscow'), (b'Europe/Samara', b'(GMT+0400) Europe/Samara'), (b'Europe/Simferopol', b'(GMT+0400) Europe/Simferopol'), (b'Europe/Volgograd', b'(GMT+0400) Europe/Volgograd'), (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'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/Qyzylorda', b'(GMT+0600) Asia/Qyzylorda'), (b'Asia/Thimphu', b'(GMT+0600) Asia/Thimphu'), (b'Asia/Yekaterinburg', b'(GMT+0600) Asia/Yekaterinburg'), (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/Novokuznetsk', b'(GMT+0700) Asia/Novokuznetsk'), (b'Asia/Novosibirsk', b'(GMT+0700) Asia/Novosibirsk'), (b'Asia/Omsk', b'(GMT+0700) Asia/Omsk'), (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/Choibalsan', b'(GMT+0800) Asia/Choibalsan'), (b'Asia/Chongqing', b'(GMT+0800) Asia/Chongqing'), (b'Asia/Harbin', b'(GMT+0800) Asia/Harbin'), (b'Asia/Hong_Kong', b'(GMT+0800) Asia/Hong_Kong'), (b'Asia/Kashgar', b'(GMT+0800) Asia/Kashgar'), (b'Asia/Krasnoyarsk', b'(GMT+0800) Asia/Krasnoyarsk'), (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'Asia/Urumqi', b'(GMT+0800) Asia/Urumqi'), (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/Irkutsk', b'(GMT+0900) Asia/Irkutsk'), (b'Asia/Jayapura', b'(GMT+0900) Asia/Jayapura'), (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'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/Yakutsk', b'(GMT+1000) Asia/Yakutsk'), (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/Sakhalin', b'(GMT+1100) Asia/Sakhalin'), (b'Asia/Vladivostok', b'(GMT+1100) Asia/Vladivostok'), (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'Asia/Magadan', b'(GMT+1200) Asia/Magadan'), (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'Antarctica/South_Pole', b'(GMT+1300) Antarctica/South_Pole'), (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')])),
             ],
             options={
             },
@@ -159,7 +159,7 @@ class Migration(migrations.Migration):
             bases=(models.Model,),
         ),
         migrations.CreateModel(
-            name='ControllerNetworks',
+            name='ControllerNetwork',
             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)),
@@ -211,7 +211,24 @@ class Migration(migrations.Migration):
             bases=(models.Model,),
         ),
         migrations.CreateModel(
-            name='ControllerSlices',
+            name='ControllerSite',
+            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, blank=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, db_index=True, blank=True)),
+                ('controller', models.ForeignKey(related_name=b'controllersite', blank=True, to='core.Controller', null=True)),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='ControllerSlice',
             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)),
@@ -220,7 +237,7 @@ class Migration(migrations.Migration):
                 ('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)),
-                ('controller', models.ForeignKey(related_name=b'controllerslices', to='core.Controller')),
+                ('controller', models.ForeignKey(related_name=b'controllerslice', to='core.Controller')),
             ],
             options={
                 'abstract': False,
@@ -228,7 +245,7 @@ class Migration(migrations.Migration):
             bases=(models.Model,),
         ),
         migrations.CreateModel(
-            name='ControllerUsers',
+            name='ControllerUser',
             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)),
@@ -399,11 +416,11 @@ class Migration(migrations.Migration):
                 ('subnet', models.CharField(max_length=32, blank=True)),
                 ('ports', models.CharField(blank=True, max_length=1024, null=True, validators=[core.models.network.ValidateNatList])),
                 ('labels', models.CharField(max_length=1024, null=True, blank=True)),
-                ('guaranteedBandwidth', models.IntegerField(default=0)),
-                ('permitAllSlices', models.BooleanField(default=False)),
-                ('topologyParameters', models.TextField(null=True, blank=True)),
-                ('controllerUrl', models.CharField(max_length=1024, null=True, blank=True)),
-                ('controllerParameters', models.TextField(null=True, blank=True)),
+                ('guaranteed_bandwidth', models.IntegerField(default=0)),
+                ('permit_all_slices', models.BooleanField(default=False)),
+                ('topology_parameters', models.TextField(null=True, blank=True)),
+                ('controller_url', models.CharField(max_length=1024, null=True, blank=True)),
+                ('controller_parameters', models.TextField(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)),
@@ -493,13 +510,13 @@ class Migration(migrations.Migration):
                 ('deleted', models.BooleanField(default=False)),
                 ('name', models.CharField(max_length=32)),
                 ('description', models.CharField(max_length=1024, null=True, blank=True)),
-                ('guaranteedBandwidth', models.IntegerField(default=0)),
+                ('guaranteed_bandwidth', models.IntegerField(default=0)),
                 ('visibility', models.CharField(default=b'private', max_length=30, choices=[(b'public', b'public'), (b'private', b'private')])),
                 ('translation', models.CharField(default=b'none', max_length=30, choices=[(b'none', b'none'), (b'NAT', b'NAT')])),
-                ('sharedNetworkName', models.CharField(max_length=30, null=True, blank=True)),
-                ('sharedNetworkId', models.CharField(help_text=b'Quantum network', max_length=256, null=True, blank=True)),
-                ('topologyKind', models.CharField(default=b'BigSwitch', max_length=30, choices=[(b'bigswitch', b'BigSwitch'), (b'physical', b'Physical'), (b'custom', b'Custom')])),
-                ('controllerKind', models.CharField(default=None, max_length=30, null=True, blank=True, choices=[(None, b'None'), (b'onos', b'ONOS'), (b'custom', b'Custom')])),
+                ('shared_network_name', models.CharField(max_length=30, null=True, blank=True)),
+                ('shared_network_id', models.CharField(help_text=b'Quantum network', max_length=256, null=True, blank=True)),
+                ('topology_kind', models.CharField(default=b'BigSwitch', max_length=30, choices=[(b'bigswitch', b'BigSwitch'), (b'physical', b'Physical'), (b'custom', b'Custom')])),
+                ('controller_kind', models.CharField(default=None, max_length=30, null=True, blank=True, choices=[(None, b'None'), (b'onos', b'ONOS'), (b'custom', b'Custom')])),
             ],
             options={
                 'abstract': False,
@@ -804,7 +821,7 @@ class Migration(migrations.Migration):
             bases=(models.Model,),
         ),
         migrations.CreateModel(
-            name='SiteDeployments',
+            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)),
@@ -812,11 +829,10 @@ class Migration(migrations.Migration):
                 ('enacted', models.DateTimeField(default=None, null=True, blank=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)),
                 ('availability_zone', models.CharField(help_text=b'OpenStack availability zone', max_length=200, null=True, blank=True)),
-                ('controller', models.ForeignKey(related_name=b'sitedeployments', blank=True, to='core.Controller', null=True)),
-                ('deployment', models.ForeignKey(related_name=b'sitedeployments', to='core.Deployment')),
-                ('site', models.ForeignKey(related_name=b'sitedeployments', to='core.Site')),
+                ('controller', models.ForeignKey(related_name=b'sitedeployment', blank=True, to='core.Controller', null=True)),
+                ('deployment', models.ForeignKey(related_name=b'sitedeployment', to='core.Deployment')),
+                ('site', models.ForeignKey(related_name=b'sitedeployment', to='core.Site')),
             ],
             options={
                 'abstract': False,
@@ -869,9 +885,9 @@ class Migration(migrations.Migration):
                 ('description', models.TextField(help_text=b'High level description of the slice and expected activities', max_length=1024, blank=True)),
                 ('slice_url', models.URLField(max_length=512, blank=True)),
                 ('max_slivers', models.IntegerField(default=10)),
-                ('imagePreference', models.CharField(default=b'Ubuntu 12.04 LTS', max_length=256, null=True, blank=True)),
                 ('network', models.CharField(default=b'Private Only', max_length=256, null=True, blank=True)),
-                ('mountDataSets', models.CharField(default=b'GenBank', max_length=256, null=True, blank=True)),
+                ('image_preference', models.CharField(default=b'Ubuntu 12.04 LTS', max_length=256, null=True, blank=True)),
+                ('mount_data_sets', models.CharField(default=b'GenBank', max_length=256, null=True, blank=True)),
                 ('creator', models.ForeignKey(related_name=b'slices', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
                 ('service', models.ForeignKey(related_name=b'service', blank=True, to='core.Service', null=True)),
                 ('serviceClass', models.ForeignKey(related_name=b'slices', default=core.models.serviceclass.get_default_serviceclass, to='core.ServiceClass', null=True)),
@@ -1089,7 +1105,7 @@ class Migration(migrations.Migration):
         migrations.AddField(
             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.SiteDeployments', to='core.Deployment', blank=True),
+            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='core.Deployment', blank=True),
             preserve_default=True,
         ),
         migrations.AddField(
@@ -1137,7 +1153,7 @@ class Migration(migrations.Migration):
         migrations.AddField(
             model_name='node',
             name='site_deployment',
-            field=models.ForeignKey(related_name=b'nodes', to='core.SiteDeployments'),
+            field=models.ForeignKey(related_name=b'nodes', to='core.SiteDeployment'),
             preserve_default=True,
         ),
         migrations.AddField(
@@ -1166,7 +1182,7 @@ class Migration(migrations.Migration):
         ),
         migrations.AddField(
             model_name='network',
-            name='permittedSlices',
+            name='permitted_slices',
             field=models.ManyToManyField(related_name=b'availableNetworks', to='core.Slice', blank=True),
             preserve_default=True,
         ),
@@ -1207,15 +1223,15 @@ class Migration(migrations.Migration):
             preserve_default=True,
         ),
         migrations.AddField(
-            model_name='controllerslices',
+            model_name='controllerslice',
             name='slice',
-            field=models.ForeignKey(related_name=b'controllerslices', to='core.Slice'),
+            field=models.ForeignKey(related_name=b'controllerslice', to='core.Slice'),
             preserve_default=True,
         ),
         migrations.AddField(
-            model_name='controllersitedeployments',
-            name='site_deployment',
-            field=models.ForeignKey(related_name=b'controllersitedeployments', to='core.SiteDeployments'),
+            model_name='controllersite',
+            name='site',
+            field=models.ForeignKey(related_name=b'controllersite', to='core.Site'),
             preserve_default=True,
         ),
         migrations.AddField(
@@ -1231,7 +1247,7 @@ class Migration(migrations.Migration):
             preserve_default=True,
         ),
         migrations.AddField(
-            model_name='controllernetworks',
+            model_name='controllernetwork',
             name='network',
             field=models.ForeignKey(related_name=b'controllernetworks', to='core.Network'),
             preserve_default=True,
diff --git a/planetstack/core/migrations/0002_network_field_case.py b/planetstack/core/migrations/0002_network_field_case.py
deleted file mode 100644 (file)
index aa94338..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import models, migrations
-import timezones.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='networktemplate',
-            old_name='controllerKind',
-            new_name='controller_kind',
-        ),
-        migrations.RenameField(
-            model_name='networktemplate',
-            old_name='guaranteedBandwidth',
-            new_name='guaranteed_bandwidth',
-        ),
-        migrations.RenameField(
-            model_name='networktemplate',
-            old_name='sharedNetworkId',
-            new_name='shared_network_id',
-        ),
-        migrations.RenameField(
-            model_name='networktemplate',
-            old_name='sharedNetworkName',
-            new_name='shared_network_name',
-        ),
-        migrations.RenameField(
-            model_name='networktemplate',
-            old_name='topologyKind',
-            new_name='topology_kind',
-        ),
-    ]
diff --git a/planetstack/core/migrations/0003_network_field_case.py b/planetstack/core/migrations/0003_network_field_case.py
deleted file mode 100644 (file)
index d063363..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import models, migrations
-import timezones.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0002_network_field_case'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='network',
-            old_name='controllerParameters',
-            new_name='controller_parameters',
-        ),
-        migrations.RenameField(
-            model_name='network',
-            old_name='controllerUrl',
-            new_name='controller_url',
-        ),
-        migrations.RenameField(
-            model_name='network',
-            old_name='guaranteedBandwidth',
-            new_name='guaranteed_bandwidth',
-        ),
-        migrations.RenameField(
-            model_name='network',
-            old_name='permitAllSlices',
-            new_name='permit_all_slices',
-        ),
-        migrations.RenameField(
-            model_name='network',
-            old_name='permittedSlices',
-            new_name='permitted_slices',
-        ),
-        migrations.RenameField(
-            model_name='network',
-            old_name='topologyParameters',
-            new_name='topology_parameters',
-        ),
-    ]
diff --git a/planetstack/core/migrations/0004_slice_field_case.py b/planetstack/core/migrations/0004_slice_field_case.py
deleted file mode 100644 (file)
index 0b911b3..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import models, migrations
-import timezones.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0003_network_field_case'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='slice',
-            old_name='imagePreference',
-            new_name='image_preference',
-        ),
-        migrations.RenameField(
-            model_name='slice',
-            old_name='mountDataSets',
-            new_name='mount_data_sets',
-        ),
-    ]
index 3a63602..79c6611 100644 (file)
@@ -5,13 +5,13 @@ from .service import Service
 from .service import ServiceAttribute
 from .tag import Tag
 from .role import Role
-from .site import Site, Deployment, DeploymentRole, DeploymentPrivilege, Controller, ControllerRole, ControllerPrivilege, SiteDeployments
+from .site import Site, Deployment, DeploymentRole, DeploymentPrivilege, Controller, ControllerRole, ControllerPrivilege, ControllerSite, SiteDeployment
 from .dashboard import DashboardView, ControllerDashboardView
 from .user import User, UserDashboardView
 from .serviceclass import ServiceClass
 from .site import ControllerManager, ControllerDeletionManager, ControllerLinkManager,ControllerLinkDeletionManager
-from .slice import Slice, ControllerSlices
-from .controllerusers import ControllerUsers
+from .slice import Slice, ControllerSlice
+from .controlleruser import ControllerUser
 from .image import Image, ImageDeployments, ControllerImages
 from .node import Node
 from .serviceresource import ServiceResource
@@ -26,6 +26,6 @@ from .flavor import Flavor
 from .sliver import Sliver
 from .reservation import ReservedResource
 from .reservation import Reservation
-from .network import Network, NetworkParameterType, NetworkParameter, NetworkSliver, NetworkTemplate, Router, NetworkSlice, ControllerNetworks
+from .network import Network, NetworkParameterType, NetworkParameter, NetworkSliver, NetworkTemplate, Router, NetworkSlice, ControllerNetwork
 from .billing import Account, Invoice, Charge, UsableObject, Payment
 
similarity index 85%
rename from planetstack/core/models/controllerusers.py
rename to planetstack/core/models/controlleruser.py
index 5a3568a..d0fda11 100644 (file)
@@ -6,7 +6,7 @@ from django.db.models import F, Q
 from core.models import PlCoreBase,User,Controller
 from core.models import Controller,ControllerLinkManager,ControllerLinkDeletionManager
 
-class ControllerUsers(PlCoreBase):
+class ControllerUser(PlCoreBase):
     objects = ControllerLinkManager()
     deleted_objects = ControllerLinkDeletionManager()
 
@@ -19,8 +19,8 @@ class ControllerUsers(PlCoreBase):
     @staticmethod
     def select_by_user(user):
         if user.is_admin:
-            qs = ControllerUsers.objects.all()
+            qs = ControllerUser.objects.all()
         else:
             users = Users.select_by_user(user)
-            qs = ControllerUsers.objects.filter(user__in=users)
+            qs = ControllerUser.objects.filter(user__in=users)
         return qs
index 554bbf5..cfaffc3 100644 (file)
@@ -143,7 +143,7 @@ class Network(PlCoreBase):
             qs = Network.objects.filter(owner__in=slices)
         return qs
 
-class ControllerNetworks(PlCoreBase):
+class ControllerNetwork(PlCoreBase):
     objects = ControllerLinkManager()
     deleted_objects = ControllerLinkDeletionManager()
 
index 2ff503e..0884ec1 100644 (file)
@@ -1,7 +1,7 @@
 import os
 from django.db import models
 from core.models import PlCoreBase
-from core.models import SiteDeployments
+from core.models import SiteDeployment
 from core.models import Tag
 from django.contrib.contenttypes import generic
 
@@ -9,7 +9,7 @@ from django.contrib.contenttypes import generic
 
 class Node(PlCoreBase):
     name = models.CharField(max_length=200, unique=True, help_text="Name of the Node")
-    site_deployment = models.ForeignKey(SiteDeployments, related_name='nodes')
+    site_deployment = models.ForeignKey(SiteDeployment, related_name='nodes')
     tags = generic.GenericRelation(Tag)
 
     def __unicode__(self):  return u'%s' % (self.name)
index 69863eb..6b1f3df 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)
@@ -308,14 +308,19 @@ class Controller(PlCoreBase):
 
     def __unicode__(self):  return u'%s %s %s' % (self.name, self.backend_type, self.version)
 
-class SiteDeployments(PlCoreBase):
+class SiteDeployment(PlCoreBase):
     objects = ControllerLinkManager()
     deleted_objects = ControllerLinkDeletionManager()
 
-    site = models.ForeignKey(Site,related_name='sitedeployments')
-    deployment = models.ForeignKey(Deployment,related_name='sitedeployments')
-    controller = models.ForeignKey(Controller, null=True, blank=True, related_name='sitedeployments')
+    site = models.ForeignKey(Site,related_name='sitedeployment')
+    deployment = models.ForeignKey(Deployment,related_name='sitedeployment')
+    controller = models.ForeignKey(Controller, null=True, blank=True, related_name='sitedeployment')
     availability_zone = models.CharField(max_length=200, null=True, blank=True, help_text="OpenStack availability zone")
-    tenant_id = models.CharField(null=True, blank=True, max_length=200, db_index=True, help_text="Keystone tenant id")
 
     def __unicode__(self):  return u'%s %s' % (self.deployment, self.site)
+    
+class ControllerSite(PlCoreBase):
+     
+    site = models.ForeignKey(Site,related_name='controllersite')
+    controller = models.ForeignKey(Controller, null=True, blank=True, related_name='controllersite')
+    tenant_id = models.CharField(null=True, blank=True, max_length=200, db_index=True, help_text="Keystone tenant id")
index 52a5dd6..e182388 100644 (file)
@@ -94,7 +94,7 @@ class Slice(PlCoreBase):
         nets = Network.objects.filter(slices=self)
         nets.delete() 
         # delete slice controllers
-        slice_controllers = ControllerSlices.objects.filter(slice=self)
+        slice_controllers = ControllerSlice.objects.filter(slice=self)
         slice_controllers.delete()
         # delete slice privilege
         slice_privileges = SlicePrivilege.objects.filter(slice=self)
@@ -129,7 +129,7 @@ class SlicePrivilege(PlCoreBase):
             qs = SlicePrivilege.objects.filter(id__in=sp_ids)
         return qs
 
-class ControllerSlices(PlCoreBase):
+class ControllerSlice(PlCoreBase):
     objects = ControllerLinkManager()
     deleted_objects = ControllerLinkDeletionManager()
 
@@ -142,10 +142,10 @@ class ControllerSlices(PlCoreBase):
     @staticmethod
     def select_by_user(user):
         if user.is_admin:
-            qs = ControllerSlices.objects.all()
+            qs = ControllerSlice.objects.all()
         else:
             slices = Slice.select_by_user(user)
-            qs = ControllerSlices.objects.filter(slice__in=slices)
+            qs = ControllerSlice.objects.filter(slice__in=slices)
         return qs    
 
     def get_cpu_stats(self):
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 952dfb4..28fd72b 100644 (file)
@@ -500,7 +500,7 @@ if (! window.XOSLIB_LOADED ) {
                             });
 
         define_model(this, {urlRoot: SITEDEPLOYMENT_API,
-                            relatedCollections: {"controllerSiteDeployments": "site_deployment"},
+                            relatedCollections: {"controllerSiteDeployment": "site_deployment"},
                             foreignCollections: ["sites", "deployments", "controllers"],
                             foreignFields: {"site": "sites", "deployment": "deployments", "controller": "controllers"},
                             modelName: "siteDeployment",
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index bc75b0c..e8d9e9a
@@ -68,6 +68,7 @@ def __walk_deps(fn, object, deps):
                        except AttributeError:
                                if not missing_links.has_key(model+'.'+link):
                                        print "Model %s missing link for dependency %s"%(model, link)
+                                        logger.log_exc("Model %s missing link for dependency %s"%(model, link))
                                        missing_links[model+'.'+link]=True
 
                if (peer):
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index b8ca6a1..88a4008 100644 (file)
@@ -1,14 +1,14 @@
-from core.models import Site, SiteDeployments
+from core.models import Site, SiteDeployment
 from observer.deleter import Deleter
-from observer.deleters.site_deployment_deleter import SiteDeploymentsDeleter
+from observer.deleters.site_deployment_deleter import SiteDeploymentDeleter
 
 class SiteDeleter(Deleter):
     model='Site'
     
     def call(self, pk):
         site = Site.objects.get(pk=pk)
-        site_deployments = SiteDeployments.objects.filter(site=site)
-        site_deployment_deleter = SiteDeploymentsDeleter()
+        site_deployments = SiteDeployment.objects.filter(site=site)
+        site_deployment_deleter = SiteDeploymentDeleter()
         for site_deployment in site_deployments:
             site_deployment_deleter(site_deployment.id)
         site.delete() 
index cc71d43..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 SiteDeploymentsDeleter(Deleter):
-    model='SiteDeployments'
+class SiteDeploymentDeleter(Deleter):
+    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)
old mode 100755 (executable)
new mode 100644 (file)
index 1f15a8e..1319fec 100644 (file)
@@ -49,7 +49,7 @@ def invert_graph(g):
        return ig
 
 class PlanetStackObserver:
-       #sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivileges,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps,SyncExternalRoutes,SyncUsers,SyncRoles,SyncNodes,SyncImages,GarbageCollector]
+       #sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivilege,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps,SyncExternalRoutes,SyncUsers,SyncRoles,SyncNodes,SyncImages,GarbageCollector]
        sync_steps = []
 
        
old mode 100755 (executable)
new mode 100644 (file)
index e56c4b1..ed44fdb 100644 (file)
@@ -2,7 +2,7 @@
 #from .sync_network_slivers import SyncNetworkSlivers
 #from .sync_networks import SyncNetworks
 #from .sync_network_deployments import SyncNetworkDeployments
-#from .sync_site_privileges import SyncSitePrivileges
+#from .sync_site_privileges import SyncSitePrivilege
 #from .sync_slice_memberships import SyncSliceMemberships
 #from .sync_slices import SyncSlices
 #from .sync_sliver_ips import SyncSliverIps
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 00a5c94..c7b189b 100644 (file)
@@ -89,8 +89,8 @@ def get_REST_patterns():
         url(r'plstackapi/serviceclasses/$', ServiceClassList.as_view(), name='serviceclass-list'),
         url(r'plstackapi/serviceclasses/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceClassDetail.as_view(), name ='serviceclass-detail'),
     
-        url(r'plstackapi/controllernetworks/$', ControllerNetworksList.as_view(), name='controllernetworks-list'),
-        url(r'plstackapi/controllernetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerNetworksDetail.as_view(), name ='controllernetworks-detail'),
+        url(r'plstackapi/controllernetworks/$', ControllerNetworkList.as_view(), name='controllernetworks-list'),
+        url(r'plstackapi/controllernetworks/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerNetworkDetail.as_view(), name ='controllernetworks-detail'),
     
         url(r'plstackapi/charges/$', ChargeList.as_view(), name='charge-list'),
         url(r'plstackapi/charges/(?P<pk>[a-zA-Z0-9\-]+)/$', ChargeDetail.as_view(), name ='charge-detail'),
@@ -170,8 +170,8 @@ def get_REST_patterns():
         url(r'plstackapi/deploymentprivileges/$', DeploymentPrivilegeList.as_view(), name='deploymentprivilege-list'),
         url(r'plstackapi/deploymentprivileges/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentPrivilegeDetail.as_view(), name ='deploymentprivilege-detail'),
     
-        url(r'plstackapi/controllerusers/$', ControllerUsersList.as_view(), name='controllerusers-list'),
-        url(r'plstackapi/controllerusers/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerUsersDetail.as_view(), name ='controllerusers-detail'),
+        url(r'plstackapi/controllerusers/$', ControllerUserList.as_view(), name='controllerusers-list'),
+        url(r'plstackapi/controllerusers/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerUserDetail.as_view(), name ='controllerusers-detail'),
     
         url(r'plstackapi/deploymentroles/$', DeploymentRoleList.as_view(), name='deploymentrole-list'),
         url(r'plstackapi/deploymentroles/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentRoleDetail.as_view(), name ='deploymentrole-detail'),
@@ -179,8 +179,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'),
@@ -194,8 +194,8 @@ def get_REST_patterns():
         url(r'plstackapi/serviceresources/$', ServiceResourceList.as_view(), name='serviceresource-list'),
         url(r'plstackapi/serviceresources/(?P<pk>[a-zA-Z0-9\-]+)/$', ServiceResourceDetail.as_view(), name ='serviceresource-detail'),
     
-        url(r'plstackapi/controllerslices/$', ControllerSlicesList.as_view(), name='controllerslices-list'),
-        url(r'plstackapi/controllerslices/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerSlicesDetail.as_view(), name ='controllerslices-detail'),
+        url(r'plstackapi/controllerslices/$', ControllerSliceList.as_view(), name='controllerslices-list'),
+        url(r'plstackapi/controllerslices/(?P<pk>[a-zA-Z0-9\-]+)/$', ControllerSliceDetail.as_view(), name ='controllerslices-detail'),
     
     )
 
@@ -1026,7 +1026,7 @@ class ServiceClassIdSerializer(XOSModelSerializer):
 
 
 
-class ControllerNetworksSerializer(serializers.HyperlinkedModelSerializer):
+class ControllerNetworkSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -1039,10 +1039,10 @@ class ControllerNetworksSerializer(serializers.HyperlinkedModelSerializer):
         except:
             return None
     class Meta:
-        model = ControllerNetworks
+        model = ControllerNetwork
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','network','controller','net_id','router_id','subnet_id','subnet',)
 
-class ControllerNetworksIdSerializer(XOSModelSerializer):
+class ControllerNetworkIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -1055,7 +1055,7 @@ class ControllerNetworksIdSerializer(XOSModelSerializer):
         except:
             return None\r
     class Meta:\r
-        model = ControllerNetworks
+        model = ControllerNetwork
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','network','controller','net_id','router_id','subnet_id','subnet',)
 
 
@@ -2016,7 +2016,7 @@ class DeploymentPrivilegeIdSerializer(XOSModelSerializer):
 
 
 
-class ControllerUsersSerializer(serializers.HyperlinkedModelSerializer):
+class ControllerUserSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2029,10 +2029,10 @@ class ControllerUsersSerializer(serializers.HyperlinkedModelSerializer):
         except:
             return None
     class Meta:
-        model = ControllerUsers
+        model = ControllerUser
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','user','controller','kuser_id',)
 
-class ControllerUsersIdSerializer(XOSModelSerializer):
+class ControllerUserIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2045,7 +2045,7 @@ class ControllerUsersIdSerializer(XOSModelSerializer):
         except:
             return None\r
     class Meta:\r
-        model = ControllerUsers
+        model = ControllerUser
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','user','controller','kuser_id',)
 
 
@@ -2121,7 +2121,7 @@ class UserCredentialIdSerializer(XOSModelSerializer):
 
 
 
-class SiteDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
+class SiteDeploymentSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2134,10 +2134,10 @@ class SiteDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
         except:
             return None
     class Meta:
-        model = SiteDeployments
+        model = SiteDeployment
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','site','deployment','controller','availability_zone',)
 
-class SiteDeploymentsIdSerializer(XOSModelSerializer):
+class SiteDeploymentIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2150,7 +2150,7 @@ class SiteDeploymentsIdSerializer(XOSModelSerializer):
         except:
             return None\r
     class Meta:\r
-        model = SiteDeployments
+        model = SiteDeployment
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','site','deployment','controller','availability_zone',)
 
 
@@ -2312,7 +2312,7 @@ class ServiceResourceIdSerializer(XOSModelSerializer):
 
 
 
-class ControllerSlicesSerializer(serializers.HyperlinkedModelSerializer):
+class ControllerSliceSerializer(serializers.HyperlinkedModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2325,10 +2325,10 @@ class ControllerSlicesSerializer(serializers.HyperlinkedModelSerializer):
         except:
             return None
     class Meta:
-        model = ControllerSlices
+        model = ControllerSlice
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','controller','slice','tenant_id',)
 
-class ControllerSlicesIdSerializer(XOSModelSerializer):
+class ControllerSliceIdSerializer(XOSModelSerializer):
     id = IdField()
     
     humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2341,7 +2341,7 @@ class ControllerSlicesIdSerializer(XOSModelSerializer):
         except:
             return None\r
     class Meta:\r
-        model = ControllerSlices
+        model = ControllerSlice
         fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','controller','slice','tenant_id',)
 
 
@@ -2385,7 +2385,7 @@ serializerLookUp = {
 
                  ServiceClass: ServiceClassSerializer,
 
-                 ControllerNetworks: ControllerNetworksSerializer,
+                 ControllerNetwork: ControllerNetworkSerializer,
 
                  Charge: ChargeSerializer,
 
@@ -2439,13 +2439,13 @@ serializerLookUp = {
 
                  DeploymentPrivilege: DeploymentPrivilegeSerializer,
 
-                 ControllerUsers: ControllerUsersSerializer,
+                 ControllerUser: ControllerUserSerializer,
 
                  DeploymentRole: DeploymentRoleSerializer,
 
                  UserCredential: UserCredentialSerializer,
 
-                 SiteDeployments: SiteDeploymentsSerializer,
+                 SiteDeployment: SiteDeploymentSerializer,
 
                  SliceTag: SliceTagSerializer,
 
@@ -2455,7 +2455,7 @@ serializerLookUp = {
 
                  ServiceResource: ServiceResourceSerializer,
 
-                 ControllerSlices: ControllerSlicesSerializer,
+                 ControllerSlice: ControllerSliceSerializer,
 
                  None: None,
                 }
@@ -3574,10 +3574,10 @@ class ServiceClassDetail(PlanetStackRetrieveUpdateDestroyAPIView):
 
 
 
-class ControllerNetworksList(generics.ListCreateAPIView):
-    queryset = ControllerNetworks.objects.select_related().all()
-    serializer_class = ControllerNetworksSerializer
-    id_serializer_class = ControllerNetworksIdSerializer
+class ControllerNetworkList(generics.ListCreateAPIView):
+    queryset = ControllerNetwork.objects.select_related().all()
+    serializer_class = ControllerNetworkSerializer
+    id_serializer_class = ControllerNetworkIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
     filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','controller','net_id','router_id','subnet_id','subnet',)
 
@@ -3589,7 +3589,7 @@ class ControllerNetworksList(generics.ListCreateAPIView):
             return self.serializer_class
 
     def get_queryset(self):
-        return ControllerNetworks.select_by_user(self.request.user)
+        return ControllerNetwork.select_by_user(self.request.user)
 
     def create(self, request, *args, **kwargs):
         serializer = self.get_serializer(data=request.DATA, files=request.FILES)
@@ -3601,21 +3601,21 @@ class ControllerNetworksList(generics.ListCreateAPIView):
         obj = serializer.object
         obj.caller = request.user
         if obj.can_update(request.user):
-            return super(ControllerNetworksList, self).create(request, *args, **kwargs)
+            return super(ControllerNetworkList, self).create(request, *args, **kwargs)
         else:
             raise Exception("failed obj.can_update")
 
-        ret = super(ControllerNetworksList, self).create(request, *args, **kwargs)
+        ret = super(ControllerNetworkList, self).create(request, *args, **kwargs)
         if (ret.status_code%100 != 200):
             raise Exception(ret.data)
 
         return ret
 
 
-class ControllerNetworksDetail(PlanetStackRetrieveUpdateDestroyAPIView):
-    queryset = ControllerNetworks.objects.select_related().all()
-    serializer_class = ControllerNetworksSerializer
-    id_serializer_class = ControllerNetworksIdSerializer
+class ControllerNetworkDetail(PlanetStackRetrieveUpdateDestroyAPIView):
+    queryset = ControllerNetwork.objects.select_related().all()
+    serializer_class = ControllerNetworkSerializer
+    id_serializer_class = ControllerNetworkIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -3625,7 +3625,7 @@ class ControllerNetworksDetail(PlanetStackRetrieveUpdateDestroyAPIView):
             return self.serializer_class
     
     def get_queryset(self):
-        return ControllerNetworks.select_by_user(self.request.user)
+        return ControllerNetwork.select_by_user(self.request.user)
 
     # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView
 
@@ -5166,10 +5166,10 @@ class DeploymentPrivilegeDetail(PlanetStackRetrieveUpdateDestroyAPIView):
 
 
 
-class ControllerUsersList(generics.ListCreateAPIView):
-    queryset = ControllerUsers.objects.select_related().all()
-    serializer_class = ControllerUsersSerializer
-    id_serializer_class = ControllerUsersIdSerializer
+class ControllerUserList(generics.ListCreateAPIView):
+    queryset = ControllerUser.objects.select_related().all()
+    serializer_class = ControllerUserSerializer
+    id_serializer_class = ControllerUserIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
     filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','controller','kuser_id',)
 
@@ -5181,7 +5181,7 @@ class ControllerUsersList(generics.ListCreateAPIView):
             return self.serializer_class
 
     def get_queryset(self):
-        return ControllerUsers.select_by_user(self.request.user)
+        return ControllerUser.select_by_user(self.request.user)
 
     def create(self, request, *args, **kwargs):
         serializer = self.get_serializer(data=request.DATA, files=request.FILES)
@@ -5193,21 +5193,21 @@ class ControllerUsersList(generics.ListCreateAPIView):
         obj = serializer.object
         obj.caller = request.user
         if obj.can_update(request.user):
-            return super(ControllerUsersList, self).create(request, *args, **kwargs)
+            return super(ControllerUserList, self).create(request, *args, **kwargs)
         else:
             raise Exception("failed obj.can_update")
 
-        ret = super(ControllerUsersList, self).create(request, *args, **kwargs)
+        ret = super(ControllerUserList, self).create(request, *args, **kwargs)
         if (ret.status_code%100 != 200):
             raise Exception(ret.data)
 
         return ret
 
 
-class ControllerUsersDetail(PlanetStackRetrieveUpdateDestroyAPIView):
-    queryset = ControllerUsers.objects.select_related().all()
-    serializer_class = ControllerUsersSerializer
-    id_serializer_class = ControllerUsersIdSerializer
+class ControllerUserDetail(PlanetStackRetrieveUpdateDestroyAPIView):
+    queryset = ControllerUser.objects.select_related().all()
+    serializer_class = ControllerUserSerializer
+    id_serializer_class = ControllerUserIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -5217,7 +5217,7 @@ class ControllerUsersDetail(PlanetStackRetrieveUpdateDestroyAPIView):
             return self.serializer_class
     
     def get_queryset(self):
-        return ControllerUsers.select_by_user(self.request.user)
+        return ControllerUser.select_by_user(self.request.user)
 
     # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView
 
@@ -5343,10 +5343,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','controller','availability_zone',)
 
@@ -5358,7 +5358,7 @@ 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):
         serializer = self.get_serializer(data=request.DATA, files=request.FILES)
@@ -5370,21 +5370,21 @@ class SiteDeploymentsList(generics.ListCreateAPIView):
         obj = serializer.object
         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)
@@ -5394,7 +5394,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
 
@@ -5638,10 +5638,10 @@ class ServiceResourceDetail(PlanetStackRetrieveUpdateDestroyAPIView):
 
 
 
-class ControllerSlicesList(generics.ListCreateAPIView):
-    queryset = ControllerSlices.objects.select_related().all()
-    serializer_class = ControllerSlicesSerializer
-    id_serializer_class = ControllerSlicesIdSerializer
+class ControllerSliceList(generics.ListCreateAPIView):
+    queryset = ControllerSlice.objects.select_related().all()
+    serializer_class = ControllerSliceSerializer
+    id_serializer_class = ControllerSliceIdSerializer
     filter_backends = (filters.DjangoFilterBackend,)
     filter_fields = ('id','created','updated','enacted','backend_status','deleted','controller','slice','tenant_id',)
 
@@ -5653,7 +5653,7 @@ class ControllerSlicesList(generics.ListCreateAPIView):
             return self.serializer_class
 
     def get_queryset(self):
-        return ControllerSlices.select_by_user(self.request.user)
+        return ControllerSlice.select_by_user(self.request.user)
 
     def create(self, request, *args, **kwargs):
         serializer = self.get_serializer(data=request.DATA, files=request.FILES)
@@ -5665,21 +5665,21 @@ class ControllerSlicesList(generics.ListCreateAPIView):
         obj = serializer.object
         obj.caller = request.user
         if obj.can_update(request.user):
-            return super(ControllerSlicesList, self).create(request, *args, **kwargs)
+            return super(ControllerSliceList, self).create(request, *args, **kwargs)
         else:
             raise Exception("failed obj.can_update")
 
-        ret = super(ControllerSlicesList, self).create(request, *args, **kwargs)
+        ret = super(ControllerSliceList, self).create(request, *args, **kwargs)
         if (ret.status_code%100 != 200):
             raise Exception(ret.data)
 
         return ret
 
 
-class ControllerSlicesDetail(PlanetStackRetrieveUpdateDestroyAPIView):
-    queryset = ControllerSlices.objects.select_related().all()
-    serializer_class = ControllerSlicesSerializer
-    id_serializer_class = ControllerSlicesIdSerializer
+class ControllerSliceDetail(PlanetStackRetrieveUpdateDestroyAPIView):
+    queryset = ControllerSlice.objects.select_related().all()
+    serializer_class = ControllerSliceSerializer
+    id_serializer_class = ControllerSliceIdSerializer
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -5689,7 +5689,7 @@ class ControllerSlicesDetail(PlanetStackRetrieveUpdateDestroyAPIView):
             return self.serializer_class
     
     def get_queryset(self):
-        return ControllerSlices.select_by_user(self.request.user)
+        return ControllerSlice.select_by_user(self.request.user)
 
     # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView
 
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 33cb695..6647031 100644 (file)
@@ -35,7 +35,7 @@
         "Node", 
         "Flavor"
     ], 
-    "ControllerNetworks": [
+    "ControllerNetwork": [
         "Network", 
         "Controller"
     ], 
@@ -70,7 +70,7 @@
     "ServiceAttribute": [
         "Service"
     ], 
-    "ControllerSiteDeployments": [
+    "ControllerSites": [
         "Controller"
     ], 
     "SlicePrivilege": [
         "Site", 
         "Role"
     ], 
-    "ControllerUsers": [
+    "ControllerUser": [
         "User", 
         "Controller"
     ], 
     "SiteCredential": [
         "Site"
     ], 
-    "ControllerSlices": [
+    "ControllerSlice": [
         "Controller", 
         "Slice",
-        "ControllerUsers"
+        "ControllerUser"
     ], 
     "SiteDeployments": [
         "Site", 
index 8671d6a..ac395a1 100644 (file)
@@ -1,3 +1,4 @@
 from .model_policy_Slice import *
 from .model_policy_User import *
 from .model_policy_Network import *
+from .model_policy_Site import *
index d9d138d..f822bf2 100644 (file)
@@ -1,16 +1,16 @@
 from core.models import *
 
 def handle(network):
-       from core.models import ControllerSlices,ControllerNetworks
+       from core.models import ControllerSlice,ControllerNetwork
        from collections import defaultdict
        # network controllers are not visible to users. We must ensure
        # networks are deployed at all deploymets available to their slices.
-       slice_controllers = ControllerSlices.objects.all()
+       slice_controllers = ControllerSlice.objects.all()
        slice_deploy_lookup = defaultdict(list)
        for slice_controller in slice_controllers:
                slice_deploy_lookup[slice_controller.slice].append(slice_controller.controller)
 
-       network_controllers = ControllerNetworks.objects.all()
+       network_controllers = ControllerNetwork.objects.all()
        network_deploy_lookup = defaultdict(list)
        for network_controller in network_controllers:
                network_deploy_lookup[network_controller.network].append(network_controller.controller)
@@ -19,5 +19,5 @@ def handle(network):
        for expected_controller in expected_controllers:
                if network not in network_deploy_lookup or \
                  expected_controller not in network_deploy_lookup[network]:
-                       nd = ControllerNetworks(network=network, controller=expected_controller)
+                       nd = ControllerNetwork(network=network, controller=expected_controller)
                        nd.save()
diff --git a/planetstack/model_policies/model_policy_Site.py b/planetstack/model_policies/model_policy_Site.py
new file mode 100644 (file)
index 0000000..a49c868
--- /dev/null
@@ -0,0 +1,12 @@
+from core.models import *
+
+def handle(site):
+    # make sure site has a ControllerSite record for each controller
+    ctrl_sites = ControllerSite.objects.filter(site=site)
+    existing_controllers = [cs.controller for cs in ctrl_sites]
+
+    all_controllers = Controller.objects.all()
+    for ctrl in all_controllers:
+        if ctrl not in existing_controllers:
+            ctrl_site = ControllerSite(controller=ctrl, site=site)
+            ctrl_site.save() 
index 0d83d68..37129a3 100644 (file)
@@ -1,64 +1,59 @@
 
 def handle(slice):
-       from core.models import Controller,ControllerSlices,Controller,Network,NetworkSlice,NetworkTemplate
-       from collections import defaultdict
-       ctrl_site_deployments = SiteDeployments.objects.all()
-       
-       slice_controllers = ControllerSlices.objects.all()
-       slice_deploy_lookup = defaultdict(list)
-       for slice_controller in slice_controllers:
-               slice_deploy_lookup[slice_controller.slice].append(slice_controller)
-       
-        all_controllers = Controller.objects.all() 
-       for expected_controller in all_controllers:
-               if slice not in slice_deploy_lookup or \
-                  expected_controller not in slice_deploy_lookup[slice]:
-                       sd = ControllerSlices(slice=slice, controller=expected_controller)
-                       sd.save()
+    from core.models import Controller, ControllerSlice, SiteDeployment, Network, NetworkSlice,NetworkTemplate
+    from collections import defaultdict
+    controller_slices = ControllerSlice.objects.filter(slice=slice)
+    existing_controllers = [cs.controller for cs in controller_slices] 
+    
+    all_controllers = Controller.objects.all() 
+    for controller in all_controllers:
+        if controller not in existing_controllers:
+            sd = ControllerSlice(slice=slice, controller=controller_controller)
+            sd.save()
 
-       # make sure slice has at least 1 public and 1 private networkd
-       public_nets = []
-       private_net = None
-       networks = Network.objects.filter(owner=slice)
-       for network in networks:
-               if network.template.name == 'Public dedicated IPv4':
-                       public_nets.append(network)
-               elif network.template.name == 'Public shared IPv4':
-                       public_nets.append(network)
-               elif network.template.name == 'Private':
-                       private_net = network
-       if not public_nets:
+    # make sure slice has at least 1 public and 1 private networkd
+    public_nets = []
+    private_net = None
+    networks = Network.objects.filter(owner=slice)
+    for network in networks:
+        if network.template.name == 'Public dedicated IPv4':
+            public_nets.append(network)
+        elif network.template.name == 'Public shared IPv4':
+            public_nets.append(network)
+        elif network.template.name == 'Private':
+            private_net = network
+    if not public_nets:
                 # ensure there is at least one public network, and default it to dedicated
-               nat_net = Network(
-                   name = slice.name+'-nat',
-                   template = NetworkTemplate.objects.get(name='Public shared IPv4'),
-                   owner = slice
-                   )
-               nat_net.save()
-                public_nets.append(nat_net)
+        nat_net = Network(
+                name = slice.name+'-nat',
+                    template = NetworkTemplate.objects.get(name='Public shared IPv4'),
+                owner = slice
+                )
+        nat_net.save()
+        public_nets.append(nat_net)
 
-       if not private_net:
-               private_net = Network(
-               name = slice.name+'-private',
-               template = NetworkTemplate.objects.get(name='Private'),
-               owner = slice
-               )
-               private_net.save()
-       # create slice networks
-       public_net_slice = None
-       private_net_slice = None
-       net_slices = NetworkSlice.objects.filter(slice=slice, network__in=[private_net]+public_nets)
-       for net_slice in net_slices:
-               if net_slice.network in public_nets:
-                       public_net_slice = net_slice
-               elif net_slice.network == private_net:
-                       private_net_slice = net_slice
-       if not public_net_slice:
-               public_net_slice = NetworkSlice(slice=slice, network=public_nets[0])
-               public_net_slice.save()
-       if not private_net_slice:
-               private_net_slice = NetworkSlice(slice=slice, network=private_net)
-               private_net_slice.save()
+    if not private_net:
+        private_net = Network(
+        name = slice.name+'-private',
+        template = NetworkTemplate.objects.get(name='Private'),
+        owner = slice
+        )
+        private_net.save()
+    # create slice networks
+    public_net_slice = None
+    private_net_slice = None
+    net_slices = NetworkSlice.objects.filter(slice=slice, network__in=[private_net]+public_nets)
+    for net_slice in net_slices:
+        if net_slice.network in public_nets:
+            public_net_slice = net_slice
+        elif net_slice.network == private_net:
+            private_net_slice = net_slice
+    if not public_net_slice:
+        public_net_slice = NetworkSlice(slice=slice, network=public_nets[0])
+        public_net_slice.save()
+    if not private_net_slice:
+        private_net_slice = NetworkSlice(slice=slice, network=private_net)
+        private_net_slice.save()
 
 
 
index 703b28c..5e2adad 100644 (file)
@@ -1,15 +1,15 @@
 from core.models import *
 
 def handle(user):
-       from core.models import Controller, ControllerSiteDeployments, ControllerUsers
+       from core.models import Controller, ControllerSite, ControllerUser
        from collections import defaultdict
-       ctrl_site_deployments = ControllerSiteDeployments.objects.all()
+       ctrl_site_deployments = ControllerSite.objects.all()
        controller_lookup = defaultdict(list)
        for ctrl_site_deployment in ctrl_site_deployments:
                controller_site_lookup[ctrl_site_deployment.site_deployment].append(ctrl_site_deployment)
 
        controller_user_lookup = defaultdict(list)
-       for controller_user in ControllerUsers.objects.all():
+       for controller_user in ControllerUser.objects.all():
                controller_user_lookup[controller_user.user].append(controller_user.controller)
    
        if user.is_admin:
@@ -25,6 +25,6 @@ def handle(user):
                if not user in controller_user_lookup or \
                  expected_controller not in controller_user_lookup[user]: 
                        # add new record
-                       ud = ControllerUsers(user=user, controller=expected_controller)
+                       ud = ControllerUser(user=user, controller=expected_controller)
                        ud.save()    
 
index de6f73d..e12b15c 100644 (file)
@@ -4,6 +4,7 @@ import pdb
 from core.models import *
 from dependency_walker import *
 import model_policies
+from util.logger import logger
 
 modelPolicyEnabled = True
 
@@ -41,7 +42,7 @@ def post_save_handler(sender, instance, **kwargs):
                        if policy_handler is not None:
                                policy_handler.handle(instance)
                except:
-                       pass
+                       logger.log_exc("Model Policy Error:") 
        elif 'deleted' in kwargs['update_fields']:
                walk_inv_deps(delete_if_inactive, instance)
        
old mode 100755 (executable)
new mode 100644 (file)
index 500c0e0..cdd94a2 100644 (file)
@@ -50,7 +50,7 @@ def invert_graph(g):
        return ig
 
 class PlanetStackObserver:
-       #sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivileges,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps,SyncExternalRoutes,SyncUsers,SyncRoles,SyncNodes,SyncImages,GarbageCollector]
+       #sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivilege,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps,SyncExternalRoutes,SyncUsers,SyncRoles,SyncNodes,SyncImages,GarbageCollector]
        sync_steps = []
 
        
old mode 100755 (executable)
new mode 100644 (file)
index 3f8dca4..92cc7f2 100644 (file)
@@ -1,14 +1 @@
-from .sync_controller_site_deployments import SyncControllerSiteDeployments
-from .sync_network_slivers import SyncNetworkSlivers
-from .sync_networks import SyncNetworks
-from .sync_controller_networks import SyncControllerNetworks
-from .sync_site_privileges import SyncSitePrivileges
-from .sync_sites import SyncSites
-from .sync_slice_memberships import SyncSliceMemberships
-from .sync_slices import SyncSlices
-from .sync_slivers import SyncSlivers
-from .sync_users import SyncUsers
-from .sync_roles import SyncRoles
-from .sync_nodes import SyncNodes
-from .sync_images import SyncImages
-from .sync_controller_images import SyncControllerImages
+from .sync_controller_sites import SyncControllerSite
index 3cff7c2..fa1f439 100644 (file)
@@ -13,9 +13,9 @@ from observer.ansible import *
 
 logger = Logger(level=logging.INFO)
 
-class SyncControllerNetworks(OpenStackSyncStep):
+class SyncControllerNetwork(OpenStackSyncStep):
     requested_interval = 0
-    provides=[Network, ControllerNetworks, Sliver]
+    provides=[Network, ControllerNetwork, Sliver]
 
     def alloc_subnet(self, uuid):
         a = 10
@@ -29,9 +29,9 @@ class SyncControllerNetworks(OpenStackSyncStep):
 
     def fetch_pending(self, deleted):
         if (deleted):
-            return ControllerNetworks.deleted_objects.all()
+            return ControllerNetwork.deleted_objects.all()
         else:
-            return ControllerNetworks.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+            return ControllerNetwork.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
 
 
     def save_controller_network(self, controller_network):
diff --git a/planetstack/openstack_observer/steps/sync_controller_site_deployments.py b/planetstack/openstack_observer/steps/sync_controller_site_deployments.py
deleted file mode 100644 (file)
index 907325a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.site import *
-from observer.ansible import *
-
-class SyncControllerSiteDeployments(OpenStackSyncStep):
-    requested_interval=0
-    provides=[SiteDeployments]
-
-    def fetch_pending(self, deleted=False):
-        pending = super(OpenStackSyncStep, self).fetch_pending(deleted)
-        return pending.filter(controller__isnull=False)
-
-    def sync_record(self, site_deployment):
-
-       template = os_template_env.get_template('sync_controller_site_deployments.yaml')
-       tenant_fields = {'endpoint':site_deployment.controller.auth_url,
-                        'admin_user': site_deployment.controller.admin_user,
-                        'admin_password': site_deployment.controller.admin_password,
-                        'admin_tenant': site_deployment.controller.admin_tenant,
-                        'ansible_tag': '%s@%s'%(site_deployment.site.login_base,site_deployment.deployment.name), # name of ansible playbook
-                        'tenant': site_deployment.site.login_base,
-                        'tenant_description': site_deployment.site.name}
-
-       rendered = template.render(tenant_fields)
-       res = run_template('sync_controller_site_deployments.yaml', tenant_fields, path='controller_site_deployments')
-
-       if (len(res)==1):
-               site_deployment.tenant_id = res[0]['id']
-               site_deployment.save()
-       elif (len(res)):
-               raise Exception('Could not assign roles for user %s'%tenant_fields['tenant'])
-       else:
-               raise Exception('Could not create or update user %s'%tenant_fields['tenant'])
-            
-    def delete_record(self, site_deployment):
-       if site_deployment.tenant_id:
-            driver = self.driver.admin_driver(controller=site_deployment.controller)
-            driver.delete_tenant(site_deployment.tenant_id)
-
-       """
-        Ansible does not support tenant deletion yet
-
-       import pdb
-       pdb.set_trace()
-        template = os_template_env.get_template('delete_site_deployments.yaml')
-       tenant_fields = {'endpoint':site_deployment.controller.auth_url,
-                        'admin_user': site_deployment.controller.admin_user,
-                        'admin_password': site_deployment.controller.admin_password,
-                        'admin_tenant': 'admin',
-                        'ansible_tag': 'site_deployments/%s@%s'%(site_deployment.site_deployment.site.login_base,site_deployment.site_deployment.deployment.name), # name of ansible playbook
-                        'tenant': site_deployment.site_deployment.site.login_base,
-                        'delete': True}
-
-       rendered = template.render(tenant_fields)
-       res = run_template('sync_site_deployments.yaml', tenant_fields)
-
-       if (len(res)!=1):
-               raise Exception('Could not assign roles for user %s'%tenant_fields['tenant'])
-       """
diff --git a/planetstack/openstack_observer/steps/sync_controller_sites.py b/planetstack/openstack_observer/steps/sync_controller_sites.py
new file mode 100644 (file)
index 0000000..f6425ae
--- /dev/null
@@ -0,0 +1,63 @@
+import os
+import base64
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.openstacksyncstep import OpenStackSyncStep
+from core.models.site import *
+from observer.ansible import *
+
+class SyncControllerSite(OpenStackSyncStep):
+    requested_interval=0
+    provides=[ControllerSite]
+
+    def fetch_pending(self, deleted=False):
+        pending = super(OpenStackSyncStep, self).fetch_pending(deleted)
+        return pending.filter(controller__isnull=False)
+
+    def sync_record(self, controller_site):
+
+       template = os_template_env.get_template('sync_controller_sites.yaml')
+       tenant_fields = {'endpoint':controller_site.controller.auth_url,
+                        'admin_user': controller_site.controller.admin_user,
+                        'admin_password': controller_site.controller.admin_password,
+                        'admin_tenant': controller_site.controller.admin_tenant,
+                        'ansible_tag': '%s@%s'%(controller_site.site.login_base,controller_site.deployment.name), # name of ansible playbook
+                        'tenant': controller_site.site.login_base,
+                        'tenant_description': controller_site.site.name}
+
+       rendered = template.render(tenant_fields)
+       res = run_template('sync_controller_sites.yaml', tenant_fields, path='controller_sites')
+
+       if (len(res)==1):
+               controller_site.tenant_id = res[0]['id']
+               controller_site.save()
+       elif (len(res)):
+               raise Exception('Could not assign roles for user %s'%tenant_fields['tenant'])
+       else:
+               raise Exception('Could not create or update user %s'%tenant_fields['tenant'])
+            
+    def delete_record(self, controller_site):
+       if controller_site.tenant_id:
+            driver = self.driver.admin_driver(controller=controller_site.controller)
+            driver.delete_tenant(controller_site.tenant_id)
+
+       """
+        Ansible does not support tenant deletion yet
+
+       import pdb
+       pdb.set_trace()
+        template = os_template_env.get_template('delete_controller_sites.yaml')
+       tenant_fields = {'endpoint':controller_site.controller.auth_url,
+                        'admin_user': controller_site.controller.admin_user,
+                        'admin_password': controller_site.controller.admin_password,
+                        'admin_tenant': 'admin',
+                        'ansible_tag': 'controller_sites/%s@%s'%(controller_site.controller_site.site.login_base,controller_site.controller_site.deployment.name), # name of ansible playbook
+                        'tenant': controller_site.controller_site.site.login_base,
+                        'delete': True}
+
+       rendered = template.render(tenant_fields)
+       res = run_template('sync_controller_sites.yaml', tenant_fields)
+
+       if (len(res)!=1):
+               raise Exception('Could not assign roles for user %s'%tenant_fields['tenant'])
+       """
index b1a1f55..24453e3 100644 (file)
@@ -5,22 +5,22 @@ 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, ControllerSlices
-from core.models.controllerusers import ControllerUsers
+from core.models.slice import Slice, ControllerSlice
+from core.models.controllerusers import ControllerUser
 from util.logger import Logger, logging
 from observer.ansible import *
 
 logger = Logger(level=logging.INFO)
 
-class SyncControllerSlices(OpenStackSyncStep):
-    provides=[ControllerSlices]
+class SyncControllerSlice(OpenStackSyncStep):
+    provides=[ControllerSlice]
     requested_interval=0
 
     def fetch_pending(self, deleted):
         if (deleted):
-            return ControllerSlices.deleted_objects.all()
+            return ControllerSlice.deleted_objects.all()
         else:
-            return ControllerSlices.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+            return ControllerSlice.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
 
     def sync_record(self, controller_slice):
         logger.info("sync'ing slice controller %s" % controller_slice)
@@ -29,7 +29,7 @@ class SyncControllerSlices(OpenStackSyncStep):
             logger.info("controller %r has no admin_user, skipping" % controller_slice.controller)
             return
 
-        controller_users = ControllerUsers.objects.filter(user=controller_slice.slice.creator,
+        controller_users = ControllerUser.objects.filter(user=controller_slice.slice.creator,
                                                              controller=controller_slice.controller)
         if not controller_users:
             raise Exception("slice createor %s has not accout at controller %s" % (controller_slice.slice.creator, controller_slice.controller.name))
diff --git a/planetstack/openstack_observer/steps/sync_controller_user_site_privileges.py b/planetstack/openstack_observer/steps/sync_controller_user_site_privileges.py
new file mode 100644 (file)
index 0000000..6a62104
--- /dev/null
@@ -0,0 +1,86 @@
+import os
+import base64
+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 Controller, SitePrivilege 
+from core.models.user import User
+from core.models.controlleruser import ControllerUser
+from util.logger import Logger, logging
+
+from observer.ansible import *
+
+logger = Logger(level=logging.INFO)
+
+class SyncControllerUser(OpenStackSyncStep):
+    provides=[SitePrivilege]
+    requested_interval=0
+
+    def fetch_pending(self, deleted):
+
+        if (deleted):
+            return SitePrivilege.deleted_objects.all()
+        else:
+            return ControllerUser.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
+
+    def sync_record(self, controller_user):
+        logger.info("sync'ing user %s at controller %s" % (controller_user.user, controller_user.controller))
+
+        if not controller_user.controller.admin_user:
+            logger.info("controller %r has no admin_user, skipping" % controller_user.controller)
+            return
+
+       template = os_template_env.get_template('sync_controller_users.yaml')
+
+        # All users will have at least the 'user' role at their home site/tenant.
+        # We must also check if the user should have the admin role                            
+       roles = ['user']
+        if controller_user.user.is_admin:
+            roles.append('admin')
+   
+       # setup user home site roles at controller 
+        if not controller_user.user.site:
+            raise Exception('Siteless user %s'%controller_user.user.email)
+        else:
+            # look up tenant id for the user's site at the controller
+            #ctrl_site_deployments = SiteDeployment.objects.filter(
+            #  site_deployment__site=controller_user.user.site,
+            #  controller=controller_user.controller)
+
+            #if ctrl_site_deployments:
+            #    # need the correct tenant id for site at the controller
+            #    tenant_id = ctrl_site_deployments[0].tenant_id  
+            #    tenant_name = ctrl_site_deployments[0].site_deployment.site.login_base
+            user_fields = {
+                       'endpoint':controller_user.controller.auth_url,
+                      'name': controller_user.user.email,
+                       'email': controller_user.user.email,
+                       'password': controller_user.user.remote_password,
+                       'admin_user': controller_user.controller.admin_user,
+                      'admin_password': controller_user.controller.admin_password,
+                      'ansible_tag':'%s@%s'%(controller_user.user.email.replace('@','-at-'),controller_user.controller.name),
+                      'admin_tenant': controller_user.controller.admin_tenant,
+                      'roles':roles,
+                      'tenant':controller_user.user.site.login_base}    
+       
+           rendered = template.render(user_fields)
+           res = run_template('sync_controller_users.yaml', user_fields,path='controller_users')
+
+           # results is an array in which each element corresponds to an 
+           # "ok" string received per operation. If we get as many oks as
+           # the number of operations we issued, that means a grand success.
+           # Otherwise, the number of oks tell us which operation failed.
+           expected_length = len(roles) + 1
+           if (len(res)==expected_length):
+                controller_user.kuser_id = res[0]['id']
+                controller_user.save()
+           elif (len(res)):
+               raise Exception('Could not assign roles for user %s'%user_fields['name'])
+           else:
+               raise Exception('Could not create or update user %s'%user_fields['name'])
+
+    def delete_record(self, controller_user):
+        if controller_user.kuser_id:
+            driver = self.driver.admin_driver(controller=controller_user.controller)
+            driver.delete_user(controller_user.kuser_id)
diff --git a/planetstack/openstack_observer/steps/sync_controller_user_slice_privileges.py b/planetstack/openstack_observer/steps/sync_controller_user_slice_privileges.py
new file mode 100644 (file)
index 0000000..4c68a40
--- /dev/null
@@ -0,0 +1,86 @@
+import os
+import base64
+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 Controller, SiteDeployment
+from core.models.user import User
+from core.models.controllerusers import ControllerUser
+from util.logger import Logger, logging
+
+from observer.ansible import *
+
+logger = Logger(level=logging.INFO)
+
+class SyncControllerUser(OpenStackSyncStep):
+    provides=[ControllerUser, User]
+    requested_interval=0
+
+    def fetch_pending(self, deleted):
+
+        if (deleted):
+            return ControllerUser.deleted_objects.all()
+        else:
+            return ControllerUser.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
+
+    def sync_record(self, controller_user):
+        logger.info("sync'ing user %s at controller %s" % (controller_user.user, controller_user.controller))
+
+        if not controller_user.controller.admin_user:
+            logger.info("controller %r has no admin_user, skipping" % controller_user.controller)
+            return
+
+       template = os_template_env.get_template('sync_controller_users.yaml')
+
+        # All users will have at least the 'user' role at their home site/tenant.
+        # We must also check if the user should have the admin role                            
+       roles = ['user']
+        if controller_user.user.is_admin:
+            roles.append('admin')
+   
+       # setup user home site roles at controller 
+        if not controller_user.user.site:
+            raise Exception('Siteless user %s'%controller_user.user.email)
+        else:
+            # look up tenant id for the user's site at the controller
+            #ctrl_site_deployments = SiteDeployment.objects.filter(
+            #  site_deployment__site=controller_user.user.site,
+            #  controller=controller_user.controller)
+
+            #if ctrl_site_deployments:
+            #    # need the correct tenant id for site at the controller
+            #    tenant_id = ctrl_site_deployments[0].tenant_id  
+            #    tenant_name = ctrl_site_deployments[0].site_deployment.site.login_base
+            user_fields = {
+                       'endpoint':controller_user.controller.auth_url,
+                      'name': controller_user.user.email,
+                       'email': controller_user.user.email,
+                       'password': controller_user.user.remote_password,
+                       'admin_user': controller_user.controller.admin_user,
+                      'admin_password': controller_user.controller.admin_password,
+                      'ansible_tag':'%s@%s'%(controller_user.user.email.replace('@','-at-'),controller_user.controller.name),
+                      'admin_tenant': controller_user.controller.admin_tenant,
+                      'roles':roles,
+                      'tenant':controller_user.user.site.login_base}    
+       
+           rendered = template.render(user_fields)
+           res = run_template('sync_controller_users.yaml', user_fields,path='controller_users')
+
+           # results is an array in which each element corresponds to an 
+           # "ok" string received per operation. If we get as many oks as
+           # the number of operations we issued, that means a grand success.
+           # Otherwise, the number of oks tell us which operation failed.
+           expected_length = len(roles) + 1
+           if (len(res)==expected_length):
+                controller_user.kuser_id = res[0]['id']
+                controller_user.save()
+           elif (len(res)):
+               raise Exception('Could not assign roles for user %s'%user_fields['name'])
+           else:
+               raise Exception('Could not create or update user %s'%user_fields['name'])
+
+    def delete_record(self, controller_user):
+        if controller_user.kuser_id:
+            driver = self.driver.admin_driver(controller=controller_user.controller)
+            driver.delete_user(controller_user.kuser_id)
index 1b57b81..1ace6db 100644 (file)
@@ -4,25 +4,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 Controller, SiteDeployments, SiteDeployments
+from core.models.site import Controller, SiteDeployment, SiteDeployment
 from core.models.user import User