blob: b52029c9d80f688b0e98c72c66846ce16bb0b4a5 [file] [log] [blame]
from core.models.plcorebase import *
from models_decl import VSMService_decl
from models_decl import VSMTenant_decl
class VSMService(VSMService_decl):
class Meta:
proxy = True
class VSMTenant(VSMTenant_decl):
class Meta:
proxy = True
def __init__(self, *args, **kwargs):
vsmservice = VSMService.get_service_objects().all()
if vsmservice:
self._meta.get_field(
"provider_service").default = vsmservice[0].id
super(VSMTenant, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
super(VSMTenant, self).save(*args, **kwargs)
# This call needs to happen so that an instance is created for this
# tenant is created in the slice. One instance is created per tenant.
model_policy_vsmtenant(self.pk)
def delete(self, *args, **kwargs):
# Delete the instance that was created for this tenant
self.cleanup_container()
super(VSMTenant, self).delete(*args, **kwargs)
def model_policy_vsmtenant(pk):
# This section of code is atomic to prevent race conditions
with transaction.atomic():
# We find all of the tenants that are waiting to update
tenant = VSMTenant.objects.select_for_update().filter(pk=pk)
if not tenant:
return
# Since this code is atomic it is safe to always use the first tenant
tenant = tenant[0]
tenant.manage_container()