git://git.onelab.eu
/
plstackapi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
45d57b2
)
several bug fixes
author
Tony Mack
<tmack@paris.CS.Princeton.EDU>
Wed, 12 Jun 2013 01:05:06 +0000
(21:05 -0400)
committer
Tony Mack
<tmack@paris.CS.Princeton.EDU>
Wed, 12 Jun 2013 01:05:06 +0000
(21:05 -0400)
planetstack/core/admin.py
patch
|
blob
|
history
planetstack/core/api/slivers.py
patch
|
blob
|
history
planetstack/core/models/slice.py
patch
|
blob
|
history
planetstack/core/models/sliver.py
patch
|
blob
|
history
planetstack/openstack/manager.py
patch
|
blob
|
history
planetstack/openstack/observer.py
patch
|
blob
|
history
diff --git
a/planetstack/core/admin.py
b/planetstack/core/admin.py
index
0c90b9a
..
aafa6e5
100644
(file)
--- a/
planetstack/core/admin.py
+++ b/
planetstack/core/admin.py
@@
-88,6
+88,7
@@
class SitePrivilegeInline(admin.TabularInline):
class SliceMembershipInline(admin.TabularInline):
model = SliceMembership
extra = 0
class SliceMembershipInline(admin.TabularInline):
model = SliceMembership
extra = 0
+ fields = ('user', 'role')
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'slice':
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'slice':
@@
-204,6
+205,17
@@
class SiteAdmin(PlanetStackBaseAdmin):
# hide MyInline in the add view
if obj is None:
continue
# hide MyInline in the add view
if obj is None:
continue
+ if isinstance(inline, SliceInline):
+ inline.model.caller = request.user
+ yield inline.get_formset(request, obj)
+
+ def get_formsets(self, request, obj=None):
+ for inline in self.get_inline_instances(request, obj):
+ # hide MyInline in the add view
+ if obj is None:
+ continue
+ if isinstance(inline, SliverInline):
+ inline.model.caller = request.user
yield inline.get_formset(request, obj)
class SitePrivilegeAdmin(PlanetStackBaseAdmin):
yield inline.get_formset(request, obj)
class SitePrivilegeAdmin(PlanetStackBaseAdmin):
@@
-247,7
+259,7
@@
class SitePrivilegeAdmin(PlanetStackBaseAdmin):
qs = qs.filter(site__in=sites)
return qs
qs = qs.filter(site__in=sites)
return qs
-class SliceAdmin(
OSModel
Admin):
+class SliceAdmin(
PlanetStackBase
Admin):
fields = ['name', 'site', 'serviceClass', 'description', 'slice_url']
list_display = ('name', 'site','serviceClass', 'slice_url')
inlines = [SliverInline, SliceMembershipInline, SliceTagInline]
fields = ['name', 'site', 'serviceClass', 'description', 'slice_url']
list_display = ('name', 'site','serviceClass', 'slice_url')
inlines = [SliverInline, SliceMembershipInline, SliceTagInline]
@@
-280,11
+292,8
@@
class SliceAdmin(OSModelAdmin):
# hide MyInline in the add view
if obj is None:
continue
# hide MyInline in the add view
if obj is None:
continue
- # give inline object access to driver and caller
- auth = request.session.get('auth', {})
- auth['tenant'] = obj.name # meed to connect using slice's tenant
- inline.model.os_manager = OpenStackManager(auth=auth, caller=request.user)
- inline.model.creator = request.user
+ if isinstance(inline, SliverInline):
+ inline.model.caller = request.user
yield inline.get_formset(request, obj)
def get_queryset(self, request):
yield inline.get_formset(request, obj)
def get_queryset(self, request):
@@
-292,7
+301,12
@@
class SliceAdmin(OSModelAdmin):
if request.user.is_superuser:
return qs
# users can only see slices at their site
if request.user.is_superuser:
return qs
# users can only see slices at their site
- return qs.filter(site=request.user.site)
+ return qs.filter(site=request.user.site)
+
+ def save_model(self, request, obj, form, change):
+ # update openstack connection to use this site/tenant
+ obj.caller = request.user
+ obj.save()
class SliceMembershipAdmin(PlanetStackBaseAdmin):
fieldsets = [
class SliceMembershipAdmin(PlanetStackBaseAdmin):
fieldsets = [
@@
-476,7
+490,7
@@
class UserChangeForm(forms.ModelForm):
return self.initial["password"]
return self.initial["password"]
-class UserAdmin(UserAdmin
, OSModelAdmin
):
+class UserAdmin(UserAdmin):
class Meta:
app_label = "core"
class Meta:
app_label = "core"
diff --git
a/planetstack/core/api/slivers.py
b/planetstack/core/api/slivers.py
index
16a7e0b
..
2ce24c7
100644
(file)
--- a/
planetstack/core/api/slivers.py
+++ b/
planetstack/core/api/slivers.py
@@
-3,7
+3,6
@@
from django.contrib.auth import authenticate
from openstack.manager import OpenStackManager
from core.models import Sliver, Slice
from core.api.images import _get_images
from openstack.manager import OpenStackManager
from core.models import Sliver, Slice
from core.api.images import _get_images
-from core.api.keys import _get_keys
from core.api.slices import _get_slices
from core.api.deployment_networks import _get_deployment_networks
from core.api.nodes import _get_nodes
from core.api.slices import _get_slices
from core.api.deployment_networks import _get_deployment_networks
from core.api.nodes import _get_nodes
@@
-26,12
+25,10
@@
def add_sliver(auth, fields):
password=auth.get('password'))
images = _get_images(fields.get('image'))
password=auth.get('password'))
images = _get_images(fields.get('image'))
- keys = _get_keys(fields.get('key'))
slices = _get_slices(fields.get('slice'))
deployment_networks = _get_deployment_networks(fields.get('deploymentNetwork'))
nodes = _get_nodes(fields.get('node'))
if images: fields['image'] = images[0]
slices = _get_slices(fields.get('slice'))
deployment_networks = _get_deployment_networks(fields.get('deploymentNetwork'))
nodes = _get_nodes(fields.get('node'))
if images: fields['image'] = images[0]
- if keys: fields['key'] = keys[0]
if slices: fields['slice'] = slices[0]
if deployment_networks: fields['deploymentNetwork'] = deployment_networks[0]
if nodes: fields['node'] = nodes[0]
if slices: fields['slice'] = slices[0]
if deployment_networks: fields['deploymentNetwork'] = deployment_networks[0]
if nodes: fields['node'] = nodes[0]
diff --git
a/planetstack/core/models/slice.py
b/planetstack/core/models/slice.py
index
d6908a7
..
da9379d
100644
(file)
--- a/
planetstack/core/models/slice.py
+++ b/
planetstack/core/models/slice.py
@@
-22,6
+22,7
@@
class Slice(PlCoreBase):
subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
serviceClass = models.ForeignKey(ServiceClass, related_name = "slices", null=True, default=ServiceClass.get_default)
subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
serviceClass = models.ForeignKey(ServiceClass, related_name = "slices", null=True, default=ServiceClass.get_default)
+ creator = models.ForeignKey(User, related_name='slices', blank=True, null=True)
def __unicode__(self): return u'%s' % (self.name)
def __unicode__(self): return u'%s' % (self.name)
@@
-31,6
+32,8
@@
class Slice(PlCoreBase):
# will fail unless it is allowed. But, we we really don't want it to
# ever save None, so fix it up here.
self.serviceClass = ServiceClass.get_default()
# will fail unless it is allowed. But, we we really don't want it to
# ever save None, so fix it up here.
self.serviceClass = ServiceClass.get_default()
+ if not self.creator and hasattr(self, 'caller'):
+ self.creator = self.caller
super(Slice, self).save(*args, **kwds)
class SliceMembership(PlCoreBase):
super(Slice, self).save(*args, **kwds)
class SliceMembership(PlCoreBase):
diff --git
a/planetstack/core/models/sliver.py
b/planetstack/core/models/sliver.py
index
72ad66d
..
13eb353
100644
(file)
--- a/
planetstack/core/models/sliver.py
+++ b/
planetstack/core/models/sliver.py
@@
-29,15
+29,6
@@
class Sliver(PlCoreBase):
def save(self, *args, **kwds):
if not self.name:
self.name = self.slice.name
def save(self, *args, **kwds):
if not self.name:
self.name = self.slice.name
- if not hasattr(self, 'os_manager'):
- from openstack.manager import OpenStackManager
- setattr(self, 'os_manager', OpenStackManager())
- self.os_manager.save_sliver(self)
+ if not self.creator and hasattr(self, 'caller'):
+ self.creator = self.caller
super(Sliver, self).save(*args, **kwds)
super(Sliver, self).save(*args, **kwds)
-
- def delete(self, *args, **kwds):
- if not hasattr(self, 'os_manager'):
- from openstack.manager import OpenStackManager
- setattr(self, 'os_manager', OpenStackManager())
- self.os_manager.delete_sliver(self)
- super(Sliver, self).delete(*args, **kwds)
diff --git
a/planetstack/openstack/manager.py
b/planetstack/openstack/manager.py
index
f912270
..
ed2769d
100644
(file)
--- a/
planetstack/openstack/manager.py
+++ b/
planetstack/openstack/manager.py
@@
-253,7
+253,8
@@
class OpenStackManager:
def save_sliver(self, sliver):
if not sliver.instance_id:
slice_memberships = SliceMembership.objects.filter(slice=sliver.slice)
def save_sliver(self, sliver):
if not sliver.instance_id:
slice_memberships = SliceMembership.objects.filter(slice=sliver.slice)
- pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key != null]
+ pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key != null]
+ pubkeys.append(sliver.creator.public_key)
instance = self.driver.spawn_instance(name=sliver.name,
key_name = sliver.creator.keyname,
image_id = sliver.image.image_id,
instance = self.driver.spawn_instance(name=sliver.name,
key_name = sliver.creator.keyname,
image_id = sliver.image.image_id,
diff --git
a/planetstack/openstack/observer.py
b/planetstack/openstack/observer.py
index
c0291ab
..
872cf58
100644
(file)
--- a/
planetstack/openstack/observer.py
+++ b/
planetstack/openstack/observer.py
@@
-20,7
+20,7
@@
class OpenStackObserver:
self.sync_tenants()
self.sync_users()
#self.sync_user_tenant_roles()
self.sync_tenants()
self.sync_users()
#self.sync_user_tenant_roles()
-
#
self.sync_slivers()
+ self.sync_slivers()
time.sleep(7)
except:
traceback.print_exc()
time.sleep(7)
except:
traceback.print_exc()
@@
-58,13
+58,16
@@
class OpenStackObserver:
pending_sites = Site.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for site in pending_sites:
self.manager.save_site(site)
pending_sites = Site.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for site in pending_sites:
self.manager.save_site(site)
+ site.save()
site.enacted = datetime.now()
site.save(update_fields=['enacted'])
# get all slices that need to be synced (enacted < updated or enacted is None)
pending_slices = Slice.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for slice in pending_slices:
site.enacted = datetime.now()
site.save(update_fields=['enacted'])
# get all slices that need to be synced (enacted < updated or enacted is None)
pending_slices = Slice.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for slice in pending_slices:
+ self.manager.init_caller(slice.creator, slice.creator.site.login_base)
self.manager.save_slice(slice)
self.manager.save_slice(slice)
+ slice.save()
slice.enacted = datetime.now()
slice.save(update_fields=['enacted'])
slice.enacted = datetime.now()
slice.save(update_fields=['enacted'])
@@
-102,6
+105,7
@@
class OpenStackObserver:
pending_users = User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for user in pending_users:
self.manager.save_user(user)
pending_users = User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for user in pending_users:
self.manager.save_user(user)
+ user.save()
user.enacted = datetime.now()
user.save(update_fields=['enacted'])
user.enacted = datetime.now()
user.save(update_fields=['enacted'])
@@
-130,10
+134,11
@@
class OpenStackObserver:
# get all users that need to be synced (enacted < updated or enacted is None)
pending_slivers = Sliver.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for sliver in pending_slivers:
# get all users that need to be synced (enacted < updated or enacted is None)
pending_slivers = Sliver.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
for sliver in pending_slivers:
- if sliver.creator:
+ if
not sliver.instance_id and
sliver.creator:
# update manager context
# update manager context
- self.manager.init_caller(sliver.creator)
+ self.manager.init_caller(sliver.creator
, sliver.slice.name
)
self.manager.save_sliver(sliver)
self.manager.save_sliver(sliver)
+ sliver.save()
sliver.enacted = datetime.now()
sliver.save(update_fields=['enacted'])
sliver.enacted = datetime.now()
sliver.save(update_fields=['enacted'])