Allow labs to retirieve and update some host information in the api 41/67241/1
authorParker Berberian <pberberian@iol.unh.edu>
Tue, 12 Mar 2019 14:28:48 +0000 (10:28 -0400)
committerParker Berberian <pberberian@iol.unh.edu>
Tue, 12 Mar 2019 14:28:48 +0000 (10:28 -0400)
Change-Id: Ib0682141351f7789c50d98a992ab166c2f033f4b
Signed-off-by: Parker Berberian <pberberian@iol.unh.edu>
dashboard/src/api/models.py
dashboard/src/api/urls.py
dashboard/src/api/views.py

index 7109bbe..b35adf2 100644 (file)
@@ -116,6 +116,22 @@ class LabManager(object):
         inventory['host_types'] = self.serialize_host_profiles(profiles)
         return inventory
 
+    def get_host(self, hostname):
+        host = get_object_or_404(Host, labid=hostname, lab=self.lab)
+        return {
+            "booked": host.booked,
+            "working": host.working,
+            "type": host.profile.name
+        }
+
+    def update_host(self, hostname, data):
+        host = get_object_or_404(Host, labid=hostname, lab=self.lab)
+        if "working" in data:
+            working = data['working'] == "true"
+            host.working = working
+        host.save()
+        return self.get_host(hostname)
+
     def get_status(self):
         return {"status": self.lab.status}
 
index 33a8289..d18a04d 100644 (file)
@@ -40,6 +40,7 @@ from api.views import (
     current_jobs,
     done_jobs,
     update_host_bmc,
+    lab_host,
     GenerateTokenView
 )
 
@@ -52,6 +53,7 @@ urlpatterns = [
     path('labs/<slug:lab_name>/profile', lab_profile),
     path('labs/<slug:lab_name>/status', lab_status),
     path('labs/<slug:lab_name>/inventory', lab_inventory),
+    path('labs/<slug:lab_name>/hosts/<slug:host_id>', lab_host),
     path('labs/<slug:lab_name>/hosts/<slug:host_id>/bmc', update_host_bmc),
     path('labs/<slug:lab_name>/jobs/<int:job_id>', specific_job),
     path('labs/<slug:lab_name>/jobs/<int:job_id>/<slug:task_id>', specific_task),
index 90f87d9..a56dcfe 100644 (file)
@@ -54,6 +54,16 @@ def lab_inventory(request, lab_name=""):
     return JsonResponse(lab_manager.get_inventory(), safe=False)
 
 
+@csrf_exempt
+def lab_host(request, lab_name="", host_id=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    if request.method == "GET":
+        return JsonResponse(lab_manager.get_host(host_id), safe=False)
+    if request.method == "POST":
+        return JsonResponse(lab_manager.update_host(host_id, request.POST), safe=False)
+
+
 def lab_status(request, lab_name=""):
     lab_token = request.META.get('HTTP_AUTH_TOKEN')
     lab_manager = LabManagerTracker.get(lab_name, lab_token)
@@ -62,6 +72,7 @@ def lab_status(request, lab_name=""):
     return JsonResponse(lab_manager.get_status(), safe=False)
 
 
+@csrf_exempt
 def update_host_bmc(request, lab_name="", host_id=""):
     lab_token = request.META.get('HTTP_AUTH_TOKEN')
     lab_manager = LabManagerTracker.get(lab_name, lab_token)
@@ -104,6 +115,7 @@ def specific_task(request, lab_name="", job_id="", task_id=""):
         return JsonResponse(get_task(task_id).config.get_delta())
 
 
+@csrf_exempt
 def specific_job(request, lab_name="", job_id=""):
     lab_token = request.META.get('HTTP_AUTH_TOKEN')
     lab_manager = LabManagerTracker.get(lab_name, lab_token)