blob: bb1c2638893ea3716f48b48793a9edcd021f88db [file] [log] [blame]
Scott Baker25467ff2016-08-04 09:50:22 -07001import os
2import base64
3import string
4import sys
5import xmlrpclib
6
7if __name__ == '__main__':
8 sys.path.append("/opt/xos")
9 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
10
11from xos.config import Config
12from core.models import Service
13from services.hpc.models import HpcService
14from services.requestrouter.models import RequestRouterService
15from xos.logger import Logger, logging
16
17logger = Logger(level=logging.INFO)
18
19class APIHelper:
20 def __init__(self, proxy, auth, method=None):
21 self.proxy = proxy
22 self.auth = auth
23 self.method = method
24
25 def __getattr__(self, name):
26 if name.startswith("_"):
27 return getattr(self, name)
28 else:
29 return APIHelper(self.proxy, self.auth, name)
30
31 def __call__(self, *args):
32 method = getattr(self.proxy, self.method)
33 return method(self.auth, *args)
34
35class CmiClient:
36 def __init__(self, hostname, port=8003, username="apiuser", password="apiuser"):
37 self.connect_api(hostname, port, username, password)
38
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)
42 cob_auth = {}
43 cob_auth["Username"] = username
44 cob_auth["AuthString"] = password
45 cob_auth["AuthMethod"] = "password"
46
47 onev = xmlrpclib.ServerProxy("https://%s:%d/ONEV_API/" % (hostname, port), allow_none=True)
48 onev_auth = {}
49 onev_auth["Username"] = username
50 onev_auth["AuthString"] = password
51 onev_auth["AuthMethod"] = "password"
52
53 self.cob = APIHelper(cob, cob_auth)
54 self.onev = APIHelper(onev, onev_auth)
55
56class HpcLibrary:
57 def __init__(self):
58 self._client = None
59
60 def make_account_name(self, x):
61 x=x.lower()
62 y = ""
63 for c in x:
64 if (c in (string.lowercase + string.digits)):
65 y = y + c
66 return y[:20]
67
68 def get_hpc_service(self):
69 hpc_service_name = getattr(Config(), "observer_hpc_service", None)
70 if hpc_service_name:
71 hpc_service = HpcService.objects.filter(name = hpc_service_name)
72 else:
73 hpc_service = HpcService.objects.all()
74
75 if not hpc_service:
76 if hpc_service_name:
77 raise Exception("No HPC Service with name %s" % hpc_service_name)
78 else:
79 raise Exception("No HPC Services")
80 hpc_service = hpc_service[0]
81
82 return hpc_service
83
84 def get_cmi_hostname(self, hpc_service=None):
85 if getattr(Config(),"observer_cmi_hostname",None):
86 return getattr(Config(),"observer_cmi_hostname")
87
88 if (hpc_service is None):
89 hpc_service = self.get_hpc_service()
90
91 if hpc_service.cmi_hostname:
92 return hpc_service.cmi_hostname
93
94 try:
95 slices = hpc_service.slices.all()
96 except:
97 # deal with buggy data model
98 slices = hpc_service.service.all()
99
100 for slice in slices:
101 if slice.name.endswith("cmi"):
102 for instance in slice.instances.all():
103 if instance.node:
104 return instance.node.name
105
106 raise Exception("Failed to find a CMI instance")
107
108 @property
109 def client(self):
110 if self._client is None:
111 self._client = CmiClient(self.get_cmi_hostname())
112 return self._client
113
114if __name__ == '__main__':
115 import django
116 django.setup()
117
118 lib = HpcLibrary()
119
120 print "testing API connection to", lib.get_cmi_hostname()
121 lib.client.cob.GetNewObjects()
122 lib.client.onev.ListAll("CDN")
123
124
125
126