Revision b0e7f310 snf-cyclades-app/synnefo/api/management/commands/flavor-list.py
b/snf-cyclades-app/synnefo/api/management/commands/flavor-list.py | ||
---|---|---|
1 |
# Copyright 2012 GRNET S.A. All rights reserved. |
|
1 |
# Copyright 2012-2013 GRNET S.A. All rights reserved.
|
|
2 | 2 |
# |
3 | 3 |
# Redistribution and use in source and binary forms, with or |
4 | 4 |
# without modification, are permitted provided that the following |
... | ... | |
31 | 31 |
# interpreted as representing official policies, either expressed |
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 |
from optparse import make_option |
|
34 |
from synnefo.webproject.management.commands import ListCommand |
|
35 |
from synnefo.db.models import Flavor, VirtualMachine |
|
35 | 36 |
|
36 |
from django.core.management.base import BaseCommand, CommandError |
|
37 |
from synnefo.management.common import (format_bool, filter_results, |
|
38 |
pprint_table) |
|
39 | 37 |
|
40 |
from synnefo.db.models import Flavor |
|
38 |
class Command(ListCommand): |
|
39 |
help = "List available server flavors" |
|
41 | 40 |
|
42 |
FIELDS = Flavor._meta.get_all_field_names() |
|
41 |
object_class = Flavor |
|
42 |
deleted_field = "deleted" |
|
43 | 43 |
|
44 |
def get_vms(flavor): |
|
45 |
return VirtualMachine.objects.filter(flavor=flavor, deleted=False)\ |
|
46 |
.count() |
|
44 | 47 |
|
45 |
class Command(BaseCommand): |
|
46 |
help = "List flavors" |
|
48 |
FIELDS = { |
|
49 |
"id": ("id", "Flavor's unique ID"), |
|
50 |
"name": ("name", "Flavor's unique name"), |
|
51 |
"cpu": ("cpu", "Number of CPUs"), |
|
52 |
"ram": ("ram", "Size(MB) of RAM"), |
|
53 |
"disk": ("disk", "Size(GB) of disk"), |
|
54 |
"template": ("disk_template", "Disk template"), |
|
55 |
"vms": (get_vms, "Number of active servers using this flavor") |
|
56 |
} |
|
47 | 57 |
|
48 |
option_list = BaseCommand.option_list + ( |
|
49 |
make_option( |
|
50 |
'-c', |
|
51 |
action='store_true', |
|
52 |
dest='csv', |
|
53 |
default=False, |
|
54 |
help="Use pipes to separate values"), |
|
55 |
make_option( |
|
56 |
'--deleted', |
|
57 |
action='store_true', |
|
58 |
dest='deleted', |
|
59 |
default=False, |
|
60 |
help="Include deleted flavors"), |
|
61 |
make_option( |
|
62 |
'--filter-by', |
|
63 |
dest='filter_by', |
|
64 |
help="Filter results. Comma seperated list of key=val pairs" |
|
65 |
" that displayed entries must satisfy. e.g." |
|
66 |
" --filter-by \"cpu=1,ram!=1024\"." |
|
67 |
"Available keys are: %s" % ", ".join(FIELDS)) |
|
68 |
) |
|
69 |
|
|
70 |
def handle(self, *args, **options): |
|
71 |
if args: |
|
72 |
raise CommandError("Command doesn't accept any arguments") |
|
73 |
|
|
74 |
if options['deleted']: |
|
75 |
flavors = Flavor.objects.all() |
|
76 |
else: |
|
77 |
flavors = Flavor.objects.filter(deleted=False) |
|
78 |
|
|
79 |
filter_by = options['filter_by'] |
|
80 |
if filter_by: |
|
81 |
flavors = filter_results(flavors, filter_by) |
|
82 |
|
|
83 |
headers = ('id', 'name', 'cpus', 'ram', 'disk', 'template', 'deleted') |
|
84 |
table = [] |
|
85 |
for flavor in flavors.order_by('id'): |
|
86 |
id = str(flavor.id) |
|
87 |
cpu = str(flavor.cpu) |
|
88 |
ram = str(flavor.ram) |
|
89 |
disk = str(flavor.disk) |
|
90 |
deleted = format_bool(flavor.deleted) |
|
91 |
fields = (id, flavor.name, cpu, ram, disk, flavor.disk_template, |
|
92 |
deleted) |
|
93 |
|
|
94 |
table.append(fields) |
|
95 |
|
|
96 |
separator = " | " if options['csv'] else None |
|
97 |
pprint_table(self.stdout, table, headers, separator) |
|
58 |
fields = ["id", "name", "cpu", "ram", "disk", "template", "vms"] |
Also available in: Unified diff