blob: 0e708fddd2ea3bbdd05c7d49d6ebe6622b9d00f7 [file] [log] [blame]
Scott Baker25467ff2016-08-04 09:50:22 -07001from django.http import HttpResponse, HttpResponseServerError
2from core.models import *
Scott Bakerc2a4d322016-08-09 09:16:57 -07003from rest_framework.views import APIView
Scott Baker25467ff2016-08-04 09:50:22 -07004from services.hpc.models import *
Scott Baker6ecad3b2016-08-09 09:01:55 -07005#from services.requestrouter.models import *
Scott Baker25467ff2016-08-04 09:50:22 -07006import xos.settings
7import json
8import os
9import time
10
11def get_service_slices(service):
12 try:
13 return service.slices.all()
14 except:
15 # this field used to be improperly named, and makemigrations won't fix it
16 return service.service.all()
17
Scott Bakerc2a4d322016-08-09 09:16:57 -070018class HpcConfig(APIView):
19 method_kind = "list"
20 method_name = "hpcconfig"
Scott Baker25467ff2016-08-04 09:50:22 -070021
Scott Bakerc2a4d322016-08-09 09:16:57 -070022 def get(self, request, format=None):
23 hpcSlice=None
24 cmiSlice=None
25 redirSlice=None
26 demuxSlice=None
Scott Baker25467ff2016-08-04 09:50:22 -070027
Scott Bakerc2a4d322016-08-09 09:16:57 -070028 node_slicename = request.GET.get("slicename", None)
29 if not node_slicename:
30 return HttpResponseServerError("Error: no slicename passed in request")
Scott Baker25467ff2016-08-04 09:50:22 -070031
Scott Bakerc2a4d322016-08-09 09:16:57 -070032 # search for an HPC Service that owns the slicename that was passed
33 # to us.
34 hpc=None
35 for candidate in HpcService.objects.all():
36 if candidate.cmi_hostname == node_slicename:
37 # A hack for standalone CMIs that aren't managed by XOS. Set
38 # /etc/slicename to cmi_hostname that's configured in the
39 # HPCService object.
Scott Baker25467ff2016-08-04 09:50:22 -070040 hpc = candidate
41
Scott Bakerc2a4d322016-08-09 09:16:57 -070042 for slice in get_service_slices(candidate):
43 if slice.name == node_slicename:
44 hpc = candidate
Scott Baker25467ff2016-08-04 09:50:22 -070045
Scott Bakerc2a4d322016-08-09 09:16:57 -070046 if (not hpc):
47 return HttpResponseServerError("Error: no HPC service")
Scott Baker25467ff2016-08-04 09:50:22 -070048
Scott Bakerc2a4d322016-08-09 09:16:57 -070049 for slice in get_service_slices(hpc):
50 if "cmi" in slice.name:
51 cmiSlice = slice
52 elif ("hpc" in slice.name) or ("vcoblitz" in slice.name):
53 hpcSlice = slice
54 elif "redir" in slice.name:
55 redirSlice = slice
56 elif "demux" in slice.name:
57 demuxSlice = slice
Scott Baker25467ff2016-08-04 09:50:22 -070058
Scott Bakerc2a4d322016-08-09 09:16:57 -070059 if (hpc.cmi_hostname):
60 cmi_hostname = hpc.cmi_hostname
61 else:
62 if not cmiSlice:
63 return HttpResponseServerError("Error: no CMI slice")
Scott Baker25467ff2016-08-04 09:50:22 -070064
Scott Bakerc2a4d322016-08-09 09:16:57 -070065 if len(cmiSlice.instances.all())==0:
66 return HttpResponseServerError("Error: CMI slice has no instances")
Scott Baker25467ff2016-08-04 09:50:22 -070067
Scott Bakerc2a4d322016-08-09 09:16:57 -070068 # for now, assuming using NAT
69 cmi_hostname = cmiSlice.instances.all()[0].node.name
Scott Baker25467ff2016-08-04 09:50:22 -070070
Scott Bakerc2a4d322016-08-09 09:16:57 -070071 if not hpcSlice:
72 return HttpResponseServerError("Error: no HPC slice")
Scott Baker25467ff2016-08-04 09:50:22 -070073
Scott Bakerc2a4d322016-08-09 09:16:57 -070074 # if (redirSlice==None) or (demuxSlice==None):
75 # # The HPC Service didn't have a dnsredir or a dnsdemux, so try looking
76 # # in the RequestRouterService for one.
77 #
78 # rr = RequestRouterService.objects.all()
79 # if not (rr):
80 # return HttpResponseServerError("Error: no RR service")
81 #
82 # rr = rr[0]
83 # try:
84 # slices = rr.slices.all()
85 # except:
86 # # this field used to be improperly named, and makemigrations won't fix it
87 # slices = rr.service.all()
88 # for slice in slices:
89 # if "redir" in slice.name:
90 # redirSlice = slice
91 # elif "demux" in slice.name:
92 # demuxSlice = slice
Scott Baker25467ff2016-08-04 09:50:22 -070093
Scott Bakerc2a4d322016-08-09 09:16:57 -070094 if not redirSlice:
95 return HttpResponseServerError("Error: no dnsredir slice")
Scott Baker25467ff2016-08-04 09:50:22 -070096
Scott Bakerc2a4d322016-08-09 09:16:57 -070097 if not demuxSlice:
98 return HttpResponseServerError("Error: no dnsdemux slice")
Scott Baker25467ff2016-08-04 09:50:22 -070099
Scott Bakerc2a4d322016-08-09 09:16:57 -0700100 d = {}
101 d["hpc_slicename"] = hpcSlice.name
102 d["redir_slicename"] = redirSlice.name
103 d["demux_slicename"] = demuxSlice.name
104 d["cmi_hostname"] = cmi_hostname
105 d["xos_hostname"] = xos.settings.RESTAPI_HOSTNAME
106 d["xos_port"] = str(xos.settings.RESTAPI_PORT)
Scott Baker25467ff2016-08-04 09:50:22 -0700107
Scott Bakerc2a4d322016-08-09 09:16:57 -0700108 if hpc.hpc_port80:
109 d["hpc_port80"] = "True"
110 else:
111 d["hpc_port80"] = "False"
112
113 return HttpResponse("""# auto-generated by HpcConfig
114 ENABLE_PLC=False
115 ENABLE_PS=True
116 BASE_HRN="princeton"
117 RELEVANT_SERVICE_NAMES=['vcoblitz', 'coredirect', 'codnsdemux', "syndicate_comon_server"]
118 COBLITZ_SLICE_NAME=BASE_HRN+"_vcoblitz"
119 COBLITZ_SLICE_ID=70
120 COBLITZ_PS_SLICE_NAME="{hpc_slicename}"
121 DNSREDIR_SLICE_NAME=BASE_HRN+"_coredirect"
122 DNSREDIR_SLICE_ID=71
123 DNSREDIR_PS_SLICE_NAME="{redir_slicename}"
124 DNSDEMUX_SLICE_NAME=BASE_HRN+"_codnsdemux"
125 DNSDEMUX_SLICE_ID=69
126 DNSDEMUX_PS_SLICE_NAME="{demux_slicename}"
127 CMI_URL="http://{cmi_hostname}/"
128 CMI_HTTP_PORT="8004"
129 CMI_HTTPS_PORT="8003"
130 PUPPET_MASTER_HOSTNAME="{cmi_hostname}"
131 PUPPET_MASTER_PORT="8140"
132 PS_HOSTNAME="{xos_hostname}"
133 PS_PORT="{xos_port}"
134 COBLITZ_PORT_80={hpc_port80}
135 """.format(**d))
Scott Baker25467ff2016-08-04 09:50:22 -0700136