Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#!/usr/bin/env python
import sys
import httplib
import json
import io
################## Start API service class ##################
class api_response():
__status = None
__data = None
__msg = None
def __init__(self, status, data, msg):
self.setStatus(status)
self.setData(data)
self.setMsg(msg)
def setStatus(self, status):
self.__status = status
def getStatus(self):
return self.__status
def setData(self, data):
self.__data = data
def getData(self):
return self.__data
def setMsg(self, msg):
self.__msg = msg
def getMsg(self):
return self.__msg
class api_request():
@staticmethod
def httpGet(url, host, port, header):
conn = httplib.HTTPConnection(host, port)
conn.request("GET", url, headers = header)
res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg)
return response
@staticmethod
def httpsGet(url, host, port, header):
conn = httplib.HTTPSConnection(host, port)
conn.request("GET", url, headers = header)
res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg)
return response
@staticmethod
def httpPost(url, host, port, params, headers):
conn = httplib.HTTPConnection(host, port)
conn.request("POST", url, params, headers)
res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg)
return response
@staticmethod
def httpsPost(url, host, port, params, headers):
conn = httplib.HTTPSConnection(host, port)
conn.request("POST", url, params, headers)
res = conn.getresponse()
response = api_response(res.status, res.read(), res.msg)
return response
################## End API service class ##################
################## Start Structure service function ##################
def add_host(struct, host, enable, state):
find = 0
if 'hosts' not in struct.keys():
struct['hosts'] = []
for h in iter(struct['hosts']):
if h['host'] == host:
h['services'][service] = state
find = 1
else:
continue
if find == 0:
struct['hosts'].append({'host' : host, 'enable' : enable, 'state' : state})
################## End Structure service function ##################
################## Start Prisma class ##################
class Prisma:
__username = ''
__tenant = ''
__token = ''
__password = ''
__tenantID = None
def __init__(self, username, tenant, password):
auth = '{"auth": {"tenantName": "%s","passwordCredentials": {"username": "%s","password": "%s"}}}' % (tenant, username, password)
header = {"Content-Type": "application/json", "Accept": "application/json"}
res = api_request.httpsPost('/v2.0/tokens','prisma-cloud.ba.infn.it', 5000, auth, header)
res_json = json.loads(res.getData())
self.setUsername(username)
self.setTenant(tenant)
self.setTenantID(res_json['access']['token']['tenant']['id'])
self.setToken(res_json['access']['token']['id'])
self.setPassword(password)
def setUsername(self, username):
self.__username = username
def setPassword(self, password):
self.__password = password
def setTenant(self, tenant):
self.__tenant = tenant
def getTenant(self):
return self.__tenant
def setTenantID(self, tenantID):
self.__tenantID = tenantID
def getTenantID(self):
# tenantID = None
# res = api_request.httpsGet("%s%s" % ('/v2.0/tenants?name=', self.getTenant()), 'prisma-cloud.ba.infn.it', 35357, self.getAuth())
# if res.getStatus() == 200:
# tenantID = json.loads(res.getData())['tenant']['id']
# return tenantID
return self.__tenantID
def setToken(self, token):
self.__token = token
def getToken(self):
return self.__token
def getAuth(self):
return {"X-Auth-Token": self.getToken()}
def nova_service_list(self):
service = None
res = api_request.httpGet("%s%s%s" % ('/v2/', self.getTenantID(), '/os-services'), 'prisma-cloud.ba.infn.it', 8774, self.getAuth())
if res.getStatus() == 200:
service = json.loads(res.getData())
return service
def neutron_agent_list(self):
agent = None
res = api_request.httpGet('/v2.0/agents.json', 'prisma-cloud-net.ba.infn.it', 9696, self.getAuth())
if res.getStatus() == 200:
agent = json.loads(res.getData())
return agent
def glance_images(self):
images = None
res = api_request.httpGet('/v1.1/images', 'prisma-cloud.ba.infn.it', '9292', self.getAuth())
if res.getStatus() == 200:
images = json.loads(res.getData())
return images
def cinder_blocks_list(self):
blocks = None
res = api_request.httpGet('%s%s%s' % ('/v2/', self.getTenantID(), '/os-services'), 'prisma-cloud.ba.infn.it', '8776', self.getAuth())
if res.getStatus() == 200:
blocks = json.loads(res.getData())
return blocks
def swift_blocks_list(self):
blocks = None
res = api_request.httpsGet('%s%s%s' % ('/v1/AUTH_', self.getTenantID(), '?format=json'), 'prisma-swift.ba.infn.it', '8080', self.getAuth())
if res.getStatus() == 200:
blocks = json.loads(res.getData())
return blocks
################## End Prisma class ##################
def encode():
struct = {}
prisma = Prisma('admin', 'admin', 'password_da_cambiare')
nova = prisma.nova_service_list()
if nova != None:
for i in iter(nova['services']):
if i['binary'] == 'nova-compute':
add_host(struct, i['host'], 0 if i['status'] == 'disabled' else 1, 0 if i['state'] == 'down' else 1)
# print json.dumps(nova, sort_keys=True, indent=4)
return struct
def main():
print encode()
if __name__ == "__main__":
main()