blob: 049b3165cf8eb068c281db4f7dc570eb3d1e2e51 [file] [log] [blame]
Scott Bakerb30aa082014-01-03 08:36:00 -08001import os
2import base64
3from django.db.models import F, Q
4from planetstack.config import Config
5from observer.syncstep import SyncStep
6from core.models import Service
7from hpc.models import HpcService
8from util.logger import Logger, logging
9
10logger = Logger(level=logging.INFO)
11
12class SyncHpcService(SyncStep):
13 provides=[HpcService]
14 requested_interval=0
15
16 def fetch_pending(self):
17 return HpcService.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
18
19 def extract_slice_info(hpc_service):
20 """ Produce a dict that describes the slices for the CMI
21
22 slice_coblitz = <name of coblitz slice>
23 service_coblitz = <name of coblitz service>
24 hostname_coblitz = <name of first coblitz slice>
25 hostnames_coblitz = <name_of_first_cob_slice>,<name_of_second_cob_slice>,...
26
27 slice_cmi = <name of cmi slice>
28 ...
29 """
30
31 slicenames = {}
32 slicehosts = {}
33 for slice in hpc_service.service.all():
34 name = slice.name
35 if not ("_" in name):
36 continue
37
38 if "coblitz" in name:
39 slicenames["coblitz"] = name
40 slicehosts["coblitz"] = [sliver.node.name for sliver in slice.slivers.all()]
41 elif "cmi" in name:
42 slicenames["cmi"] = name
43 slicehosts["cmi"] = [sliver.node.name for sliver in slice.slivers.all()]
44
45 base_hrn = None
46 if "coblitz" in slicenames:
47 base_hrn = slicenames["coblitz"].split("_")[0]
48
49 mapping = {}
50 mapping["base_hrn"] = base_hrn
51 for (k,v) in slicenames.items():
52 mapping["slice_" + k] = v
53 mapping["service_" + k] = v.split("_",1)[1]
54 for (k,v) in slicehosts.items()
55 mapping["hostname_" + k] = v[0]
56 mapping["hostnames_" + k] = ",".join(v)
57
58 return mapping
59
60 def write_slices_file(self, hpc_service):
61 mapping = self.extract_slicenames(hpc_service)
62
63 fn = "/tmp/slices"
64
65 f = open(fn, "w")
66 f.write("""
67ENABLE_PLC=True
68ENABLE_PS=False
69BASE_HRN="%(base_hrn)"
70RELEVANT_SERVICE_NAMES=['%(service_coblitz)', '%(service_dnsredir)', '%(service_dnsdemux)']
71COBLITZ_SLICE_NAME="%(slice_coblitz)"
72COBLITZ_SLICE_ID=1
73COBLITZ_PS_SLICE_NAME="%(slice_coblitz)"
74DNSREDIR_SLICE_NAME="%(slice_dnsredir)"
75DNSREDIR_SLICE_ID=2
76DNSREDIR_PS_SLICE_NAME="%(slice_dnsredir)"
77DNSDEMUX_SLICE_NAME="%(slice_dnsdemux)"
78DNSDEMUX_SLICE_ID=3
79DNSDEMUX_PS_SLICE_NAME="%(slice_dnsdemux)"
80CMI_URL="http://%(hostname_cmi)"
81CMI_HTTP_PORT="8004"
82CMI_HTTPS_PORT="8003"
83PUPPET_MASTER_HOSTNAME="%(hostname_cmi)"
84PUPPET_MASTER_PORT="8140"
85""")
86
87 def sync_record(self, hpc_service):
88 logger.info("sync'ing hpc_service %s" % str(hpc_service))
89 hpc_service.save()