5375c2ffc09bf74fc58673af4627542a3cb45ba6
[plstackapi.git] / planetstack / hpc_observer / hpclib.py
1 import os
2 import base64
3 import sys
4
5 if __name__ == '__main__':
6     sys.path.append("/opt/planetstack")
7     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
8
9 from planetstack.config import Config
10 from core.models import Service
11 from hpc.models import HpcService
12 from requestrouter.models import RequestRouterService
13 from util.logger import Logger, logging
14
15 logger = Logger(level=logging.INFO)
16
17 class HpcLibrary:
18     def extract_slice_info(self, service):
19         """ Produce a dict that describes the slices for the CMI
20
21             slice_coblitz = <name of coblitz slice>
22             service_coblitz = <name of coblitz service>
23             hostname_coblitz = <name of first coblitz slice>
24             hostnames_coblitz = <name_of_first_cob_slice>,<name_of_second_cob_slice>,...
25
26             slice_cmi = <name of cmi slice>
27             ...
28         """
29
30         slicenames = {}
31         slicehosts = {}
32         for slice in service.service.all():
33             name = slice.name
34             if not ("_" in name):
35                 continue
36
37             if "coblitz" in name:
38                 slicenames["coblitz"] = name
39                 slicehosts["coblitz"] = [sliver.node.name for sliver in slice.slivers.all()]
40             elif "cmi" in name:
41                 slicenames["cmi"] = name
42                 slicehosts["cmi"] = [sliver.node.name for sliver in slice.slivers.all()]
43             elif "dnsredir" in name:
44                 slicenames["dnsredir"] = name
45                 slicehosts["dnsredir"] = [sliver.node.name for sliver in slice.slivers.all()]
46             elif "dnsdemux" in name:
47                 slicenames["dnsdemux"] = name
48                 slicehosts["dnsdemux"] = [sliver.node.name for sliver in slice.slivers.all()]
49
50         base_hrn = None
51         if "coblitz" in slicenames:
52             base_hrn = slicenames["coblitz"].split("_")[0]
53
54         mapping = {}
55         mapping["base_hrn"] = base_hrn
56         for (k,v) in slicenames.items():
57             mapping["slice_" + k] = v
58             mapping["service_" + k] = v.split("_",1)[1]
59         for (k,v) in slicehosts.items():
60             mapping["hostname_" + k] = v[0]
61             mapping["hostnames_" + k] = ",".join(v)
62
63         return mapping
64
65     def write_slices_file(self, hpc_service=None, rr_service=None):
66         if (hpc_service is None):
67             hpc_service = HpcService.objects.get()
68
69         if (rr_service is None):
70             rr_service = RequestRouterService.objects.get()
71
72         mapping = self.extract_slice_info(hpc_service)
73         rr_mapping = self.extract_slice_info(rr_service)
74
75         mapping.update(rr_mapping)
76
77         fn = "/tmp/slices"
78
79         f = open(fn, "w")
80         f.write("""
81 ENABLE_PLC=True
82 ENABLE_PS=False
83 BASE_HRN="%(base_hrn)s"
84 RELEVANT_SERVICE_NAMES=['%(service_coblitz)s', '%(service_dnsredir)s', '%(service_dnsdemux)s']
85 COBLITZ_SLICE_NAME="%(slice_coblitz)s"
86 COBLITZ_SLICE_ID=1
87 COBLITZ_PS_SLICE_NAME="%(slice_coblitz)s"
88 DNSREDIR_SLICE_NAME="%(slice_dnsredir)s"
89 DNSREDIR_SLICE_ID=2
90 DNSREDIR_PS_SLICE_NAME="%(slice_dnsredir)s"
91 DNSDEMUX_SLICE_NAME="%(slice_dnsdemux)s"
92 DNSDEMUX_SLICE_ID=3
93 DNSDEMUX_PS_SLICE_NAME="%(slice_dnsdemux)s"
94 CMI_URL="http://%(hostname_cmi)s"
95 CMI_HTTP_PORT="8004"
96 CMI_HTTPS_PORT="8003"
97 PUPPET_MASTER_HOSTNAME="%(hostname_cmi)s"
98 PUPPET_MASTER_PORT="8140"
99 """ % mapping)
100
101 if __name__ == '__main__':
102     lib = HpcLibrary()
103     lib.write_slices_file()
104
105