blob: 97e2a3030b86cb5992d6ddb7ed9237afe1a9c612 [file] [log] [blame]
Scott Bakerb30aa082014-01-03 08:36:00 -08001import os
2import base64
3import sys
Scott Baker95703032014-01-06 14:00:17 -08004import xmlrpclib
Scott Bakerb30aa082014-01-03 08:36:00 -08005
6if __name__ == '__main__':
7 sys.path.append("/opt/planetstack")
8 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
9
10from planetstack.config import Config
11from core.models import Service
12from hpc.models import HpcService
13from requestrouter.models import RequestRouterService
14from util.logger import Logger, logging
15
16logger = Logger(level=logging.INFO)
17
Scott Baker95703032014-01-06 14:00:17 -080018class APIHelper:
19 def __init__(self, proxy, auth, method=None):
20 self.proxy = proxy
21 self.auth = auth
22 self.method = method
23
24 def __getattr__(self, name):
25 if name.startswith("_"):
26 return getattr(self, name)
27 else:
28 return APIHelper(self.proxy, self.auth, name)
29
30 def __call__(self, *args):
31 method = getattr(self.proxy, self.method)
32 return method(self.auth, *args)
33
34class CmiClient:
35 def __init__(self, hostname, port=8003, username="apiuser", password="apiuser"):
36 self.connect_api(hostname, port, username, password)
37
38 def connect_api(self, hostname, port=8003, username="apiuser", password="apiuser"):
39 #print "https://%s:%d/COAPI/" % (hostname, port)
40 cob = xmlrpclib.ServerProxy("https://%s:%d/COAPI/" % (hostname, port), allow_none=True)
41 cob_auth = {}
42 cob_auth["Username"] = username
43 cob_auth["AuthString"] = password
44 cob_auth["AuthMethod"] = "password"
45
46 onev = xmlrpclib.ServerProxy("https://%s:%d/ONEV_API/" % (hostname, port), allow_none=True)
47 onev_auth = {}
48 onev_auth["Username"] = username
49 onev_auth["AuthString"] = password
50 onev_auth["AuthMethod"] = "password"
51
52 self.cob = APIHelper(cob, cob_auth)
53 self.onev = APIHelper(onev, onev_auth)
54
Scott Bakerb30aa082014-01-03 08:36:00 -080055class HpcLibrary:
56 def extract_slice_info(self, service):
57 """ Produce a dict that describes the slices for the CMI
58
59 slice_coblitz = <name of coblitz slice>
60 service_coblitz = <name of coblitz service>
61 hostname_coblitz = <name of first coblitz slice>
62 hostnames_coblitz = <name_of_first_cob_slice>,<name_of_second_cob_slice>,...
63
64 slice_cmi = <name of cmi slice>
65 ...
66 """
67
68 slicenames = {}
69 slicehosts = {}
70 for slice in service.service.all():
71 name = slice.name
72 if not ("_" in name):
73 continue
74
75 if "coblitz" in name:
76 slicenames["coblitz"] = name
77 slicehosts["coblitz"] = [sliver.node.name for sliver in slice.slivers.all()]
78 elif "cmi" in name:
79 slicenames["cmi"] = name
80 slicehosts["cmi"] = [sliver.node.name for sliver in slice.slivers.all()]
81 elif "dnsredir" in name:
82 slicenames["dnsredir"] = name
83 slicehosts["dnsredir"] = [sliver.node.name for sliver in slice.slivers.all()]
84 elif "dnsdemux" in name:
85 slicenames["dnsdemux"] = name
86 slicehosts["dnsdemux"] = [sliver.node.name for sliver in slice.slivers.all()]
87
88 base_hrn = None
89 if "coblitz" in slicenames:
90 base_hrn = slicenames["coblitz"].split("_")[0]
91
92 mapping = {}
93 mapping["base_hrn"] = base_hrn
94 for (k,v) in slicenames.items():
95 mapping["slice_" + k] = v
96 mapping["service_" + k] = v.split("_",1)[1]
97 for (k,v) in slicehosts.items():
98 mapping["hostname_" + k] = v[0]
99 mapping["hostnames_" + k] = ",".join(v)
100
101 return mapping
102
Scott Baker95703032014-01-06 14:00:17 -0800103 def get_cmi_hostname(self, hpc_service=None):
104 if (hpc_service is None):
105 hpc_service = HpcService.objects.get()
106
107 slice_info = self.extract_slice_info(hpc_service)
108 return slice_info["hostname_cmi"]
109
Scott Baker5bee8932014-01-03 12:00:59 -0800110 def write_slices_file(self, hpc_service=None, rr_service=None):
111 if (hpc_service is None):
112 hpc_service = HpcService.objects.get()
113
114 if (rr_service is None):
115 rr_service = RequestRouterService.objects.get()
116
Scott Bakerb30aa082014-01-03 08:36:00 -0800117 mapping = self.extract_slice_info(hpc_service)
118 rr_mapping = self.extract_slice_info(rr_service)
119
120 mapping.update(rr_mapping)
121
Scott Bakerb30aa082014-01-03 08:36:00 -0800122 fn = "/tmp/slices"
123
124 f = open(fn, "w")
125 f.write("""
126ENABLE_PLC=True
127ENABLE_PS=False
128BASE_HRN="%(base_hrn)s"
129RELEVANT_SERVICE_NAMES=['%(service_coblitz)s', '%(service_dnsredir)s', '%(service_dnsdemux)s']
130COBLITZ_SLICE_NAME="%(slice_coblitz)s"
131COBLITZ_SLICE_ID=1
132COBLITZ_PS_SLICE_NAME="%(slice_coblitz)s"
133DNSREDIR_SLICE_NAME="%(slice_dnsredir)s"
134DNSREDIR_SLICE_ID=2
135DNSREDIR_PS_SLICE_NAME="%(slice_dnsredir)s"
136DNSDEMUX_SLICE_NAME="%(slice_dnsdemux)s"
137DNSDEMUX_SLICE_ID=3
138DNSDEMUX_PS_SLICE_NAME="%(slice_dnsdemux)s"
139CMI_URL="http://%(hostname_cmi)s"
140CMI_HTTP_PORT="8004"
141CMI_HTTPS_PORT="8003"
142PUPPET_MASTER_HOSTNAME="%(hostname_cmi)s"
143PUPPET_MASTER_PORT="8140"
144""" % mapping)
145
146if __name__ == '__main__':
Scott Baker95703032014-01-06 14:00:17 -0800147 print "testing write_slices_file"
Scott Bakerb30aa082014-01-03 08:36:00 -0800148 lib = HpcLibrary()
Scott Baker5bee8932014-01-03 12:00:59 -0800149 lib.write_slices_file()
Scott Bakerb30aa082014-01-03 08:36:00 -0800150
Scott Baker95703032014-01-06 14:00:17 -0800151 print "testing API connection"
152 client = CmiClient(lib.get_cmi_hostname())
153 client.cob.GetNewObjects()
154 client.onev.ListAll("CDN")
155
156
157
Scott Bakerb30aa082014-01-03 08:36:00 -0800158