Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / management / commands / network-list.py @ c51f3a08

History | View | Annotate | Download (4.9 kB)

1 8fad925a Giorgos Verigakis
# Copyright 2012 GRNET S.A. All rights reserved.
2 8fad925a Giorgos Verigakis
#
3 8fad925a Giorgos Verigakis
# Redistribution and use in source and binary forms, with or
4 8fad925a Giorgos Verigakis
# without modification, are permitted provided that the following
5 8fad925a Giorgos Verigakis
# conditions are met:
6 8fad925a Giorgos Verigakis
#
7 8fad925a Giorgos Verigakis
#   1. Redistributions of source code must retain the above
8 8fad925a Giorgos Verigakis
#      copyright notice, this list of conditions and the following
9 8fad925a Giorgos Verigakis
#      disclaimer.
10 8fad925a Giorgos Verigakis
#
11 8fad925a Giorgos Verigakis
#   2. Redistributions in binary form must reproduce the above
12 8fad925a Giorgos Verigakis
#      copyright notice, this list of conditions and the following
13 8fad925a Giorgos Verigakis
#      disclaimer in the documentation and/or other materials
14 8fad925a Giorgos Verigakis
#      provided with the distribution.
15 8fad925a Giorgos Verigakis
#
16 8fad925a Giorgos Verigakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 8fad925a Giorgos Verigakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 8fad925a Giorgos Verigakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 8fad925a Giorgos Verigakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 8fad925a Giorgos Verigakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 8fad925a Giorgos Verigakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 8fad925a Giorgos Verigakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 8fad925a Giorgos Verigakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 8fad925a Giorgos Verigakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 8fad925a Giorgos Verigakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 8fad925a Giorgos Verigakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 8fad925a Giorgos Verigakis
# POSSIBILITY OF SUCH DAMAGE.
28 8fad925a Giorgos Verigakis
#
29 8fad925a Giorgos Verigakis
# The views and conclusions contained in the software and
30 8fad925a Giorgos Verigakis
# documentation are those of the authors and should not be
31 8fad925a Giorgos Verigakis
# interpreted as representing official policies, either expressed
32 8fad925a Giorgos Verigakis
# or implied, of GRNET S.A.
33 8fad925a Giorgos Verigakis
34 8fad925a Giorgos Verigakis
from optparse import make_option
35 8fad925a Giorgos Verigakis
36 8fad925a Giorgos Verigakis
from django.core.management.base import BaseCommand, CommandError
37 c51f3a08 Stratos Psomadakis
from synnefo.management.common import format_bool, filter_results, UUIDCache
38 8fad925a Giorgos Verigakis
from synnefo.db.models import Network
39 7a0aa449 Christos Stavrakakis
from synnefo.management.common import pprint_table
40 8fad925a Giorgos Verigakis
41 bad9404c Christos Stavrakakis
FIELDS = Network._meta.get_all_field_names()
42 bad9404c Christos Stavrakakis
43 8fad925a Giorgos Verigakis
44 8fad925a Giorgos Verigakis
class Command(BaseCommand):
45 8fad925a Giorgos Verigakis
    help = "List networks"
46 8fad925a Giorgos Verigakis
47 8fad925a Giorgos Verigakis
    option_list = BaseCommand.option_list + (
48 8fad925a Giorgos Verigakis
        make_option('-c',
49 8fad925a Giorgos Verigakis
            action='store_true',
50 8fad925a Giorgos Verigakis
            dest='csv',
51 8fad925a Giorgos Verigakis
            default=False,
52 8fad925a Giorgos Verigakis
            help="Use pipes to separate values"),
53 8fad925a Giorgos Verigakis
        make_option('--deleted',
54 8fad925a Giorgos Verigakis
            action='store_true',
55 8fad925a Giorgos Verigakis
            dest='deleted',
56 8fad925a Giorgos Verigakis
            default=False,
57 af88de58 Christos Stavrakakis
            help="Include deleted networks"),
58 8fad925a Giorgos Verigakis
        make_option('--public',
59 8fad925a Giorgos Verigakis
            action='store_true',
60 8fad925a Giorgos Verigakis
            dest='public',
61 8fad925a Giorgos Verigakis
            default=False,
62 8fad925a Giorgos Verigakis
            help="List only public networks"),
63 cc3f266e Christos Stavrakakis
        make_option('--ipv6',
64 cc3f266e Christos Stavrakakis
            action='store_true',
65 cc3f266e Christos Stavrakakis
            dest='ipv6',
66 cc3f266e Christos Stavrakakis
            default=False,
67 cc3f266e Christos Stavrakakis
            help="Show IPv6 information of the network"),
68 bad9404c Christos Stavrakakis
        make_option('--filter-by',
69 bad9404c Christos Stavrakakis
            dest='filter_by',
70 bad9404c Christos Stavrakakis
            help="Filter results. Comma seperated list of key 'cond' val pairs"
71 bad9404c Christos Stavrakakis
                 " that displayed entries must satisfy. e.g."
72 bad9404c Christos Stavrakakis
                 " --filter-by \"name=Network-1,link!=prv0\"."
73 c51f3a08 Stratos Psomadakis
                 " Available keys are: %s" % ", ".join(FIELDS)),
74 c51f3a08 Stratos Psomadakis
        make_option('--uuids',
75 c51f3a08 Stratos Psomadakis
            action='store_true',
76 c51f3a08 Stratos Psomadakis
            dest='use_uuids',
77 c51f3a08 Stratos Psomadakis
            default=False,
78 c51f3a08 Stratos Psomadakis
            help="Display UUIDs instead of user emails"),
79 8fad925a Giorgos Verigakis
        )
80 8fad925a Giorgos Verigakis
81 8fad925a Giorgos Verigakis
    def handle(self, *args, **options):
82 8fad925a Giorgos Verigakis
        if args:
83 8fad925a Giorgos Verigakis
            raise CommandError("Command doesn't accept any arguments")
84 8fad925a Giorgos Verigakis
85 8fad925a Giorgos Verigakis
        if options['deleted']:
86 af88de58 Christos Stavrakakis
            networks = Network.objects.all()
87 8fad925a Giorgos Verigakis
        else:
88 af88de58 Christos Stavrakakis
            networks = Network.objects.filter(deleted=False)
89 8fad925a Giorgos Verigakis
90 8fad925a Giorgos Verigakis
        if options['public']:
91 8fad925a Giorgos Verigakis
            networks = networks.filter(public=True)
92 8fad925a Giorgos Verigakis
93 bad9404c Christos Stavrakakis
        filter_by = options['filter_by']
94 bad9404c Christos Stavrakakis
        if filter_by:
95 bad9404c Christos Stavrakakis
            networks = filter_results(networks, filter_by)
96 bad9404c Christos Stavrakakis
97 b7d38981 Dimitris Aragiorgis
        headers = ['id', 'name', 'flavor', 'owner',
98 cc3f266e Christos Stavrakakis
                  'mac_prefix', 'dhcp', 'state', 'link', 'vms', 'public']
99 cc3f266e Christos Stavrakakis
100 cc3f266e Christos Stavrakakis
        if options['ipv6']:
101 7a0aa449 Christos Stavrakakis
            headers.extend(['IPv6 Subnet', 'IPv6 Gateway'])
102 cc3f266e Christos Stavrakakis
        else:
103 7a0aa449 Christos Stavrakakis
            headers.extend(['IPv4 Subnet', 'IPv4 Gateway'])
104 8fad925a Giorgos Verigakis
105 c51f3a08 Stratos Psomadakis
        if options['use_uuids'] is False:
106 c51f3a08 Stratos Psomadakis
            ucache = UUIDCache()
107 c51f3a08 Stratos Psomadakis
108 7a0aa449 Christos Stavrakakis
        table = []
109 90b67503 Christos Stavrakakis
        for network in networks.order_by("id"):
110 c51f3a08 Stratos Psomadakis
            user = network.userid
111 c51f3a08 Stratos Psomadakis
            if options['use_uuids'] is False:
112 c51f3a08 Stratos Psomadakis
                user = ucache.get_user(network.userid)
113 c51f3a08 Stratos Psomadakis
114 cc3f266e Christos Stavrakakis
            fields = [str(network.id),
115 8fad925a Giorgos Verigakis
                      network.name,
116 b7d38981 Dimitris Aragiorgis
                      network.flavor,
117 c51f3a08 Stratos Psomadakis
                      user or '',
118 bf1d3a70 Christos Stavrakakis
                      network.mac_prefix or '',
119 bf1d3a70 Christos Stavrakakis
                      str(network.dhcp),
120 8fad925a Giorgos Verigakis
                      network.state,
121 bf1d3a70 Christos Stavrakakis
                      network.link or '',
122 8fad925a Giorgos Verigakis
                      str(network.machines.count()),
123 cc3f266e Christos Stavrakakis
                      format_bool(network.public)]
124 cc3f266e Christos Stavrakakis
125 cc3f266e Christos Stavrakakis
            if options['ipv6']:
126 cc3f266e Christos Stavrakakis
                fields.extend([network.subnet6 or '', network.gateway6 or ''])
127 cc3f266e Christos Stavrakakis
            else:
128 cc3f266e Christos Stavrakakis
                fields.extend([network.subnet, network.gateway or ''])
129 7a0aa449 Christos Stavrakakis
            table.append(fields)
130 8fad925a Giorgos Verigakis
131 7a0aa449 Christos Stavrakakis
        separator = " | " if options['csv'] else None
132 7a0aa449 Christos Stavrakakis
        pprint_table(self.stdout, table, headers, separator)