7 if __name__ == '__main__':
8 sys.path.append("/opt/planetstack")
9 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
11 from planetstack.config import Config
12 from core.models import Service
13 from hpc.models import HpcService
14 from requestrouter.models import RequestRouterService
15 from util.logger import Logger, logging
17 logger = Logger(level=logging.INFO)
20 def __init__(self, proxy, auth, method=None):
25 def __getattr__(self, name):
26 if name.startswith("_"):
27 return getattr(self, name)
29 return APIHelper(self.proxy, self.auth, name)
31 def __call__(self, *args):
32 method = getattr(self.proxy, self.method)
33 return method(self.auth, *args)
36 def __init__(self, hostname, port=8003, username="apiuser", password="apiuser"):
37 self.connect_api(hostname, port, username, password)
39 def connect_api(self, hostname, port=8003, username="apiuser", password="apiuser"):
40 #print "https://%s:%d/COAPI/" % (hostname, port)
41 cob = xmlrpclib.ServerProxy("https://%s:%d/COAPI/" % (hostname, port), allow_none=True)
43 cob_auth["Username"] = username
44 cob_auth["AuthString"] = password
45 cob_auth["AuthMethod"] = "password"
47 onev = xmlrpclib.ServerProxy("https://%s:%d/ONEV_API/" % (hostname, port), allow_none=True)
49 onev_auth["Username"] = username
50 onev_auth["AuthString"] = password
51 onev_auth["AuthMethod"] = "password"
53 self.cob = APIHelper(cob, cob_auth)
54 self.onev = APIHelper(onev, onev_auth)
60 def make_account_name(self, x):
64 if (c in (string.lowercase + string.digits)):
68 def extract_slice_info(self, service):
69 """ Produce a dict that describes the slices for the CMI
71 slice_coblitz = <name of coblitz slice>
72 service_coblitz = <name of coblitz service>
73 hostname_coblitz = <name of first coblitz slice>
74 hostnames_coblitz = <name_of_first_cob_slice>,<name_of_second_cob_slice>,...
76 slice_cmi = <name of cmi slice>
82 for slice in service.service.all():
87 if ("coblitz" in name) or ("hpc" in name):
88 slicenames["coblitz"] = name
89 slicehosts["coblitz"] = [sliver.node.name for sliver in slice.slivers.all()]
91 slicenames["cmi"] = name
92 slicehosts["cmi"] = [sliver.node.name for sliver in slice.slivers.all()]
93 elif "dnsredir" in name:
94 slicenames["dnsredir"] = name
95 slicehosts["dnsredir"] = [sliver.node.name for sliver in slice.slivers.all()]
96 elif "dnsdemux" in name:
97 slicenames["dnsdemux"] = name
98 slicehosts["dnsdemux"] = [sliver.node.name for sliver in slice.slivers.all()]
101 if "coblitz" in slicenames:
102 base_hrn = slicenames["coblitz"].split("_")[0]
105 mapping["base_hrn"] = base_hrn
106 for (k,v) in slicenames.items():
107 mapping["slice_" + k] = v
108 mapping["service_" + k] = v.split("_",1)[1]
109 for (k,v) in slicehosts.items():
110 mapping["hostname_" + k] = v[0]
111 mapping["hostnames_" + k] = ",".join(v)
115 def get_cmi_hostname(self, hpc_service=None):
116 if (hpc_service is None):
117 hpc_service = HpcService.objects.get()
119 slice_info = self.extract_slice_info(hpc_service)
120 return slice_info["hostname_cmi"]
122 def write_slices_file(self, hpc_service=None, rr_service=None):
123 if (hpc_service is None):
124 hpc_service = HpcService.objects.get()
126 if (rr_service is None):
127 rr_service = RequestRouterService.objects.get()
129 mapping = self.extract_slice_info(hpc_service)
130 rr_mapping = self.extract_slice_info(rr_service)
132 mapping.update(rr_mapping)
140 BASE_HRN="%(base_hrn)s"
141 RELEVANT_SERVICE_NAMES=['%(service_coblitz)s', '%(service_dnsredir)s', '%(service_dnsdemux)s']
142 COBLITZ_SLICE_NAME="%(slice_coblitz)s"
144 COBLITZ_PS_SLICE_NAME="%(slice_coblitz)s"
145 DNSREDIR_SLICE_NAME="%(slice_dnsredir)s"
147 DNSREDIR_PS_SLICE_NAME="%(slice_dnsredir)s"
148 DNSDEMUX_SLICE_NAME="%(slice_dnsdemux)s"
150 DNSDEMUX_PS_SLICE_NAME="%(slice_dnsdemux)s"
151 CMI_URL="http://%(hostname_cmi)s"
153 CMI_HTTPS_PORT="8003"
154 PUPPET_MASTER_HOSTNAME="%(hostname_cmi)s"
155 PUPPET_MASTER_PORT="8140"
160 if self._client is None:
161 self._client = CmiClient(self.get_cmi_hostname())
164 if __name__ == '__main__':
165 print "testing write_slices_file"
167 lib.write_slices_file()
169 print "testing API connection"
170 lib.client.cob.GetNewObjects()
171 lib.client.onev.ListAll("CDN")