Revision 8b178e6b snf-cyclades-app/synnefo/management/pprint.py
b/snf-cyclades-app/synnefo/management/pprint.py | ||
---|---|---|
40 | 40 |
from synnefo.db.models import Backend, pooled_rapi_client |
41 | 41 |
from synnefo.logic.rapi import GanetiApiError |
42 | 42 |
from synnefo.logic.reconciliation import nics_from_instance |
43 |
from synnefo.management.common import get_image |
|
43 | 44 |
|
44 | 45 |
|
45 | 46 |
def pprint_network(network, display_mails=False, stdout=None, title=None): |
... | ... | |
56 | 57 |
("backend-name", network.backend_id), |
57 | 58 |
("state", network.state), |
58 | 59 |
("userid", userid), |
59 |
("username", ucache.get_name(userid) if display_mails else userid),
|
|
60 |
("username", ucache.get_name(userid) if display_mails else None),
|
|
60 | 61 |
("public", network.public), |
61 | 62 |
("floating_ip_pool", network.floating_ip_pool), |
62 | 63 |
("external_router", network.external_router), |
... | ... | |
214 | 215 |
title=title) |
215 | 216 |
|
216 | 217 |
vm.put_client(client) |
218 |
|
|
219 |
|
|
220 |
def pprint_server(server, display_mails=False, stdout=None, title=None): |
|
221 |
if stdout is None: |
|
222 |
stdout = sys.stdout |
|
223 |
if title is None: |
|
224 |
title = "State of Server %s in DB" % server.id |
|
225 |
|
|
226 |
ucache = UserCache(ASTAKOS_BASE_URL, ASTAKOS_TOKEN) |
|
227 |
userid = server.userid |
|
228 |
|
|
229 |
try: |
|
230 |
image = get_image(server.imageid, server.userid)['name'] |
|
231 |
except: |
|
232 |
image = server.imageid |
|
233 |
|
|
234 |
server_dict = OrderedDict([ |
|
235 |
("id", server.id), |
|
236 |
("name", server.name), |
|
237 |
("userid", server.userid), |
|
238 |
("username", ucache.get_name(userid) if display_mails else None), |
|
239 |
("flavor_id", server.flavor_id), |
|
240 |
("flavor_name", server.flavor.name), |
|
241 |
("imageid", server.imageid), |
|
242 |
("image_name", image), |
|
243 |
("state", server.operstate), |
|
244 |
("backend", server.backend), |
|
245 |
("deleted", server.deleted), |
|
246 |
("action", server.action), |
|
247 |
("task", server.task), |
|
248 |
("task_job_id", server.task_job_id), |
|
249 |
("backendjobid", server.backendjobid), |
|
250 |
("backendopcode", server.backendopcode), |
|
251 |
("backendjobstatus", server.backendjobstatus), |
|
252 |
("backend_time", server.backendtime), |
|
253 |
]) |
|
254 |
|
|
255 |
pprint_table(stdout, server_dict.items(), None, separator=" | ", |
|
256 |
title=title) |
|
257 |
|
|
258 |
|
|
259 |
def pprint_server_nics(server, stdout=None, title=None): |
|
260 |
if title is None: |
|
261 |
title = "NICs of Server %s" % server.id |
|
262 |
if stdout is None: |
|
263 |
stdout = sys.stdout |
|
264 |
|
|
265 |
nics = [] |
|
266 |
for nic in server.nics.all(): |
|
267 |
nics.append((nic.name, nic.index, nic.mac, nic.ipv4_address, |
|
268 |
nic.ipv6_address, nic.network, nic.firewall_profile, |
|
269 |
nic.state)) |
|
270 |
|
|
271 |
headers = ["Name", "Index", "MAC", "IPv4 Address", "IPv6 Address", |
|
272 |
"Network", "Firewall", "State"] |
|
273 |
pprint_table(stdout, nics, headers, separator=" | ", |
|
274 |
title=title) |
|
275 |
|
|
276 |
|
|
277 |
def pprint_server_in_ganeti(server, print_jobs=False, stdout=None, title=None): |
|
278 |
if stdout is None: |
|
279 |
stdout = sys.stdout |
|
280 |
if title is None: |
|
281 |
title = "State of Server %s in Ganeti" % server.id |
|
282 |
|
|
283 |
client = server.get_client() |
|
284 |
try: |
|
285 |
server_info = client.GetInstance(server.backend_vm_id) |
|
286 |
except GanetiApiError as e: |
|
287 |
if e.code == 404: |
|
288 |
stdout.write("NIC seems attached to server %s, but" |
|
289 |
" server does not exist in backend.\n" |
|
290 |
% server) |
|
291 |
return |
|
292 |
raise e |
|
293 |
server.put_client(client) |
|
294 |
|
|
295 |
GANETI_INSTANCE_FIELDS = ('name', 'oper_state', 'admin_state', 'status', |
|
296 |
'pnode', 'snode', 'network_port', |
|
297 |
'disk_template', 'disk_usage', |
|
298 |
'oper_ram', 'oper_vcpus', 'mtime') |
|
299 |
server_dict = OrderedDict([(k, server_info.get(k)) |
|
300 |
for k in GANETI_INSTANCE_FIELDS]) |
|
301 |
|
|
302 |
pprint_table(stdout, server_dict.items(), None, separator=" | ", |
|
303 |
title="NICs of Server %s in Ganeti" % server.id) |
|
304 |
stdout.write("\n") |
|
305 |
|
|
306 |
nics = nics_from_instance(server_info) |
|
307 |
nics_keys = ["ip", "mac", "name", "network"] |
|
308 |
nics_values = [[nic[key] for key in nics_keys] for nic in nics] |
|
309 |
pprint_table(stdout, nics_values, nics_keys, separator=" | ", |
|
310 |
title=title) |
|
311 |
|
|
312 |
if not print_jobs: |
|
313 |
return |
|
314 |
|
|
315 |
client = server.get_client() |
|
316 |
jobs = client.GetJobs(bulk=True) |
|
317 |
server_jobs = filter( |
|
318 |
lambda x: server.backend_vm_id in (" ".join(x.get("summary"))), jobs) |
|
319 |
|
|
320 |
GANETI_JOB_FIELDS = ('id', 'status', 'summary', 'opresult', 'opstatus', |
|
321 |
'oplog', 'start_ts', 'end_ts') |
|
322 |
for server_job in server_jobs: |
|
323 |
stdout.write("\n") |
|
324 |
values = [server_job.get(k) for k in GANETI_JOB_FIELDS] |
|
325 |
pprint_table(stdout, zip(GANETI_JOB_FIELDS, values), None, |
|
326 |
separator=" | ", |
|
327 |
title="Ganeti Job %s" % server_job["id"]) |
|
328 |
server.put_client(client) |
Also available in: Unified diff