aboutsummaryrefslogtreecommitdiffstats
path: root/src/resource_inventory/pdf_templater.py
diff options
context:
space:
mode:
authorJustin Choquette <jchoquette@iol.unh.edu>2023-06-08 12:46:53 -0400
committerJustin Choquette <jchoquette@iol.unh.edu>2023-07-21 13:17:51 -0400
commita09db9f287a02873c0226759f8ea444bb304cd59 (patch)
tree59e744e4b998973a808abbae2d21fbdd6201d829 /src/resource_inventory/pdf_templater.py
parent8ddc7e820e120f1dde4e901d3cb6f1dd3f281e65 (diff)
LaaS 3.0 Almost MVP
Change-Id: Ided9a43cf3088bb58a233dc459711c03f43e11b8 Signed-off-by: Justin Choquette <jchoquette@iol.unh.edu>
Diffstat (limited to 'src/resource_inventory/pdf_templater.py')
-rw-r--r--src/resource_inventory/pdf_templater.py176
1 files changed, 0 insertions, 176 deletions
diff --git a/src/resource_inventory/pdf_templater.py b/src/resource_inventory/pdf_templater.py
deleted file mode 100644
index c4b22fe..0000000
--- a/src/resource_inventory/pdf_templater.py
+++ /dev/null
@@ -1,176 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-
-from django.template.loader import render_to_string
-import booking
-from resource_inventory.models import Server
-
-
-class PDFTemplater:
- """Utility class to create a full PDF yaml file."""
-
- @classmethod
- def makePDF(cls, booking):
- """Fill the pod descriptor file template with info about the resource."""
- template = "dashboard/pdf.yaml"
- info = {}
- info['details'] = cls.get_pdf_details(booking.resource)
- try:
- info['jumphost'] = cls.get_pdf_jumphost(booking)
- except Exception:
- # filling in jumphost info can be optional in some cases, this shouldn't be a hard error
- info['jumphost'] = {}
- info['nodes'] = cls.get_pdf_nodes(booking)
-
- return render_to_string(template, context=info)
-
- @classmethod
- def get_pdf_details(cls, resource):
- """Info for the "details" section."""
- details = {}
- owner = "Anon"
- email = "email@mail.com"
- resource_lab = resource.template.lab
- lab = resource_lab.name
- location = resource_lab.location
- pod_type = "development"
- link = resource_lab.lab_info_link
-
- try:
- # try to get more specific info that may fail, we dont care if it does
- booking_owner = booking.models.Booking.objects.get(resource=resource).owner
- owner = booking_owner.username
- email = booking_owner.userprofile.email_addr
- except Exception:
- pass
-
- details['contact'] = email
- details['lab'] = lab
- details['link'] = link
- details['owner'] = owner
- details['location'] = location
- details['type'] = pod_type
-
- return details
-
- @classmethod
- def get_jumphost(cls, booking):
- """Return the host designated as the Jumphost for the booking."""
- jumphost = None
- if booking.opnfv_config:
- jumphost_opnfv_config = booking.opnfv_config.host_opnfv_config.get(
- role__name__iexact="jumphost"
- )
- jumphost = booking.resource.hosts.get(config=jumphost_opnfv_config.host_config)
- else: # if there is no opnfv config, use headnode
- jumphost = Server.objects.filter(
- bundle=booking.resource,
- config__is_head_node=True
- ).first()
-
- return jumphost
-
- @classmethod
- def get_pdf_jumphost(cls, booking):
- """Return a dict of all the info for the "jumphost" section."""
- jumphost = cls.get_jumphost(booking)
- jumphost_info = cls.get_pdf_host(jumphost)
- jumphost_info['os'] = jumphost.config.image.os.name
- return jumphost_info
-
- @classmethod
- def get_pdf_nodes(cls, booking):
- """Return a list of all the "nodes" (every host except jumphost)."""
- pdf_nodes = []
- nodes = set(Server.objects.filter(bundle=booking.resource))
- nodes.discard(cls.get_jumphost(booking))
-
- for node in nodes:
- pdf_nodes.append(cls.get_pdf_host(node))
-
- return pdf_nodes
-
- @classmethod
- def get_pdf_host(cls, host):
- """
- Gather all needed info about a host.
-
- returns a dictionary
- """
- host_info = {}
- host_info['name'] = host.name
- host_info['node'] = cls.get_pdf_host_node(host)
- host_info['disks'] = []
- for disk in host.profile.storageprofile.all():
- host_info['disks'].append(cls.get_pdf_host_disk(disk))
-
- host_info['interfaces'] = []
- for interface in host.interfaces.all():
- host_info['interfaces'].append(cls.get_pdf_host_iface(interface))
-
- host_info['remote'] = cls.get_pdf_host_remote_management(host)
-
- return host_info
-
- @classmethod
- def get_pdf_host_node(cls, host):
- """Return "node" info for a given host."""
- d = {}
- d['type'] = "baremetal"
- d['vendor'] = host.vendor
- d['model'] = host.model
- d['memory'] = str(host.profile.ramprofile.first().amount) + "G"
-
- cpu = host.profile.cpuprofile.first()
- d['arch'] = cpu.architecture
- d['cpus'] = cpu.cpus
- d['cores'] = cpu.cores
- cflags = cpu.cflags
- if cflags and cflags.strip():
- d['cpu_cflags'] = cflags
- else:
- d['cpu_cflags'] = "none"
-
- return d
-
- @classmethod
- def get_pdf_host_disk(cls, disk):
- """Return a dict describing the given disk."""
- disk_info = {}
- disk_info['name'] = disk.name
- disk_info['capacity'] = str(disk.size) + "G"
- disk_info['type'] = disk.media_type
- disk_info['interface'] = disk.interface
- disk_info['rotation'] = disk.rotation
- return disk_info
-
- @classmethod
- def get_pdf_host_iface(cls, interface):
- """Return a dict describing given interface."""
- iface_info = {}
- iface_info['features'] = "none"
- iface_info['mac_address'] = interface.mac_address
- iface_info['name'] = interface.profile.name
- speed = str(int(interface.profile.speed / 1000)) + "gb"
- iface_info['speed'] = speed
- return iface_info
-
- @classmethod
- def get_pdf_host_remote_management(cls, host):
- """Get the remote params of the host."""
- man = host.remote_management
- mgmt = {}
- mgmt['address'] = man.address
- mgmt['mac_address'] = man.mac_address
- mgmt['pass'] = man.password
- mgmt['type'] = man.management_type
- mgmt['user'] = man.user
- mgmt['versions'] = [man.versions]
- return mgmt