6 if __name__ == '__main__':
7 sys.path.append("/opt/planetstack")
8 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
10 from planetstack.config import Config
11 from core.models import Service
12 from hpc.models import HpcService
13 from requestrouter.models import RequestRouterService
14 from util.logger import Logger, logging
16 logger = Logger(level=logging.INFO)
19 def __init__(self, proxy, auth, method=None):
24 def __getattr__(self, name):
25 if name.startswith("_"):
26 return getattr(self, name)
28 return APIHelper(self.proxy, self.auth, name)
30 def __call__(self, *args):
31 method = getattr(self.proxy, self.method)
32 return method(self.auth, *args)
35 def __init__(self, hostname, port=8003, username="apiuser", password="apiuser"):
36 self.connect_api(hostname, port, username, password)
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)
42 cob_auth["Username"] = username
43 cob_auth["AuthString"] = password
44 cob_auth["AuthMethod"] = "password"
46 onev = xmlrpclib.ServerProxy("https://%s:%d/ONEV_API/" % (hostname, port), allow_none=True)
48 onev_auth["Username"] = username
49 onev_auth["AuthString"] = password
50 onev_auth["AuthMethod"] = "password"
52 self.cob = APIHelper(cob, cob_auth)
53 self.onev = APIHelper(onev, onev_auth)
56 def extract_slice_info(self, service):
57 """ Produce a dict that describes the slices for the CMI
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>,...
64 slice_cmi = <name of cmi slice>
70 for slice in service.service.all():
76 slicenames["coblitz"] = name
77 slicehosts["coblitz"] = [sliver.node.name for sliver in slice.slivers.all()]
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()]
89 if "coblitz" in slicenames:
90 base_hrn = slicenames["coblitz"].split("_")[0]
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)
103 def get_cmi_hostname(self, hpc_service=None):
104 if (hpc_service is None):
105 hpc_service = HpcService.objects.get()
107 slice_info = self.extract_slice_info(hpc_service)
108 return slice_info["hostname_cmi"]
110 def write_slices_file(self, hpc_service=None, rr_service=None):
111 if (hpc_service is None):
112 hpc_service = HpcService.objects.get()
114 if (rr_service is None):
115 rr_service = RequestRouterService.objects.get()
117 mapping = self.extract_slice_info(hpc_service)
118 rr_mapping = self.extract_slice_info(rr_service)
120 mapping.update(rr_mapping)
128 BASE_HRN="%(base_hrn)s"
129 RELEVANT_SERVICE_NAMES=['%(service_coblitz)s', '%(service_dnsredir)s', '%(service_dnsdemux)s']
130 COBLITZ_SLICE_NAME="%(slice_coblitz)s"
132 COBLITZ_PS_SLICE_NAME="%(slice_coblitz)s"
133 DNSREDIR_SLICE_NAME="%(slice_dnsredir)s"
135 DNSREDIR_PS_SLICE_NAME="%(slice_dnsredir)s"
136 DNSDEMUX_SLICE_NAME="%(slice_dnsdemux)s"
138 DNSDEMUX_PS_SLICE_NAME="%(slice_dnsdemux)s"
139 CMI_URL="http://%(hostname_cmi)s"
141 CMI_HTTPS_PORT="8003"
142 PUPPET_MASTER_HOSTNAME="%(hostname_cmi)s"
143 PUPPET_MASTER_PORT="8140"
146 if __name__ == '__main__':
147 print "testing write_slices_file"
149 lib.write_slices_file()
151 print "testing API connection"
152 client = CmiClient(lib.get_cmi_hostname())
153 client.cob.GetNewObjects()
154 client.onev.ListAll("CDN")