conflict resolution
diff --git a/planetstack/apigen/deps.template.json b/planetstack/apigen/deps.template.json
old mode 100755
new mode 100644
diff --git a/planetstack/apigen/dot.template.dot b/planetstack/apigen/dot.template.dot
old mode 100755
new mode 100644
diff --git a/planetstack/apigen/modelgen b/planetstack/apigen/modelgen
old mode 100755
new mode 100644
diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py
index e0664a5..4846a28 100644
--- a/planetstack/core/admin.py
+++ b/planetstack/core/admin.py
@@ -414,6 +414,13 @@
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', 'tenant_id']
+
+
class SitePrivilegeInline(PlStackTabularInline):
model = SitePrivilege
extra = 0
@@ -432,8 +439,8 @@
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 @@
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 @@
# 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
@@ -655,12 +662,12 @@
return AdminFormMetaClass
class ControllerAdminForm(forms.ModelForm):
- site_deployments = forms.ModelMultipleChoiceField(
- queryset=SiteDeployments.objects.all(),
+ sites = forms.ModelMultipleChoiceField(
+ queryset=Site.objects.all(),
required=False,
- help_text="Select which sites deployments are managed by this controller",
+ help_text="Select which sites are managed by this controller",
widget=FilteredSelectMultiple(
- verbose_name=('Site Deployments'), is_stacked=False
+ verbose_name=('Sites'), is_stacked=False
)
)
@@ -672,7 +679,7 @@
super(ControllerAdminForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
- self.fields['site_deployments'].initial = [x.site_deployment for x in self.instance.controllersitedeployments.all()]
+ self.fields['sites'].initial = [x.site_deployment for x in self.instance.controllersite.all()]
def manipulate_m2m_objs(self, this_obj, selected_objs, all_relations, relation_class, local_attrname, foreign_attrname):
""" helper function for handling m2m relations from the MultipleChoiceField
@@ -710,7 +717,7 @@
# 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['sites'], controller.controllersite.all(), ControllerSite, "controller", "site")
pass
self.save_m2m()
@@ -721,7 +728,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
readonly_fields = ("subnet", )
inlines = [NetworkParameterInline, NetworkSliversInline, NetworkSlicesInline, RouterInline]
- admin_inlines = [ControllerNetworksInline]
+ admin_inlines = [ControllerNetworkInline]
form=NetworkForm
diff --git a/planetstack/core/fixtures/demo_data.json b/planetstack/core/fixtures/demo_data.json
index 400148f..12ee426 100644
--- a/planetstack/core/fixtures/demo_data.json
+++ b/planetstack/core/fixtures/demo_data.json
@@ -636,7 +636,7 @@
},
{
"pk": 1,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-07T23:52:01.453Z",
"created": "2014-05-07T23:52:01.453Z",
@@ -650,7 +650,7 @@
},
{
"pk": 2,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-07T23:52:01.455Z",
"created": "2014-05-07T23:52:01.455Z",
@@ -664,7 +664,7 @@
},
{
"pk": 3,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-07T23:52:01.456Z",
"created": "2014-05-07T23:52:01.456Z",
@@ -678,7 +678,7 @@
},
{
"pk": 4,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-07T23:52:01.457Z",
"created": "2014-05-07T23:52:01.456Z",
@@ -692,7 +692,7 @@
},
{
"pk": 5,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-07T23:52:01.457Z",
"created": "2014-05-07T23:52:01.457Z",
@@ -706,7 +706,7 @@
},
{
"pk": 6,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-07T23:52:01.458Z",
"created": "2014-05-07T23:52:01.458Z",
@@ -720,7 +720,7 @@
},
{
"pk": 7,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:00:37.305Z",
"created": "2014-05-08T00:00:37.305Z",
@@ -734,7 +734,7 @@
},
{
"pk": 8,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:01:18.181Z",
"created": "2014-05-08T00:01:18.181Z",
@@ -748,7 +748,7 @@
},
{
"pk": 9,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:01:29.768Z",
"created": "2014-05-08T00:01:29.768Z",
@@ -762,7 +762,7 @@
},
{
"pk": 10,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:01:52.173Z",
"created": "2014-05-08T00:01:52.173Z",
@@ -776,7 +776,7 @@
},
{
"pk": 11,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:02:03.435Z",
"created": "2014-05-08T00:02:03.435Z",
@@ -790,7 +790,7 @@
},
{
"pk": 12,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:02:16.038Z",
"created": "2014-05-08T00:02:16.038Z",
@@ -804,7 +804,7 @@
},
{
"pk": 13,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:02:33.626Z",
"created": "2014-05-08T00:02:33.626Z",
@@ -818,7 +818,7 @@
},
{
"pk": 14,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:02:46.549Z",
"created": "2014-05-08T00:02:46.549Z",
@@ -832,7 +832,7 @@
},
{
"pk": 15,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:03:01.445Z",
"created": "2014-05-08T00:03:01.445Z",
@@ -846,7 +846,7 @@
},
{
"pk": 16,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:03:18.238Z",
"created": "2014-05-08T00:03:18.238Z",
@@ -860,7 +860,7 @@
},
{
"pk": 17,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:03:32.156Z",
"created": "2014-05-08T00:03:32.156Z",
@@ -874,7 +874,7 @@
},
{
"pk": 18,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:03:45.449Z",
"created": "2014-05-08T00:03:45.448Z",
@@ -888,7 +888,7 @@
},
{
"pk": 19,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:03:59.510Z",
"created": "2014-05-08T00:03:59.510Z",
@@ -902,7 +902,7 @@
},
{
"pk": 20,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:04:12.516Z",
"created": "2014-05-08T00:04:12.516Z",
@@ -916,7 +916,7 @@
},
{
"pk": 21,
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"fields": {
"updated": "2014-05-08T00:04:25.576Z",
"created": "2014-05-08T00:04:25.576Z",
@@ -1851,7 +1851,7 @@
"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",
@@ -1864,7 +1864,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -1875,7 +1875,7 @@
"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",
@@ -1888,7 +1888,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -1899,7 +1899,7 @@
"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",
@@ -1912,7 +1912,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 8,
"enacted": null
@@ -1923,7 +1923,7 @@
"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",
@@ -1936,7 +1936,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 8,
"enacted": null
@@ -1947,7 +1947,7 @@
"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",
@@ -1960,7 +1960,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -1971,7 +1971,7 @@
"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",
@@ -1984,7 +1984,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -1995,7 +1995,7 @@
"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",
@@ -2008,7 +2008,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -2019,7 +2019,7 @@
"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",
@@ -2032,7 +2032,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -2043,7 +2043,7 @@
"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",
@@ -2056,7 +2056,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -2067,7 +2067,7 @@
"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",
@@ -2080,7 +2080,7 @@
"omf_friendly": false,
"network": "Private Only",
"max_slivers": 10,
- "mountDataSets": "GenBank",
+ "mount_data_sets": "GenBank",
"backend_status": "Provisioning in progress",
"creator": 1,
"enacted": null
@@ -2091,7 +2091,7 @@
"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",
@@ -2104,7 +2104,7 @@
"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
@@ -12784,10 +12784,10 @@
"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"
@@ -12802,10 +12802,10 @@
"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"
@@ -12820,10 +12820,10 @@
"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"
@@ -12841,10 +12841,10 @@
"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",
@@ -12864,10 +12864,10 @@
"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",
@@ -12887,10 +12887,10 @@
"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",
@@ -12910,10 +12910,10 @@
"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",
@@ -12933,10 +12933,10 @@
"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",
@@ -12956,10 +12956,10 @@
"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",
@@ -12979,10 +12979,10 @@
"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",
@@ -13002,10 +13002,10 @@
"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",
@@ -13025,10 +13025,10 @@
"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",
@@ -13048,10 +13048,10 @@
"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",
@@ -13071,10 +13071,10 @@
"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",
@@ -13094,10 +13094,10 @@
"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",
@@ -13117,10 +13117,10 @@
"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",
@@ -13140,10 +13140,10 @@
"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",
@@ -13163,10 +13163,10 @@
"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",
@@ -13186,10 +13186,10 @@
"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",
@@ -13209,10 +13209,10 @@
"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",
@@ -13232,10 +13232,10 @@
"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",
@@ -13255,10 +13255,10 @@
"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",
@@ -13278,10 +13278,10 @@
"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",
@@ -13301,10 +13301,10 @@
"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",
@@ -13324,10 +13324,10 @@
"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",
@@ -13347,13 +13347,13 @@
"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",
@@ -13373,10 +13373,10 @@
"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",
@@ -13396,10 +13396,10 @@
"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",
@@ -13419,10 +13419,10 @@
"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",
diff --git a/planetstack/core/fixtures/initial_data.json b/planetstack/core/fixtures/initial_data.json
index aef01f1..a7abdbe 100644
--- a/planetstack/core/fixtures/initial_data.json
+++ b/planetstack/core/fixtures/initial_data.json
@@ -721,7 +721,7 @@
"backend_status": "Provisioning in progress",
"enacted": "2014-06-20T01:53:28.687Z"
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 19
},
{
@@ -734,7 +734,7 @@
"backend_status": "Provisioning in progress",
"enacted": "2014-06-20T01:53:34.657Z"
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 20
},
{
@@ -747,7 +747,7 @@
"backend_status": "Provisioning in progress",
"enacted": "2014-06-20T01:53:40.604Z"
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 21
},
{
@@ -760,7 +760,7 @@
"backend_status": "Provisioning in progress",
"enacted": "2014-06-20T01:53:47.047Z"
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 22
},
{
@@ -773,7 +773,7 @@
"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
},
{
@@ -786,7 +786,7 @@
"backend_status": "Provisioning in progress",
"enacted": "2014-08-06T17:46:03.289Z"
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 28
},
{
@@ -799,7 +799,7 @@
"backend_status": "Provisioning in progress",
"enacted": "2014-08-06T17:46:07.804Z"
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 29
},
{
@@ -812,7 +812,7 @@
"backend_status": "Provisioning in progress",
"enacted": "2014-08-06T17:46:12.521Z"
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 30
},
{
@@ -825,7 +825,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 31
},
{
@@ -838,7 +838,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 32
},
{
@@ -851,7 +851,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 33
},
{
@@ -864,7 +864,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 34
},
{
@@ -877,7 +877,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 35
},
{
@@ -890,7 +890,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 36
},
{
@@ -903,7 +903,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 37
},
{
@@ -916,7 +916,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 38
},
{
@@ -929,7 +929,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 39
},
{
@@ -942,7 +942,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 40
},
{
@@ -955,7 +955,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 41
},
{
@@ -968,7 +968,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 42
},
{
@@ -981,7 +981,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 43
},
{
@@ -994,7 +994,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 44
},
{
@@ -1007,7 +1007,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 45
},
{
@@ -1020,7 +1020,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 46
},
{
@@ -1033,7 +1033,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 47
},
{
@@ -1046,7 +1046,7 @@
"backend_status": "Provisioning in progress",
"enacted": null
},
- "model": "core.sitedeployments",
+ "model": "core.sitedeployment",
"pk": 48
},
{
diff --git a/planetstack/core/migrations/0001_initial.py b/planetstack/core/migrations/0001_initial.py
index 8e1ec76..d440ded 100644
--- a/planetstack/core/migrations/0001_initial.py
+++ b/planetstack/core/migrations/0001_initial.py
@@ -41,7 +41,7 @@
('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 @@
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 @@
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 @@
('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 @@
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 @@
('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 @@
('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 @@
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 @@
('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 @@
('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 @@
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 @@
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 @@
),
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 @@
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 @@
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
index aa94338..0000000
--- a/planetstack/core/migrations/0002_network_field_case.py
+++ /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
index d063363..0000000
--- a/planetstack/core/migrations/0003_network_field_case.py
+++ /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
index 0b911b3..0000000
--- a/planetstack/core/migrations/0004_slice_field_case.py
+++ /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',
- ),
- ]
diff --git a/planetstack/core/models/__init__.py b/planetstack/core/models/__init__.py
index 3a63602..79c6611 100644
--- a/planetstack/core/models/__init__.py
+++ b/planetstack/core/models/__init__.py
@@ -5,13 +5,13 @@
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 .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
diff --git a/planetstack/core/models/controllerusers.py b/planetstack/core/models/controlleruser.py
similarity index 84%
rename from planetstack/core/models/controllerusers.py
rename to planetstack/core/models/controlleruser.py
index 5a3568a..d0fda11 100644
--- a/planetstack/core/models/controllerusers.py
+++ b/planetstack/core/models/controlleruser.py
@@ -6,7 +6,7 @@
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 @@
@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
diff --git a/planetstack/core/models/network.py b/planetstack/core/models/network.py
index 8b88865..c7a97a9 100644
--- a/planetstack/core/models/network.py
+++ b/planetstack/core/models/network.py
@@ -144,7 +144,7 @@
qs = Network.objects.filter(owner__in=slices)
return qs
-class ControllerNetworks(PlCoreBase):
+class ControllerNetwork(PlCoreBase):
objects = ControllerLinkManager()
deleted_objects = ControllerLinkDeletionManager()
diff --git a/planetstack/core/models/node.py b/planetstack/core/models/node.py
index 2ff503e..0884ec1 100644
--- a/planetstack/core/models/node.py
+++ b/planetstack/core/models/node.py
@@ -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 @@
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)
diff --git a/planetstack/core/models/site.py b/planetstack/core/models/site.py
index 69863eb..1d46f4c 100644
--- a/planetstack/core/models/site.py
+++ b/planetstack/core/models/site.py
@@ -105,7 +105,7 @@
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)
@@ -299,7 +299,7 @@
deleted_objects = ControllerDeletionManager()
name = models.CharField(max_length=200, unique=True, help_text="Name of the Controller")
- version = models.CharField(max_length=200, unique=True, help_text="Controller version")
+ version = models.CharField(max_length=200, help_text="Controller version")
backend_type = models.CharField(max_length=200, null=True, blank=True, help_text="Type of compute controller, e.g. EC2, OpenStack, or OpenStack version")
auth_url = models.CharField(max_length=200, null=True, blank=True, help_text="Auth url for the compute controller")
admin_user = models.CharField(max_length=200, null=True, blank=True, help_text="Username of an admin user at this controller")
@@ -308,14 +308,19 @@
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")
diff --git a/planetstack/core/models/slice.py b/planetstack/core/models/slice.py
index 52a5dd6..e182388 100644
--- a/planetstack/core/models/slice.py
+++ b/planetstack/core/models/slice.py
@@ -94,7 +94,7 @@
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 @@
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 @@
@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):
diff --git a/planetstack/core/static/dashboardStatic.PNG b/planetstack/core/static/dashboardStatic.PNG
old mode 100755
new mode 100644
Binary files differ
diff --git a/planetstack/core/static/logo_opague_circles.png b/planetstack/core/static/logo_opague_circles.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/planetstack/core/static/open-cloud-themed1.png b/planetstack/core/static/open-cloud-themed1.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/planetstack/core/static/opencloudApp.png b/planetstack/core/static/opencloudApp.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/planetstack/core/xoslib/up.sh b/planetstack/core/xoslib/up.sh
old mode 100755
new mode 100644
diff --git a/planetstack/dependency_walker.py b/planetstack/dependency_walker.py
old mode 100755
new mode 100644
index bc75b0c..e8d9e9a
--- a/planetstack/dependency_walker.py
+++ b/planetstack/dependency_walker.py
@@ -68,6 +68,7 @@
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):
diff --git a/planetstack/dmdot b/planetstack/dmdot
old mode 100755
new mode 100644
diff --git a/planetstack/ec2_observer/deleters/__init__.py b/planetstack/ec2_observer/deleters/__init__.py
old mode 100755
new mode 100644
diff --git a/planetstack/ec2_observer/deleters/site_deleter.py b/planetstack/ec2_observer/deleters/site_deleter.py
index b8ca6a1..88a4008 100644
--- a/planetstack/ec2_observer/deleters/site_deleter.py
+++ b/planetstack/ec2_observer/deleters/site_deleter.py
@@ -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()
diff --git a/planetstack/ec2_observer/deleters/site_deployment_deleter.py b/planetstack/ec2_observer/deleters/site_deployment_deleter.py
index cc71d43..db344cd 100644
--- a/planetstack/ec2_observer/deleters/site_deployment_deleter.py
+++ b/planetstack/ec2_observer/deleters/site_deployment_deleter.py
@@ -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)
diff --git a/planetstack/ec2_observer/dmdot b/planetstack/ec2_observer/dmdot
old mode 100755
new mode 100644
diff --git a/planetstack/ec2_observer/event_loop.py b/planetstack/ec2_observer/event_loop.py
index 1f15a8e..1319fec 100644
--- a/planetstack/ec2_observer/event_loop.py
+++ b/planetstack/ec2_observer/event_loop.py
@@ -49,7 +49,7 @@
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 = []
diff --git a/planetstack/ec2_observer/start.sh b/planetstack/ec2_observer/start.sh
old mode 100755
new mode 100644
diff --git a/planetstack/ec2_observer/steps/__init__.py b/planetstack/ec2_observer/steps/__init__.py
index e56c4b1..ed44fdb 100644
--- a/planetstack/ec2_observer/steps/__init__.py
+++ b/planetstack/ec2_observer/steps/__init__.py
@@ -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
diff --git a/planetstack/ec2_observer/steps/sync_nodes.py b/planetstack/ec2_observer/steps/sync_nodes.py
index 9f032ed..0fa8b61 100644
--- a/planetstack/ec2_observer/steps/sync_nodes.py
+++ b/planetstack/ec2_observer/steps/sync_nodes.py
@@ -20,7 +20,7 @@
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']
diff --git a/planetstack/ec2_observer/steps/sync_site_deployments.py b/planetstack/ec2_observer/steps/sync_site_deployments.py
index 7c24f68..5adccb7 100644
--- a/planetstack/ec2_observer/steps/sync_site_deployments.py
+++ b/planetstack/ec2_observer/steps/sync_site_deployments.py
@@ -7,9 +7,9 @@
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 @@
# 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 @@
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
diff --git a/planetstack/ec2_observer/steps/sync_sites.py b/planetstack/ec2_observer/steps/sync_sites.py
index 0c1c7cf..0959c71 100644
--- a/planetstack/ec2_observer/steps/sync_sites.py
+++ b/planetstack/ec2_observer/steps/sync_sites.py
@@ -16,7 +16,7 @@
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']
diff --git a/planetstack/genapi.py b/planetstack/genapi.py
index 00a5c94..c7b189b 100644
--- a/planetstack/genapi.py
+++ b/planetstack/genapi.py
@@ -89,8 +89,8 @@
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 @@
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 @@
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 @@
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 ControllerNetworksSerializer(serializers.HyperlinkedModelSerializer):
+class ControllerNetworkSerializer(serializers.HyperlinkedModelSerializer):
id = IdField()
humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -1039,10 +1039,10 @@
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 @@
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',)
@@ -2016,7 +2016,7 @@
-class ControllerUsersSerializer(serializers.HyperlinkedModelSerializer):
+class ControllerUserSerializer(serializers.HyperlinkedModelSerializer):
id = IdField()
humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2029,10 +2029,10 @@
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 @@
except:
return None
class Meta:
- model = ControllerUsers
+ model = ControllerUser
fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','user','controller','kuser_id',)
@@ -2121,7 +2121,7 @@
-class SiteDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
+class SiteDeploymentSerializer(serializers.HyperlinkedModelSerializer):
id = IdField()
humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2134,10 +2134,10 @@
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 @@
except:
return None
class Meta:
- model = SiteDeployments
+ model = SiteDeployment
fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','site','deployment','controller','availability_zone',)
@@ -2312,7 +2312,7 @@
-class ControllerSlicesSerializer(serializers.HyperlinkedModelSerializer):
+class ControllerSliceSerializer(serializers.HyperlinkedModelSerializer):
id = IdField()
humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
@@ -2325,10 +2325,10 @@
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 @@
except:
return None
class Meta:
- model = ControllerSlices
+ model = ControllerSlice
fields = ('humanReadableName', 'validators', 'id','created','updated','enacted','backend_status','deleted','controller','slice','tenant_id',)
@@ -2385,7 +2385,7 @@
ServiceClass: ServiceClassSerializer,
- ControllerNetworks: ControllerNetworksSerializer,
+ ControllerNetwork: ControllerNetworkSerializer,
Charge: ChargeSerializer,
@@ -2439,13 +2439,13 @@
DeploymentPrivilege: DeploymentPrivilegeSerializer,
- ControllerUsers: ControllerUsersSerializer,
+ ControllerUser: ControllerUserSerializer,
DeploymentRole: DeploymentRoleSerializer,
UserCredential: UserCredentialSerializer,
- SiteDeployments: SiteDeploymentsSerializer,
+ SiteDeployment: SiteDeploymentSerializer,
SliceTag: SliceTagSerializer,
@@ -2455,7 +2455,7 @@
ServiceResource: ServiceResourceSerializer,
- ControllerSlices: ControllerSlicesSerializer,
+ ControllerSlice: ControllerSliceSerializer,
None: None,
}
@@ -3574,10 +3574,10 @@
-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 @@
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 @@
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 @@
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 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 @@
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 @@
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 @@
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 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 @@
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 @@
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 @@
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 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 @@
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 @@
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 @@
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
diff --git a/planetstack/hpc_observer/run.sh b/planetstack/hpc_observer/run.sh
old mode 100755
new mode 100644
diff --git a/planetstack/hpc_observer/start.sh b/planetstack/hpc_observer/start.sh
old mode 100755
new mode 100644
diff --git a/planetstack/hpc_observer/stop.sh b/planetstack/hpc_observer/stop.sh
old mode 100755
new mode 100644
diff --git a/planetstack/hpc_observer/upload.sh b/planetstack/hpc_observer/upload.sh
old mode 100755
new mode 100644
diff --git a/planetstack/model-deps b/planetstack/model-deps
index 33cb695..6647031 100644
--- a/planetstack/model-deps
+++ b/planetstack/model-deps
@@ -35,7 +35,7 @@
"Node",
"Flavor"
],
- "ControllerNetworks": [
+ "ControllerNetwork": [
"Network",
"Controller"
],
@@ -70,7 +70,7 @@
"ServiceAttribute": [
"Service"
],
- "ControllerSiteDeployments": [
+ "ControllerSites": [
"Controller"
],
"SlicePrivilege": [
@@ -87,17 +87,17 @@
"Site",
"Role"
],
- "ControllerUsers": [
+ "ControllerUser": [
"User",
"Controller"
],
"SiteCredential": [
"Site"
],
- "ControllerSlices": [
+ "ControllerSlice": [
"Controller",
"Slice",
- "ControllerUsers"
+ "ControllerUser"
],
"SiteDeployments": [
"Site",
diff --git a/planetstack/model_policies/__init__.py b/planetstack/model_policies/__init__.py
index 8671d6a..ac395a1 100644
--- a/planetstack/model_policies/__init__.py
+++ b/planetstack/model_policies/__init__.py
@@ -1,3 +1,4 @@
from .model_policy_Slice import *
from .model_policy_User import *
from .model_policy_Network import *
+from .model_policy_Site import *
diff --git a/planetstack/model_policies/model_policy_Network.py b/planetstack/model_policies/model_policy_Network.py
index d9d138d..f822bf2 100644
--- a/planetstack/model_policies/model_policy_Network.py
+++ b/planetstack/model_policies/model_policy_Network.py
@@ -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 @@
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
index 0000000..7d96264
--- /dev/null
+++ b/planetstack/model_policies/model_policy_Site.py
@@ -0,0 +1,12 @@
+
+def handle(site):
+ from core.models import Controller, ControllerSite
+ # 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()
diff --git a/planetstack/model_policies/model_policy_Slice.py b/planetstack/model_policies/model_policy_Slice.py
index 0d83d68..cc9f2b0 100644
--- a/planetstack/model_policies/model_policy_Slice.py
+++ b/planetstack/model_policies/model_policy_Slice.py
@@ -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)
+ 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()
diff --git a/planetstack/model_policies/model_policy_User.py b/planetstack/model_policies/model_policy_User.py
index 703b28c..b7b16ad 100644
--- a/planetstack/model_policies/model_policy_User.py
+++ b/planetstack/model_policies/model_policy_User.py
@@ -1,30 +1,12 @@
-from core.models import *
-
def handle(user):
- from core.models import Controller, ControllerSiteDeployments, ControllerUsers
- from collections import defaultdict
- ctrl_site_deployments = ControllerSiteDeployments.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():
- controller_user_lookup[controller_user.user].append(controller_user.controller)
-
- if user.is_admin:
- # admins should have an account at all controllers
- expected_controllers = controllers
- else:
- # normal users should have an account at their site's controllers
- #expected_controllers = controller_site_lookup[user.site]
- # users are added to all controllers for now
- expected_controllers = controllers
-
- for expected_controller in expected_controllers:
- 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.save()
+ from core.models import Controller, ControllerSite, ControllerUser
+ from collections import defaultdict
+
+ controller_users = ControllerUser.objects.filter(user=user)
+ existing_controllers = [cu.controller for cu in controller_users]
+ all_controllers = Controller.objects.all()
+ for controller in all_controllers:
+ if controller not in existing_controllers:
+ ctrl_user = ControllerUser(controller=controller, user=user)
+ ctrl_user.save()
diff --git a/planetstack/model_policy.py b/planetstack/model_policy.py
index de6f73d..e12b15c 100644
--- a/planetstack/model_policy.py
+++ b/planetstack/model_policy.py
@@ -4,6 +4,7 @@
from core.models import *
from dependency_walker import *
import model_policies
+from util.logger import logger
modelPolicyEnabled = True
@@ -41,7 +42,7 @@
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)
diff --git a/planetstack/openstack_observer/ansible.py b/planetstack/openstack_observer/ansible.py
old mode 100755
new mode 100644
diff --git a/planetstack/openstack_observer/event_loop.py b/planetstack/openstack_observer/event_loop.py
index 500c0e0..cdd94a2 100644
--- a/planetstack/openstack_observer/event_loop.py
+++ b/planetstack/openstack_observer/event_loop.py
@@ -50,7 +50,7 @@
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 = []
diff --git a/planetstack/openstack_observer/run_ansible b/planetstack/openstack_observer/run_ansible
old mode 100755
new mode 100644
diff --git a/planetstack/openstack_observer/steps/__init__.py b/planetstack/openstack_observer/steps/__init__.py
index 3f8dca4..b83322a 100644
--- a/planetstack/openstack_observer/steps/__init__.py
+++ b/planetstack/openstack_observer/steps/__init__.py
@@ -1,14 +1,3 @@
-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 SyncControllerSites
+from .sync_controller_slices import SyncControllerSlices
+from .sync_controller_users import SyncControllerUsers
diff --git a/planetstack/openstack_observer/steps/sync_controller_networks.py b/planetstack/openstack_observer/steps/sync_controller_networks.py
index 3cff7c2..fa1f439 100644
--- a/planetstack/openstack_observer/steps/sync_controller_networks.py
+++ b/planetstack/openstack_observer/steps/sync_controller_networks.py
@@ -13,9 +13,9 @@
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 @@
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
index 907325a..0000000
--- a/planetstack/openstack_observer/steps/sync_controller_site_deployments.py
+++ /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
index 0000000..865ae07
--- /dev/null
+++ b/planetstack/openstack_observer/steps/sync_controller_sites.py
@@ -0,0 +1,63 @@
+import os
+import base64
+from django.db.models import F, Q
+from planetstack.config import Config
+from openstack_observer.openstacksyncstep import OpenStackSyncStep
+from core.models.site import *
+from observer.ansible import *
+
+class SyncControllerSites(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.controller.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'])
+ """
diff --git a/planetstack/openstack_observer/steps/sync_controller_site_deployments.yaml b/planetstack/openstack_observer/steps/sync_controller_sites.yaml
similarity index 100%
rename from planetstack/openstack_observer/steps/sync_controller_site_deployments.yaml
rename to planetstack/openstack_observer/steps/sync_controller_sites.yaml
diff --git a/planetstack/openstack_observer/steps/sync_controller_slices.py b/planetstack/openstack_observer/steps/sync_controller_slices.py
index b1a1f55..4487f3a 100644
--- a/planetstack/openstack_observer/steps/sync_controller_slices.py
+++ b/planetstack/openstack_observer/steps/sync_controller_slices.py
@@ -5,22 +5,22 @@
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.controlleruser import ControllerUser
from util.logger import Logger, logging
from observer.ansible import *
logger = Logger(level=logging.INFO)
class SyncControllerSlices(OpenStackSyncStep):
- provides=[ControllerSlices]
+ 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 @@
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
index 0000000..6a62104
--- /dev/null
+++ b/planetstack/openstack_observer/steps/sync_controller_user_site_privileges.py
@@ -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
index 0000000..4c68a40
--- /dev/null
+++ b/planetstack/openstack_observer/steps/sync_controller_user_slice_privileges.py
@@ -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)
diff --git a/planetstack/openstack_observer/steps/sync_controller_users.py b/planetstack/openstack_observer/steps/sync_controller_users.py
index 1b57b81..0c35047 100644
--- a/planetstack/openstack_observer/steps/sync_controller_users.py
+++ b/planetstack/openstack_observer/steps/sync_controller_users.py
@@ -4,9 +4,9 @@
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
-from core.models.controllerusers import ControllerUsers
+from core.models.controlleruser import ControllerUser
from util.logger import Logger, logging
from observer.ansible import *
@@ -14,15 +14,15 @@
logger = Logger(level=logging.INFO)
class SyncControllerUsers(OpenStackSyncStep):
- provides=[ControllerUsers, User]
+ provides=[ControllerUser, User]
requested_interval=0
def fetch_pending(self, deleted):
if (deleted):
- return ControllerUsers.deleted_objects.all()
+ return ControllerUser.deleted_objects.all()
else:
- return ControllerUsers.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+ 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))
@@ -37,14 +37,14 @@
# We must also check if the user should have the admin role
roles = ['user']
if controller_user.user.is_admin:
- roles.append('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 = SiteDeployments.objects.filter(
+ #ctrl_site_deployments = SiteDeployment.objects.filter(
# site_deployment__site=controller_user.user.site,
# controller=controller_user.controller)
diff --git a/planetstack/openstack_observer/steps/sync_networks.py b/planetstack/openstack_observer/steps/sync_networks.py
index a4e9552..9f36ed5 100644
--- a/planetstack/openstack_observer/steps/sync_networks.py
+++ b/planetstack/openstack_observer/steps/sync_networks.py
@@ -17,8 +17,8 @@
network.save()
def delete_record(self, network):
- controller_networks_deleter = SyncControllerNetworks().delete_record
- for controller_network in ControllerNetworks.objects.filter(network=network):
+ controller_networks_deleter = SyncControllerNetwork().delete_record
+ for controller_network in ControllerNetwork.objects.filter(network=network):
try:
controller_network_deleter(controller_network)
except Exception,e:
diff --git a/planetstack/openstack_observer/steps/sync_nodes.py b/planetstack/openstack_observer/steps/sync_nodes.py
index 9d51073..e2c63bc 100644
--- a/planetstack/openstack_observer/steps/sync_nodes.py
+++ b/planetstack/openstack_observer/steps/sync_nodes.py
@@ -6,7 +6,7 @@
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
from core.models.node import Node
-from core.models.site import SiteDeployments, Controller, SiteDeployments
+from core.models.site import SiteDeployment, Controller
from util.logger import Logger, logging
logger = Logger(level=logging.INFO)
@@ -30,7 +30,7 @@
new_nodes = []
for controller in controllers:
try:
- controller_site_deployments = SiteDeployments.objects.filter(controller=controller)[0]
+ controller_site_deployments = SiteDeployment.objects.filter(controller=controller)[0]
except IndexError:
raise Exception("Controller %s not bound to any site deployments"%controller.name)
diff --git a/planetstack/openstack_observer/steps/sync_site_privileges.py b/planetstack/openstack_observer/steps/sync_site_privileges.py
index 6354d1f..bfc04b3 100644
--- a/planetstack/openstack_observer/steps/sync_site_privileges.py
+++ b/planetstack/openstack_observer/steps/sync_site_privileges.py
@@ -3,9 +3,9 @@
from django.db.models import F, Q
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
-from core.models import User, ControllerUsers, SitePrivilege, SiteDeployments
+from core.models import User, ControllerUser, SitePrivilege, SiteDeployment
-class SyncSitePrivileges(OpenStackSyncStep):
+class SyncSitePrivilege(OpenStackSyncStep):
requested_interval=0
provides=[SitePrivilege]
@@ -18,9 +18,9 @@
def sync_record(self, site_priv):
# sync site privileges at all site controllers
- ctrl_site_deployments = SiteDeployments.objects.filter(site_deployment__site=site_priv.site)
+ ctrl_site_deployments = SiteDeployment.objects.filter(site_deployment__site=site_priv.site)
for ctrl_site_deployment in ctrl_site_deployments:
- controller_users = ControllerUsers.objects.filter(controller=ctrl_site_deployment.controller,
+ controller_users = ControllerUser.objects.filter(controller=ctrl_site_deployment.controller,
user=site_priv.user)
if controller_users:
kuser_id = controller_users[0].kuser_id
diff --git a/planetstack/openstack_observer/steps/sync_sites.py b/planetstack/openstack_observer/steps/sync_sites.py
deleted file mode 100644
index ea7df7e..0000000
--- a/planetstack/openstack_observer/steps/sync_sites.py
+++ /dev/null
@@ -1,25 +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 Site, SiteDeployments, SiteDeployments
-from observer.steps.sync_controller_site_deployments import *
-
-class SyncSites(OpenStackSyncStep):
- provides=[Site]
- requested_interval=0
-
- def sync_record(self, site):
- site.save()
-
- def delete_record(self, site):
- # delete associated controllers site deployments
- site_deployments = SiteDeployments.objects.filter(site=site)
- site_deploy_deleter = SyncControllerSiteDeployments().delete_record
- for site_deployment in site_deployments:
- site_deployment_deleter(site_deployment)
-
-
-
-
diff --git a/planetstack/openstack_observer/steps/sync_slice_memberships.py b/planetstack/openstack_observer/steps/sync_slice_memberships.py
index 600f012..e95c533 100644
--- a/planetstack/openstack_observer/steps/sync_slice_memberships.py
+++ b/planetstack/openstack_observer/steps/sync_slice_memberships.py
@@ -4,7 +4,7 @@
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
from core.models.slice import *
-from core.models.controllerusers import ControllerUsers
+from core.models.controllerusers import ControllerUser
from util.logger import Logger, logging
logger = Logger(level=logging.INFO)
@@ -22,11 +22,11 @@
def sync_record(self, slice_memb):
# sync slice memberships at all slice controllers
logger.info("syncing slice privilege: %s %s" % (slice_memb.slice.name, slice_memb.user.email))
- slice_controllers = ControllerSlices.objects.filter(slice=slice_memb.slice)
+ slice_controllers = ControllerSlice.objects.filter(slice=slice_memb.slice)
for slice_controller in slice_controllers:
if not slice_controller.tenant_id:
continue
- controller_users = ControllerUsers.objects.filter(controller=slice_controller.controller,
+ controller_users = ControllerUser.objects.filter(controller=slice_controller.controller,
user=slice_memb.user)
if controller_users:
kuser_id = controller_users[0].kuser_id
diff --git a/planetstack/openstack_observer/steps/sync_slices.py b/planetstack/openstack_observer/steps/sync_slices.py
index a792b48..99ed44c 100644
--- a/planetstack/openstack_observer/steps/sync_slices.py
+++ b/planetstack/openstack_observer/steps/sync_slices.py
@@ -4,7 +4,7 @@
from django.db.models import F, Q
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.slice import Slice, ControllerSlices
+from core.models.slice import Slice, ControllerSlice
from util.logger import Logger, logging
from observer.steps.sync_controller_slices import *
@@ -15,14 +15,14 @@
requested_interval=0
def sync_record(self, slice):
- for controller_slice in ControllerSlices.objects.filter(slice=slice):
+ for controller_slice in ControllerSlice.objects.filter(slice=slice):
# bump the 'updated' timestamp and trigger observer to update
# slice across all controllers
controller_slice.save()
def delete_record(self, slice):
- controller_slice_deleter = SyncControllerSlices().delete_record
- for controller_slice in ControllerSlices.objects.filter(slice=slice):
+ controller_slice_deleter = SyncControllerSlice().delete_record
+ for controller_slice in ControllerSlice.objects.filter(slice=slice):
try:
controller_slice_deleter(controller_slice)
except Exception,e:
diff --git a/planetstack/openstack_observer/steps/sync_slivers.py b/planetstack/openstack_observer/steps/sync_slivers.py
index 94fd0d5..8adb50c 100644
--- a/planetstack/openstack_observer/steps/sync_slivers.py
+++ b/planetstack/openstack_observer/steps/sync_slivers.py
@@ -4,8 +4,8 @@
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
from core.models.sliver import Sliver
-from core.models.slice import Slice, SlicePrivilege, ControllerSlices
-from core.models.network import Network, NetworkSlice, ControllerNetworks
+from core.models.slice import Slice, SlicePrivilege, ControllerSlice
+from core.models.network import Network, NetworkSlice, ControllerNetwork
from util.logger import Logger, logging
from observer.ansible import *
@@ -45,7 +45,7 @@
nics = []
networks = [ns.network for ns in NetworkSlice.objects.filter(slice=sliver.slice)]
- controller_networks = ControllerNetworks.objects.filter(network__in=networks,
+ controller_networks = ControllerNetwork.objects.filter(network__in=networks,
controller=sliver.node.site_deployment.controller)
for controller_network in controller_networks:
diff --git a/planetstack/openstack_observer/steps/sync_users.py b/planetstack/openstack_observer/steps/sync_users.py
index 3c69cad..4cb1a26 100644
--- a/planetstack/openstack_observer/steps/sync_users.py
+++ b/planetstack/openstack_observer/steps/sync_users.py
@@ -5,20 +5,20 @@
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
from core.models.user import User
-from core.models.controllerusers import ControllerUsers
-from observer.steps.sync_controller_users import SyncControllerUsers
+from core.models.controllerusers import ControllerUser
+from observer.steps.sync_controller_users import SyncControllerUser
class SyncUsers(OpenStackSyncStep):
provides=[User]
requested_interval=0
def sync_record(self, user):
- for controller_user in ControllerUsers.objects.filter(user=user):
+ for controller_user in ControllerUser.objects.filter(user=user):
# bump the 'updated' field so user account are updated across
# controllers.
controller_user.save()
def delete_record(self, user):
- controller_user_deleter = SyncControllerUsers().delete_record
- for controller_user in ControllerUsers.objects.filter(user=user):
+ controller_user_deleter = SyncControllerUser().delete_record
+ for controller_user in ControllerUser.objects.filter(user=user):
controller_user_deleter(controller_user)
diff --git a/planetstack/planetstack-config.py b/planetstack/planetstack-config.py
old mode 100755
new mode 100644
diff --git a/planetstack/redhat/planetstack-backend.service b/planetstack/redhat/planetstack-backend.service
old mode 100755
new mode 100644
diff --git a/planetstack/scripts/opencloud b/planetstack/scripts/opencloud
old mode 100755
new mode 100644
diff --git a/planetstack/syndicate_observer/run.sh b/planetstack/syndicate_observer/run.sh
old mode 100755
new mode 100644
diff --git a/planetstack/syndicate_observer/start.sh b/planetstack/syndicate_observer/start.sh
old mode 100755
new mode 100644
diff --git a/planetstack/syndicate_observer/stop.sh b/planetstack/syndicate_observer/stop.sh
old mode 100755
new mode 100644
diff --git a/planetstack/syndicate_observer/syndicate-backend.py b/planetstack/syndicate_observer/syndicate-backend.py
old mode 100755
new mode 100644
diff --git a/planetstack/tools/diff-opencloud.py b/planetstack/tools/diff-opencloud.py
old mode 100755
new mode 100644
diff --git a/planetstack/tools/openstack-db-cleanup.sh b/planetstack/tools/openstack-db-cleanup.sh
old mode 100755
new mode 100644
diff --git a/planetstack/tools/openstack-healthcheck.py b/planetstack/tools/openstack-healthcheck.py
old mode 100755
new mode 100644
diff --git a/planetstack/tools/ssh-myslice b/planetstack/tools/ssh-myslice
old mode 100755
new mode 100644