summaryrefslogtreecommitdiff
path: root/src/caas/views.py
diff options
context:
space:
mode:
authorckonstanski <kostcarl@isu.edu>2026-07-30 18:17:14 -0600
committerckonstanski <kostcarl@isu.edu>2026-07-30 18:17:14 -0600
commit640ff61422bc0ee3966941b93d9889ddbbd38d77 (patch)
treeabf1c08f5d38ee53ec8b29dc4f425722517505e6 /src/caas/views.py
parent22dae02a86c1fce71091bfa5289cf99abba1b217 (diff)
more filesHEADmaster
Diffstat (limited to 'src/caas/views.py')
-rw-r--r--src/caas/views.py713
1 files changed, 712 insertions, 1 deletions
diff --git a/src/caas/views.py b/src/caas/views.py
index 91ea44a..049d9e4 100644
--- a/src/caas/views.py
+++ b/src/caas/views.py
@@ -1,3 +1,714 @@
from django.shortcuts import render
+from django.conf import settings
+from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
+from django.views.decorators.csrf import csrf_exempt
+from .forms import CiqUploadForm, CiqUpload2Form, CiqAssignOrphanSubcloudsForm, \
+ PasswordUploadForm, SerialNumberForm, DnsForm, \
+ MacAddressForm, AdminPasswordForm, NicFirmwareVersionForm, PushButtonForm, \
+ PlaybookReportForm, \
+ NicFirmwareUpgradeForm, NicFirmwareUpgradeNowForm, \
+ WrInstallForm, WrInstallNowForm, \
+ AutoremediateForm, WrRemediateForm, \
+ WrRebootForm, MockWrRebootForm, SubcloudForm
+ # QueueCustomForm, \
+from .services.ciqservice import CiqService
+from .services.passwordservice import PasswordService
+from .services.icingaservice import IcingaService
+from .services.bmcservice import BmcService
+from .services.macaddressservice import MacAddressService
+from .services.dnsservice import DnsService
+from .services.firmwareservice import FirmwareService
+from .services.wrservice import WrService
+from .services.patchservice import PatchService
+from .services.playbookreportservice import PlaybookReportService
+from .services.icingapollservice import IcingaPollService
+from .services.nicfirmwareversionservice import NicFirmwareVersionService
+from .services.nicfirmwareupgradenowservice import NicFirmwareUpgradeNowService
+from .services.wrinstallnowservice import WrInstallNowService
+from .services.subcloudservice import SubcloudService
+import logging
-# Create your views here.
+
+logger = logging.getLogger("caas")
+
+
+def index(request):
+ return HttpResponse("Hello world")
+
+
+def count(request, count):
+ data = {
+ "name": "Vitor",
+ "location": "Finland",
+ "is_active": True,
+ "count": count
+ }
+ return JsonResponse(data)
+
+
+@csrf_exempt
+def passwords(request):
+ if request.method == "POST":
+ form = PasswordUploadForm(request.POST, request.FILES)
+ if form.is_valid():
+ PasswordService.import_password_data(request.FILES["filehandle"])
+ return HttpResponseRedirect("success/")
+ else:
+ form = PasswordUploadForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "passwords.xml", context)
+
+
+def passwords_success(request):
+ return render(request, "passwords_success.xml")
+
+
+@csrf_exempt
+def ciq(request):
+ if request.method == "POST":
+ form = CiqUploadForm(request.POST, request.FILES)
+ if form.is_valid():
+ CiqService.import_ciq_data(request.FILES["filehandle"], form.cleaned_data["assign_parent"])
+ # TODO: opstracker for lat, long, etc
+ icinga = IcingaService(settings.ANSIBLE["icinga"]["target"],
+ settings.ANSIBLE["icinga"]["git"],
+ settings.ANSIBLE["icinga"]["branch"],
+ settings.ANSIBLE["icinga"]["playbook"],
+ settings.ANSIBLE["icinga"]["zmq"])
+ icinga.deploy()
+ return HttpResponseRedirect("success/")
+ else:
+ form = CiqUploadForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "ciq.xml", context)
+
+
+@csrf_exempt
+def mockciq(request):
+ if request.method == "POST":
+ form = PushButtonForm(request.POST)
+ if form.is_valid():
+ icinga = IcingaService(settings.ANSIBLE["icinga"]["target"],
+ settings.ANSIBLE["icinga"]["git"],
+ settings.ANSIBLE["icinga"]["branch"],
+ settings.ANSIBLE["icinga"]["playbook"],
+ settings.ANSIBLE["icinga"]["zmq"])
+ icinga.deploy(mockciq = settings.MOCKCIQ)
+ return JsonResponse({"status": "OK"})
+ else:
+ form = PushButtonForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "pushbutton.xml", context)
+
+
+def ciq_success(request):
+ return render(request, "ciq_success.xml")
+
+
+@csrf_exempt
+def serialnumber(request):
+ if request.method == "POST":
+ logger.debug("POST received")
+ form = SerialNumberForm(request.POST)
+ if form.is_valid():
+ logger.debug("%s POST received" % form.cleaned_data["ilo_host_address"])
+ if not PasswordService.is_server_linked_to_blade(ilo_host_address = form.cleaned_data["ilo_host_address"]):
+ if not settings.MOCKCIQ:
+ link_status = PasswordService.link_server_to_blade(vendor_name = form.cleaned_data["vendor"],
+ serial_number = form.cleaned_data["serial_number"],
+ ilo_host_address = form.cleaned_data["ilo_host_address"])
+ if link_status is None:
+ logger.error("%s Error linking server to blade!" % form.cleaned_data["ilo_host_address"])
+ return JsonResponse({"status": "Error linking server to blade!"})
+
+ PasswordService.create_bmc_admin_password(serial_number = form.cleaned_data["serial_number"])
+ dns = DnsService(form.cleaned_data["ilo_host_address"],
+ settings.ANSIBLE["dns"]["git"],
+ settings.ANSIBLE["dns"]["branch"],
+ settings.ANSIBLE["dns"]["playbook"],
+ settings.ANSIBLE["dns"]["zmq"])
+ rc = dns.deploy()
+ if rc != 0:
+ errmsg = "%s dns deploy failed" % form.cleaned_data["ilo_host_address"]
+ logger.error(errmsg)
+ return JsonResponse({"status": errmsg})
+
+ # don't run bmc automation against central controllers
+ if not PasswordService.central_server_p(form.cleaned_data["ilo_host_address"]):
+ if settings.ENABLE_BMC:
+ bmc = BmcService(form.cleaned_data["ilo_host_address"],
+ settings.ANSIBLE["bmc"]["git"],
+ settings.ANSIBLE["bmc"]["branch"],
+ settings.ANSIBLE["bmc"]["playbook"],
+ settings.ANSIBLE["bmc"]["zmq"])
+ rc = bmc.deploy()
+ if rc != 0:
+ logger.error("%s bmc deploy failed" % form.cleaned_data["ilo_host_address"])
+ return JsonResponse({"status": "%s bmc deploy failed!" % form.cleaned_data["ilo_host_address"]})
+ else:
+ icingapoll = IcingaPollService(form.cleaned_data["ilo_host_address"],
+ settings.ANSIBLE["icinga_poll"]["git"],
+ settings.ANSIBLE["icinga_poll"]["branch"],
+ settings.ANSIBLE["icinga_poll"]["playbook"],
+ settings.ANSIBLE["icinga_poll"]["zmq"],
+ "adminpassword")
+ rc = icingapoll.deploy()
+ if rc != 0:
+ logger.error("%s icingapoll deploy failed" % form.cleaned_data["ilo_host_address"])
+ return JsonResponse({"status": "%s icingapoll deploy failed!" % form.cleaned_data["ilo_host_address"]})
+ else:
+ logger.debug("%s server already linked to blade" % form.cleaned_data["ilo_host_address"])
+
+ return JsonResponse({"status": "OK"})
+ else:
+ errmsg = "%s Error linking server to blade: invalid form" % form.cleaned_data["ilo_host_address"]
+ logger.error(errmsg)
+ raise Exception(errmsg)
+ else:
+ form = SerialNumberForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "serialnumber.xml", context)
+
+
+@csrf_exempt
+def autoremediate(request):
+ if request.method == "POST":
+ form = AutoremediateForm(request.POST)
+ if form.is_valid():
+ ilo_host_address_list = form.cleaned_data["ilo_host_address_list"]
+ for ilo_host_address in list(ilo_host_address_list.split()):
+ linking_data = PasswordService.get_server_link_data(ilo_host_address)
+ if linking_data is None:
+ logger.error("Error PasswordService.get_server_link_data! ilo_host_address=%s" % ilo_host_address)
+ continue
+
+ PasswordService.create_bmc_admin_password(serial_number = linking_data["serial_number"])
+ dns = DnsService(linking_data["ilo_host_address"],
+ settings.ANSIBLE["dns"]["git"],
+ settings.ANSIBLE["dns"]["branch"],
+ settings.ANSIBLE["dns"]["playbook"],
+ settings.ANSIBLE["dns"]["zmq"])
+ rc = dns.deploy()
+ if rc != 0:
+ errmsg = "%s dns deploy failed" % form.cleaned_data["ilo_host_address"]
+ logger.error(errmsg)
+ return JsonResponse({"status": errmsg})
+
+ # don't run bmc automation against central controllers
+ if not PasswordService.central_server_p(ilo_host_address):
+ if settings.ENABLE_BMC:
+ bmc = BmcService(linking_data["ilo_host_address"],
+ settings.ANSIBLE["bmc"]["git"],
+ settings.ANSIBLE["bmc"]["branch"],
+ settings.ANSIBLE["bmc"]["playbook"],
+ settings.ANSIBLE["bmc"]["zmq"])
+ rc = bmc.deploy()
+ if rc != 0:
+ logger.error("%s bmc deploy failed" % form.cleaned_data["ilo_host_address"])
+ return JsonResponse({"status": "%s bmc deploy failed!" % form.cleaned_data["ilo_host_address"]})
+ else:
+ icingapoll = IcingaPollService(linking_data["ilo_host_address"],
+ settings.ANSIBLE["icinga_poll"]["git"],
+ settings.ANSIBLE["icinga_poll"]["branch"],
+ settings.ANSIBLE["icinga_poll"]["playbook"],
+ settings.ANSIBLE["icinga_poll"]["zmq"],
+ "adminpassword")
+ rc = icingapoll.deploy()
+ if rc != 0:
+ logger.error("%s dicingapollns deploy failed" % form.cleaned_data["ilo_host_address"])
+ return JsonResponse({"status": "%s icingapoll deploy failed!" % form.cleaned_data["ilo_host_address"]})
+
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error linking server to blade: invalid form")
+ else:
+ form = AutoremediateForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "autoremediate.xml", context)
+
+
+@csrf_exempt
+def dns(request):
+ if request.method == "POST":
+ form = DnsForm(request.POST)
+ if form.is_valid():
+ dns = DnsService(form.cleaned_data["ilo_host_address"],
+ settings.ANSIBLE["dns"]["git"],
+ settings.ANSIBLE["dns"]["branch"],
+ settings.ANSIBLE["dns"]["playbook"],
+ settings.ANSIBLE["dns"]["zmq"])
+ rc = dns.deploy()
+ if rc != 0:
+ errmsg = "%s dns deploy failed" % form.cleaned_data["ilo_host_address"]
+ logger.error(errmsg)
+ return JsonResponse({"status": errmsg})
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error processing DNS: form input is invalid.")
+ else:
+ form = DnsForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "dns.xml", context)
+
+
+# @csrf_exempt
+# def queuecustom(request):
+# if request.method == "POST":
+# form = QueueCustomForm(request.POST)
+# if form.is_valid():
+# key = form.cleaned_data["key"]
+# playbook_key = form.cleaned_data["playbook_key"]
+# ansible = AnsibleService(key,
+# form.cleaned_data["target"],
+# settings.ANSIBLE[key]["git"],
+# settings.ANSIBLE[key]["branch"],
+# settings.ANSIBLE[key][playbook_key],
+# settings.ANSIBLE[key]["zmq"])
+# if len(form.cleaned_data["cluster_name"]) > 0:
+# extra_args = {"cluster-name": form.cleaned_data["cluster_name"]}
+# else:
+# extra_args = {}
+# ansible.run_playbook(extra_args = extra_args)
+# return JsonResponse({"status": "OK"})
+# else:
+# raise Exception("Error processing queuecustom: form input is invalid.")
+# else:
+# form = QueueCustomForm()
+# context = {
+# "title": "Far-Edge Ops Middleware",
+# "form": form
+# }
+# return render(request, "queuecustom.xml", context)
+
+
+@csrf_exempt
+def macaddress(request):
+ if request.method == "POST":
+ form = MacAddressForm(request.POST)
+ if form.is_valid():
+ MacAddressService.set_server_mac_address(ilo_host_address = form.cleaned_data["ilo_host_address"],
+ pxe_mac_address = form.cleaned_data["pxe_mac_address"],
+ intel_nic_firmware_version = form.cleaned_data["intel_nic_firmware_version"])
+
+ icinga = IcingaService(settings.ANSIBLE["icinga"]["target"],
+ settings.ANSIBLE["icinga"]["git"],
+ settings.ANSIBLE["icinga"]["branch"],
+ settings.ANSIBLE["icinga"]["playbook"],
+ settings.ANSIBLE["icinga"]["zmq"])
+ rc = icinga.deploy()
+ if rc != 0:
+ logger.error("%s icinga deploy failed" % form.cleaned_data["ilo_host_address"])
+ return JsonResponse({"status": "%s icinga deploy failed!" % form.cleaned_data["ilo_host_address"]})
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error processing macaddress: form input is invalid.")
+ else:
+ form = MacAddressForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "macaddress.xml", context)
+
+
+@csrf_exempt
+def adminpassword(request):
+ if request.method == "POST":
+ form = AdminPasswordForm(request.POST)
+ if form.is_valid():
+ ilo_host_address = form.cleaned_data["ilo_host_address"]
+ icinga_poll_status = form.cleaned_data["icinga_poll_status"]
+ if icinga_poll_status == "OK":
+ firmware = FirmwareService(ilo_host_address,
+ settings.ANSIBLE["nic"]["git"],
+ settings.ANSIBLE["nic"]["branch"],
+ settings.ANSIBLE["nic"]["playbook"],
+ settings.ANSIBLE["nic"]["zmq"])
+ firmware.schedule_upgrade()
+ nicfirmwareupgradenow = NicFirmwareUpgradeNowService(ilo_host_address,
+ settings.ANSIBLE["nic"]["git"],
+ settings.ANSIBLE["nic"]["branch"],
+ settings.ANSIBLE["nic"]["playbook"],
+ settings.ANSIBLE["nic"]["zmq"])
+ nicfirmwareupgradenow.deploy()
+ wr = WrService(ilo_host_address,
+ settings.ANSIBLE["wr"]["git"],
+ settings.ANSIBLE["wr"]["branch"],
+ settings.ANSIBLE["wr"]["playbook"],
+ settings.ANSIBLE["wr"]["zmq"])
+ wr.schedule_install()
+ # The firmware pipeline will launch the wr install
+ return JsonResponse({"status": "OK"})
+ else:
+ return JsonResponse({"status": "NO-OP: icinga_poll status NOT_OK"})
+ else:
+ raise Exception("Error changing BMC administrator password: form is invalid")
+ else:
+ form = AdminPasswordForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "adminpassword.xml", context)
+
+
+@csrf_exempt
+def nicfirmwareversion(request):
+ if request.method == "POST":
+ form = NicFirmwareVersionForm(request.POST)
+ if form.is_valid():
+ NicFirmwareVersionService.set_server_nic_firmware_version(ilo_host_address = form.cleaned_data["ilo_host_address"],
+ intel_nic_firmware_version = form.cleaned_data["nic_firmware_version"])
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error processing macaddress: form input is invalid.")
+ else:
+ form = NicFirmwareVersionForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "nicfirmwareversion.xml", context)
+
+
+@csrf_exempt
+def nicfirmwareupgrade(request):
+ if request.method == "POST":
+ form = NicFirmwareUpgradeForm(request.POST)
+ if form.is_valid():
+ ilo_host_address_list = form.cleaned_data["ilo_host_address_list"]
+ for ilo_host_address in list(ilo_host_address_list.split()):
+ icingapoll = IcingaPollService(ilo_host_address,
+ settings.ANSIBLE["icinga_poll"]["git"],
+ settings.ANSIBLE["icinga_poll"]["branch"],
+ settings.ANSIBLE["icinga_poll"]["playbook"],
+ settings.ANSIBLE["icinga_poll"]["zmq"],
+ "nicfirmwareupgradenow")
+ icingapoll.deploy()
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error processing nicfirmwareupgrade: form input is invalid.")
+ else:
+ form = NicFirmwareUpgradeForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "nicfirmwareupgrade.xml", context)
+
+
+@csrf_exempt
+def nicfirmwareupgradenow(request):
+ if request.method == "POST":
+ form = NicFirmwareUpgradeNowForm(request.POST)
+ if form.is_valid():
+ ilo_host_address = form.cleaned_data["ilo_host_address"]
+ icinga_poll_status = form.cleaned_data["icinga_poll_status"]
+ if icinga_poll_status == "OK":
+ firmware = FirmwareService(ilo_host_address,
+ settings.ANSIBLE["nic"]["git"],
+ settings.ANSIBLE["nic"]["branch"],
+ settings.ANSIBLE["nic"]["playbook"],
+ settings.ANSIBLE["nic"]["zmq"])
+ firmware.schedule_upgrade()
+
+ wr = WrService(ilo_host_address,
+ settings.ANSIBLE["wr"]["git"],
+ settings.ANSIBLE["wr"]["branch"],
+ settings.ANSIBLE["wr"]["playbook"],
+ settings.ANSIBLE["wr"]["zmq"])
+ wr.schedule_install()
+
+ nicfirmwareupgradenow = NicFirmwareUpgradeNowService(ilo_host_address,
+ settings.ANSIBLE["nic"]["git"],
+ settings.ANSIBLE["nic"]["branch"],
+ settings.ANSIBLE["nic"]["playbook"],
+ settings.ANSIBLE["nic"]["zmq"])
+ nicfirmwareupgradenow.deploy()
+ return JsonResponse({"status": "OK"})
+ else:
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error processing nicfirmwareupgradenow: form input is invalid.")
+ else:
+ form = NicFirmwareUpgradeNowForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "nicfirmwareupgradenow.xml", context)
+
+@csrf_exempt
+def wrinstall(request):
+ if request.method == "POST":
+ form = WrInstallForm(request.POST)
+ if form.is_valid():
+ ilo_host_address_list = form.cleaned_data["ilo_host_address_list"]
+ for ilo_host_address in list(ilo_host_address_list.split()):
+ icingapoll = IcingaPollService(ilo_host_address,
+ settings.ANSIBLE["icinga_poll"]["git"],
+ settings.ANSIBLE["icinga_poll"]["branch"],
+ settings.ANSIBLE["icinga_poll"]["playbook"],
+ settings.ANSIBLE["icinga_poll"]["zmq"],
+ "wrinstallnow")
+ icingapoll.deploy()
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error processing wrinstall: form input is invalid.")
+ else:
+ form = WrInstallForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "wrinstall.xml", context)
+
+@csrf_exempt
+def wrinstallnow(request):
+ if request.method == "POST":
+ form = WrInstallNowForm(request.POST)
+ if form.is_valid():
+ ilo_host_address = form.cleaned_data["ilo_host_address"]
+ icinga_poll_status = form.cleaned_data["icinga_poll_status"]
+ if icinga_poll_status == "OK":
+ wrinstallnow = WrInstallNowService("wr",
+ ilo_host_address,
+ settings.ANSIBLE["wr"]["git"],
+ settings.ANSIBLE["wr"]["branch"],
+ settings.ANSIBLE["wr"]["playbook"],
+ settings.ANSIBLE["wr"]["zmq"])
+ wrinstallnow.deploy()
+ return JsonResponse({"status": "OK"})
+ else:
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error processing wrinstallnow: form input is invalid.")
+ else:
+ form = WrInstallNowForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "wrinstallnow.xml", context)
+
+
+@csrf_exempt
+def nicfirmwareupgradebatch(request):
+ if request.method == "POST":
+ form = PushButtonForm(request.POST)
+ if form.is_valid():
+ firmware = FirmwareService(None,
+ settings.ANSIBLE["nic"]["git"],
+ settings.ANSIBLE["nic"]["branch"],
+ settings.ANSIBLE["nic"]["playbook"],
+ settings.ANSIBLE["nic"]["zmq"])
+ firmware.deploy()
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error running nightly batch: somehow a form that takes no inputs is invalid")
+ else:
+ form = PushButtonForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "pushbutton.xml", context)
+
+
+@csrf_exempt
+def nightlybatch(request):
+ if request.method == "POST":
+ form = PushButtonForm(request.POST)
+ if form.is_valid():
+ wr = WrService(None,
+ settings.ANSIBLE["wr"]["git"],
+ settings.ANSIBLE["wr"]["branch"],
+ settings.ANSIBLE["wr"]["playbook"],
+ settings.ANSIBLE["wr"]["zmq"])
+ wr.deploy()
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error running nightly batch: somehow a form that takes no inputs is invalid")
+ else:
+ form = PushButtonForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "pushbutton.xml", context)
+
+
+@csrf_exempt
+def nightlypatch(request):
+ if request.method == "POST":
+ form = PushButtonForm(request.POST)
+ if form.is_valid():
+ patch = PatchService(None,
+ settings.ANSIBLE["patch"]["git"],
+ settings.ANSIBLE["patch"]["branch"],
+ settings.ANSIBLE["patch"]["playbook"],
+ settings.ANSIBLE["patch"]["zmq"])
+ patch.deploy()
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error running nightly patch: somehow a form that takes no inputs is invalid")
+ else:
+ form = PushButtonForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "pushbutton.xml", context)
+
+
+@csrf_exempt
+def wrfix(request):
+ if request.method == "POST":
+ form = WrRemediateForm(request.POST)
+ if form.is_valid():
+ playbook = form.cleaned_data["playbook"]
+ cluster_name_list = form.cleaned_data["cluster_name_list"]
+ for cluster_name in list(cluster_name_list.split()):
+ wrinstallnow = WrInstallNowService(playbook,
+ cluster_name,
+ settings.ANSIBLE[playbook]["git"],
+ settings.ANSIBLE[playbook]["branch"],
+ settings.ANSIBLE[playbook]["playbook"],
+ settings.ANSIBLE[playbook]["zmq"])
+ wrinstallnow.remediate()
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error running playbook: the form is invalid")
+ else:
+ form = WrRemediateForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "wrremediate.xml", context)
+
+
+@csrf_exempt
+def reboot(request):
+ if request.method == "POST":
+ form = WrRebootForm(request.POST)
+ if form.is_valid():
+ namespace_name_list = form.cleaned_data["namespace_name_list"]
+ for namespace_name in list(namespace_name_list.split()):
+ wrinstallnow = WrInstallNowService("wr_reboot",
+ namespace_name,
+ settings.ANSIBLE["wr_reboot"]["git"],
+ settings.ANSIBLE["wr_reboot"]["branch"],
+ settings.ANSIBLE["wr_reboot"]["playbook"],
+ settings.ANSIBLE["wr_reboot"]["zmq"])
+ wrinstallnow.remediate()
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error running reboot: the form is invalid")
+ else:
+ form = WrRebootForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "wrremediate.xml", context)
+
+#created Oct30 2020 for Raj reboot testing delete later - Soda
+@csrf_exempt
+def mockreboot(request):
+ if request.method == "POST":
+ form = MockWrRebootForm(request.POST)
+ if form.is_valid():
+ namespace_name_list = form.cleaned_data["namespace_name_list"]
+ for namespace_name in list(namespace_name_list.split()):
+ print(namespace_name)
+ return JsonResponse({"status": "OK"})
+ else:
+ raise Exception("Error running Mock reboot: the form is invalid")
+ else:
+ form = MockWrRebootForm()
+ context = {
+ "title": "Mock Reboot Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "mockwrremediate.xml", context)
+
+@csrf_exempt
+def playbookreport(request):
+ if request.method == "POST":
+ form = PlaybookReportForm(request.POST)
+ if form.is_valid():
+ report_kwargs = {"git": form.cleaned_data["git"],
+ "playbook": form.cleaned_data["playbook"],
+ "target": form.cleaned_data["target"],
+ "failed": form.cleaned_data["failed"]}
+ service = PlaybookReportService(**report_kwargs)
+ status = service.process()
+ return JsonResponse({"status": status})
+ else:
+ raise Exception("Error receiving playbook report: form input is invalid.")
+ else:
+ form = PlaybookReportForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form
+ }
+ return render(request, "playbookreport.xml", context)
+
+
+@csrf_exempt
+def subcloud(request):
+ subclouds = None
+ if request.method == "POST":
+ form = SubcloudForm(request.POST)
+ if form.is_valid():
+ subclouds = SubcloudService.find_subclouds(form.cleaned_data["fuze_id"])
+ else:
+ raise Exception("Error finding subcloud: form input is invalid.")
+ else:
+ form = SubcloudForm()
+ context = {
+ "title": "Far-Edge Ops Middleware",
+ "form": form,
+ "subclouds": subclouds,
+ "fqdn": settings.DNS_DOMAIN
+ }
+ return render(request, "subcloud.xml", context)
+
+
+# @csrf_exempt
+# def fixcreds(request):
+# if request.method == "POST":
+# form = PushButtonForm(request.POST)
+# if form.is_valid():
+# PasswordService.fix_creds()
+# return JsonResponse({"status": "OK"})
+# else:
+# form = PushButtonForm()
+# context = {
+# "title": "Far-Edge Ops Middleware",
+# "form": form
+# }
+# return render(request, "pushbutton.xml", context)
+
+
+# def fixcreds_success(request):
+# return render(request, "ciq_success.xml")