Skip to content
Snippets Groups Projects
Commit 566dc0ac authored by David Schmitz's avatar David Schmitz
Browse files

FoD rule REST API: work on full deletion possibility

parent a9ba7f5e
No related branches found
No related tags found
No related merge requests found
......@@ -90,6 +90,7 @@ ROUTE_STATES = (
("OUTOFSYNC", "OUTOFSYNC"),
("INACTIVE", "INACTIVE"),
("ADMININACTIVE", "ADMININACTIVE"),
("INACTIVE_TODELETE", "INACTIVE_TODELETE"),
)
......@@ -310,6 +311,7 @@ class Route(models.Model):
def commit_delete(self, *args, **kwargs):
logger.info("model::commit_delete(): route="+str(self)+", kwargs="+str(kwargs))
username = None
reason_text = ''
reason = ''
......@@ -535,7 +537,7 @@ class Route(models.Model):
self.status = "ACTIVE"
self.save()
found = True
if self.status == "ADMININACTIVE" or self.status == "INACTIVE" or self.status == "EXPIRED":
if self.status == "ADMININACTIVE" or self.status == "INACTIVE" or self.status == "INACTIVE_TODELETE" or self.status == "EXPIRED":
found = True
return found
......@@ -630,7 +632,7 @@ class Route(models.Model):
@property
def days_to_expire(self):
if self.status not in ['EXPIRED', 'ADMININACTIVE', 'ERROR', 'INACTIVE']:
if self.status not in ['EXPIRED', 'ADMININACTIVE', 'ERROR', 'INACTIVE', 'INACTIVE_TODELETE']:
expiration_days = (self.expires - datetime.date.today()).days
if expiration_days < settings.EXPIRATION_NOTIFY_DAYS:
return "%s" %expiration_days
......
......@@ -138,43 +138,49 @@ def edit(route, callback=None):
@task(ignore_result=True)
def delete(route, **kwargs):
logger.info("tasks::delete(): called")
logger.info("tasks::delete(): called route="+str(route))
logger.info("tasks::delete(): called route.dir="+str(dir(route)))
logger.info("tasks::delete(): called kwargs="+str(kwargs))
initial_status = route.status
logger.info("tasks::delete(): called initial_status="+str(initial_status))
try:
applier = PR.Applier(route_object=route)
commit, response = applier.apply(operation="delete")
reason_text = ''
logger.info("tasks::delete(): called commit="+str(commit))
if commit:
status = "INACTIVE"
if "reason" in kwargs and kwargs['reason'] == 'EXPIRED':
status = 'EXPIRED'
reason_text = " Reason: %s " % status
else:
status = 'DELETED'
route.status = status
route.response = response
if route.status == "DELETED": # special new case for fully deleting a rule via REST API
status = "INACTIVE"
if "reason" in kwargs and kwargs['reason'] == 'EXPIRED':
status = 'EXPIRED'
reason_text = " Reason: %s " % status
else:
status = "ERROR"
if commit and initial_status == "INACTIVE_TODELETE": # special new case for fully deleting a rule via REST API
route.delete()
msg1 = "[%s] Fully deleted rule : %s%s- Result %s" % (route.applier, route.name, reason_text, response)
logger.info("tasks::delete(): DELETED msg="+msg1)
announce(msg1, route.applier, route)
else:
else:
route.status = status
route.response = response
route.save()
msg1 = "[%s] Suspending rule : %s%s- Result %s" % (route.applier, route.name, reason_text, response)
logger.info("tasks::delete(): msg="+msg1)
announce(msg1 , route.applier, route)
try:
try:
snmp_add_initial_zero_value.delay(str(route.id), False)
except Exception as e:
except Exception as e:
logger.error("tasks::delete(): route="+str(route)+", INACTIVE, add_null_value failed: "+str(e))
else:
status = "ERROR"
route.status = status
route.response = response
route.save()
msg1 = "[%s] Suspending rule : %s%s- Result %s" % (route.applier, route.name, reason_text, response)
logger.info("tasks::delete(): ERROR msg="+msg1)
announce(msg1, route.applier, route)
# else:
# status = "ERROR"
# route.status = status
# route.response = response
# route.save()
# msg1 = "[%s] Suspending rule : %s%s- Result %s" % (route.applier, route.name, reason_text, response)
# logger.info("tasks::delete(): ERROR msg="+msg1)
# announce(msg1, route.applier, route)
except TimeLimitExceeded:
route.status = "ERROR"
route.response = "Task timeout"
......
......@@ -41,7 +41,7 @@ def clean_status(status):
:rtype: str
"""
allowed_states = ['ACTIVE', 'INACTIVE']
allowed_states = ['ACTIVE', 'INACTIVE', 'INACTIVE_TODELETE']
if status not in allowed_states:
return _('Invalid status value. You are allowed to use "{}".'.format(
......
......@@ -170,6 +170,16 @@ class RouteViewSet(viewsets.ModelViewSet):
if serializer.is_valid():
new_status = serializer.object.status
super(RouteViewSet, self).update(request, pk, partial=partial)
logger.info("RouteViewSet::update(): called request="+str(request))
if request.META.has_key('HTTP_X_METHODOVERRIDE'):
method_overriden = request.META['HTTP_X_METHODOVERRIDE']
logger.info("RouteViewSet::update(): HTTP_X_METHODOVERRIDE="+str(method_overriden))
if method_overriden == "DELETE":
logger.info("RouteViewSet::update(): redirecting to delete with full delete on")
obj.status = "INACTIVE_TODELETE"
return self.delete(obj)
if old_status == 'ACTIVE':
work_on_active_object(obj, new_status)
elif old_status in ['INACTIVE', 'ERROR']:
......@@ -198,13 +208,17 @@ class RouteViewSet(viewsets.ModelViewSet):
def helper_override_user(self, obj):
#if self.request.user.is_superuser and obj.applier!=None:
from django.contrib.auth.models import User
if self.request.user.is_superuser and self.request.POST["applier"]!=None:
os.write(4, "debug requesta1 "+str(self.request.POST["applier"])+"\n")
obj.applier = User.objects.get(username=self.request.POST["applier"])
applier_speced = None
if "applier" in self.request.POST:
applier_speced = self.request.POST["applier"]
if self.request.user.is_superuser and applier_speced!=None:
os.write(4, "debug requesta1 "+str(applier_speced)+"\n")
obj.applier = User.objects.get(username=applier_speced)
elif self.request.user.is_superuser:
os.write(4, "debug requesta2 "+str(self.request.POST["applier"])+"\n")
os.write(4, "debug requesta2 "+str(applier_speced)+"\n")
#obj.applier = self.request.user
obj.applier = User.objects.get(username='tomas.jra2t6')
#obj.applier = User.objects.get(username='tomas.jra2t6')
obj.applier = User.objects.get(username='david.jra2t6')
#raise PermissionDenied('Is superuser')
#obj.applier = User.objects.get(id='tomas.jra2t6')
#logger.info("debug request "+str(self.request))
......@@ -216,7 +230,7 @@ class RouteViewSet(viewsets.ModelViewSet):
#os.write(4, "debug requestd "+str(dir(self.request))+"\n")
#os.write(4, "debug requestd "+str(type(self.request.POST))+"\n")
#os.write(4, "debug requestd "+str(dir(self.request.POST))+"\n")
#os.write(4, "debug requesta "+str(self.request.POST["applier"])+"\n")
#os.write(4, "debug requesta "+str(applier_speced)+"\n")
#obj.comments = obj.comments+" "+str(os.getpid())
else:
#raise PermissionDenied('Is not superuser')
......@@ -227,8 +241,9 @@ class RouteViewSet(viewsets.ModelViewSet):
obj.commit_add()
def pre_delete(self, obj):
logger.info("RouteViewSet::pre_delete(): called "+str(self)+", obj="+str(obj))
obj.commit_delete()
logger.info("RouteViewSet::pre_delete(): returning "+str(self)+", obj="+str(obj))
class PortViewSet(viewsets.ModelViewSet):
queryset = MatchPort.objects.all()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment