Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / backend-list.py @ 9e20fcee

History | View | Annotate | Download (2.7 kB)

1 1a894bfe Christos Stavrakakis
# Copyright 2012 GRNET S.A. All rights reserved.
2 1a894bfe Christos Stavrakakis
#
3 1a894bfe Christos Stavrakakis
# Redistribution and use in source and binary forms, with or
4 1a894bfe Christos Stavrakakis
# without modification, are permitted provided that the following
5 1a894bfe Christos Stavrakakis
# conditions are met:
6 1a894bfe Christos Stavrakakis
#
7 1a894bfe Christos Stavrakakis
#   1. Redistributions of source code must retain the above
8 1a894bfe Christos Stavrakakis
#      copyright notice, this list of conditions and the following
9 1a894bfe Christos Stavrakakis
#      disclaimer.
10 1a894bfe Christos Stavrakakis
#
11 1a894bfe Christos Stavrakakis
#   2. Redistributions in binary form must reproduce the above
12 1a894bfe Christos Stavrakakis
#      copyright notice, this list of conditions and the following
13 1a894bfe Christos Stavrakakis
#      disclaimer in the documentation and/or other materials
14 1a894bfe Christos Stavrakakis
#      provided with the distribution.
15 1a894bfe Christos Stavrakakis
#
16 1a894bfe Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 1a894bfe Christos Stavrakakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 1a894bfe Christos Stavrakakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 1a894bfe Christos Stavrakakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 1a894bfe Christos Stavrakakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 1a894bfe Christos Stavrakakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 1a894bfe Christos Stavrakakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 1a894bfe Christos Stavrakakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 1a894bfe Christos Stavrakakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 1a894bfe Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 1a894bfe Christos Stavrakakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 1a894bfe Christos Stavrakakis
# POSSIBILITY OF SUCH DAMAGE.
28 1a894bfe Christos Stavrakakis
#
29 1a894bfe Christos Stavrakakis
# The views and conclusions contained in the software and
30 1a894bfe Christos Stavrakakis
# documentation are those of the authors and should not be
31 1a894bfe Christos Stavrakakis
# interpreted as representing official policies, either expressed
32 1a894bfe Christos Stavrakakis
# or implied, of GRNET S.A.
33 1a894bfe Christos Stavrakakis
34 1a894bfe Christos Stavrakakis
from optparse import make_option
35 1a894bfe Christos Stavrakakis
from django.core.management.base import BaseCommand, CommandError
36 7a0aa449 Christos Stavrakakis
from synnefo.management.common import pprint_table
37 1a894bfe Christos Stavrakakis
38 1a894bfe Christos Stavrakakis
from synnefo.db.models import Backend
39 1a894bfe Christos Stavrakakis
40 1a894bfe Christos Stavrakakis
41 1a894bfe Christos Stavrakakis
class Command(BaseCommand):
42 1a894bfe Christos Stavrakakis
    help = "List backends"
43 1a894bfe Christos Stavrakakis
44 1a894bfe Christos Stavrakakis
    option_list = BaseCommand.option_list + (
45 1a894bfe Christos Stavrakakis
        make_option('-c',
46 cc92b70f Christos Stavrakakis
                    action='store_true',
47 cc92b70f Christos Stavrakakis
                    dest='csv',
48 cc92b70f Christos Stavrakakis
                    default=False,
49 cc92b70f Christos Stavrakakis
                    help="Use pipes to separate values"),
50 cc92b70f Christos Stavrakakis
    )
51 1a894bfe Christos Stavrakakis
52 1a894bfe Christos Stavrakakis
    def handle(self, *args, **options):
53 1a894bfe Christos Stavrakakis
        if args:
54 1a894bfe Christos Stavrakakis
            raise CommandError("Command doesn't accept any arguments")
55 1a894bfe Christos Stavrakakis
56 1a894bfe Christos Stavrakakis
        backends = Backend.objects.order_by('id')
57 1a894bfe Christos Stavrakakis
58 7a0aa449 Christos Stavrakakis
        headers = ('id', 'clustername', 'port', 'username', "VMs", 'drained',
59 7a0aa449 Christos Stavrakakis
                   'offline')
60 7a0aa449 Christos Stavrakakis
        table = []
61 1a894bfe Christos Stavrakakis
        for backend in backends:
62 1a894bfe Christos Stavrakakis
            id = str(backend.id)
63 1a894bfe Christos Stavrakakis
            vms = str(backend.virtual_machines.filter(deleted=False).count())
64 1a894bfe Christos Stavrakakis
            fields = (id, backend.clustername, str(backend.port),
65 1a894bfe Christos Stavrakakis
                      backend.username, vms, str(backend.drained),
66 1a894bfe Christos Stavrakakis
                      str(backend.offline))
67 7a0aa449 Christos Stavrakakis
            table.append(fields)
68 1a894bfe Christos Stavrakakis
69 7a0aa449 Christos Stavrakakis
        separator = " | " if options['csv'] else None
70 7a0aa449 Christos Stavrakakis
        pprint_table(self.stdout, table, headers, separator)