From d83ca3f27dda6c5bf1f1475ab66a676f60a19a11 Mon Sep 17 00:00:00 2001 From: Parker Berberian Date: Wed, 27 Feb 2019 11:52:21 -0500 Subject: Update IPMI handling provides a way for the lab to report IPMI info to the dashboard. Necessary to allow the dashboard to fully generate a PDF for OPNFV deploy Change-Id: Ieef7a93e28b155ee90f3ffd3cfeedace332a6641 Signed-off-by: Parker Berberian --- dashboard/src/api/models.py | 30 +++++++++++++++++++++++++++++- dashboard/src/api/urls.py | 2 ++ dashboard/src/api/views.py | 11 +++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) (limited to 'dashboard/src/api') diff --git a/dashboard/src/api/models.py b/dashboard/src/api/models.py index 30f0f75..7109bbe 100644 --- a/dashboard/src/api/models.py +++ b/dashboard/src/api/models.py @@ -11,6 +11,7 @@ from django.contrib.auth.models import User from django.db import models from django.core.exceptions import PermissionDenied +from django.shortcuts import get_object_or_404 import json import uuid @@ -21,7 +22,8 @@ from resource_inventory.models import ( HostProfile, Host, Image, - Interface + Interface, + RemoteInfo ) @@ -60,6 +62,32 @@ class LabManager(object): def __init__(self, lab): self.lab = lab + def update_host_remote_info(self, data, host_id): + host = get_object_or_404(Host, labid=host_id, lab=self.lab) + info = {} + try: + info['address'] = data['address'] + info['mac_address'] = data['mac_address'] + info['password'] = data['password'] + info['user'] = data['user'] + info['type'] = data['type'] + info['versions'] = json.dumps(data['versions']) + except Exception as e: + return {"error": "invalid arguement: " + str(e)} + remote_info = host.remote_management + if "default" in remote_info.mac_address: + remote_info = RemoteInfo() + remote_info.address = info['address'] + remote_info.mac_address = info['mac_address'] + remote_info.password = info['password'] + remote_info.user = info['user'] + remote_info.type = info['type'] + remote_info.versions = info['versions'] + remote_info.save() + host.remote_management = remote_info + host.save() + return {"status": "success"} + def get_profile(self): prof = {} prof['name'] = self.lab.name diff --git a/dashboard/src/api/urls.py b/dashboard/src/api/urls.py index 50cc6ac..33a8289 100644 --- a/dashboard/src/api/urls.py +++ b/dashboard/src/api/urls.py @@ -39,6 +39,7 @@ from api.views import ( new_jobs, current_jobs, done_jobs, + update_host_bmc, GenerateTokenView ) @@ -51,6 +52,7 @@ urlpatterns = [ path('labs//profile', lab_profile), path('labs//status', lab_status), path('labs//inventory', lab_inventory), + path('labs//hosts//bmc', update_host_bmc), path('labs//jobs/', specific_job), path('labs//jobs//', specific_task), path('labs//jobs/new', new_jobs), diff --git a/dashboard/src/api/views.py b/dashboard/src/api/views.py index c72c85c..90f87d9 100644 --- a/dashboard/src/api/views.py +++ b/dashboard/src/api/views.py @@ -62,6 +62,17 @@ def lab_status(request, lab_name=""): return JsonResponse(lab_manager.get_status(), safe=False) +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) + if request.method == "POST": + # update / create RemoteInfo for host + return JsonResponse( + lab_manager.update_host_remote_info(request.POST, host_id), + safe=False + ) + + def lab_profile(request, lab_name=""): lab_token = request.META.get('HTTP_AUTH_TOKEN') lab_manager = LabManagerTracker.get(lab_name, lab_token) -- cgit 1.2.3-korg