3 from django.db.models import F, Q
4 from planetstack.config import Config
5 from observer.syncstep import SyncStep
6 from core.models import Service
7 from hpc.models import HpcService
8 from util.logger import Logger, logging
10 logger = Logger(level=logging.INFO)
12 class SyncHpcService(SyncStep):
16 def fetch_pending(self):
17 return HpcService.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
19 def extract_slice_info(hpc_service):
20 """ Produce a dict that describes the slices for the CMI
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>,...
27 slice_cmi = <name of cmi slice>
33 for slice in hpc_service.service.all():
39 slicenames["coblitz"] = name
40 slicehosts["coblitz"] = [sliver.node.name for sliver in slice.slivers.all()]
42 slicenames["cmi"] = name
43 slicehosts["cmi"] = [sliver.node.name for sliver in slice.slivers.all()]
46 if "coblitz" in slicenames:
47 base_hrn = slicenames["coblitz"].split("_")[0]
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)
60 def write_slices_file(self, hpc_service):
61 mapping = self.extract_slicenames(hpc_service)
69 BASE_HRN="%(base_hrn)"
70 RELEVANT_SERVICE_NAMES=['%(service_coblitz)', '%(service_dnsredir)', '%(service_dnsdemux)']
71 COBLITZ_SLICE_NAME="%(slice_coblitz)"
73 COBLITZ_PS_SLICE_NAME="%(slice_coblitz)"
74 DNSREDIR_SLICE_NAME="%(slice_dnsredir)"
76 DNSREDIR_PS_SLICE_NAME="%(slice_dnsredir)"
77 DNSDEMUX_SLICE_NAME="%(slice_dnsdemux)"
79 DNSDEMUX_PS_SLICE_NAME="%(slice_dnsdemux)"
80 CMI_URL="http://%(hostname_cmi)"
83 PUPPET_MASTER_HOSTNAME="%(hostname_cmi)"
84 PUPPET_MASTER_PORT="8140"
87 def sync_record(self, hpc_service):
88 logger.info("sync'ing hpc_service %s" % str(hpc_service))