Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / management / commands / subnet-list.py @ 9835a70d

History | View | Annotate | Download (3.5 kB)

1 bf42a16c Dionysis Grigoropoulos
# Copyright 2013 GRNET S.A. All rights reserved.
2 bf42a16c Dionysis Grigoropoulos
#
3 bf42a16c Dionysis Grigoropoulos
# Redistribution and use in source and binary forms, with or
4 bf42a16c Dionysis Grigoropoulos
# without modification, are permitted provided that the following
5 bf42a16c Dionysis Grigoropoulos
# conditions are met:
6 bf42a16c Dionysis Grigoropoulos
#
7 bf42a16c Dionysis Grigoropoulos
#   1. Redistributions of source code must retain the above
8 bf42a16c Dionysis Grigoropoulos
#      copyright notice, this list of conditions and the following
9 bf42a16c Dionysis Grigoropoulos
#      disclaimer.
10 bf42a16c Dionysis Grigoropoulos
#
11 bf42a16c Dionysis Grigoropoulos
#   2. Redistributions in binary form must reproduce the above
12 bf42a16c Dionysis Grigoropoulos
#      copyright notice, this list of conditions and the following
13 bf42a16c Dionysis Grigoropoulos
#      disclaimer in the documentation and/or other materials
14 bf42a16c Dionysis Grigoropoulos
#      provided with the distribution.
15 bf42a16c Dionysis Grigoropoulos
#
16 bf42a16c Dionysis Grigoropoulos
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS"" AND ANY EXPRESS
17 bf42a16c Dionysis Grigoropoulos
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 bf42a16c Dionysis Grigoropoulos
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 bf42a16c Dionysis Grigoropoulos
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 bf42a16c Dionysis Grigoropoulos
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 bf42a16c Dionysis Grigoropoulos
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 bf42a16c Dionysis Grigoropoulos
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 bf42a16c Dionysis Grigoropoulos
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 bf42a16c Dionysis Grigoropoulos
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 bf42a16c Dionysis Grigoropoulos
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 bf42a16c Dionysis Grigoropoulos
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 bf42a16c Dionysis Grigoropoulos
# POSSIBILITY OF SUCH DAMAGE.
28 bf42a16c Dionysis Grigoropoulos
#
29 bf42a16c Dionysis Grigoropoulos
# The views and conclusions contained in the software and
30 bf42a16c Dionysis Grigoropoulos
# documentation are those of the authors and should not be
31 bf42a16c Dionysis Grigoropoulos
# interpreted as representing official policies, either expressed
32 bf42a16c Dionysis Grigoropoulos
# or implied, of GRNET S.A.
33 bf42a16c Dionysis Grigoropoulos
34 bf42a16c Dionysis Grigoropoulos
from optparse import make_option
35 bf42a16c Dionysis Grigoropoulos
36 6f99f94f Dionysis Grigoropoulos
from snf_django.management.commands import ListCommand, CommandError
37 bf42a16c Dionysis Grigoropoulos
from synnefo.settings import (CYCLADES_SERVICE_TOKEN as ASTAKOS_TOKEN,
38 9835a70d Christos Stavrakakis
                              ASTAKOS_AUTH_URL)
39 53162472 Christos Stavrakakis
from synnefo.db.models import Subnet
40 6f99f94f Dionysis Grigoropoulos
41 bf42a16c Dionysis Grigoropoulos
from logging import getLogger
42 bf42a16c Dionysis Grigoropoulos
log = getLogger(__name__)
43 bf42a16c Dionysis Grigoropoulos
44 bf42a16c Dionysis Grigoropoulos
45 bf42a16c Dionysis Grigoropoulos
class Command(ListCommand):
46 bf42a16c Dionysis Grigoropoulos
    help = "List subnets"
47 bf42a16c Dionysis Grigoropoulos
48 bf42a16c Dionysis Grigoropoulos
    option_list = ListCommand.option_list + (
49 bf42a16c Dionysis Grigoropoulos
        make_option(
50 bf42a16c Dionysis Grigoropoulos
            "--ipv4",
51 bf42a16c Dionysis Grigoropoulos
            action="store_true",
52 bf42a16c Dionysis Grigoropoulos
            dest="ipv4",
53 bf42a16c Dionysis Grigoropoulos
            default=False,
54 bf42a16c Dionysis Grigoropoulos
            help="List only IPv4 subnets"),
55 bf42a16c Dionysis Grigoropoulos
        make_option(
56 bf42a16c Dionysis Grigoropoulos
            "--ipv6",
57 bf42a16c Dionysis Grigoropoulos
            action="store_true",
58 bf42a16c Dionysis Grigoropoulos
            dest="ipv6",
59 bf42a16c Dionysis Grigoropoulos
            default=False,
60 bf42a16c Dionysis Grigoropoulos
            help="List only IPv6 subnets"),
61 bf42a16c Dionysis Grigoropoulos
        make_option(
62 bf42a16c Dionysis Grigoropoulos
            "--dhcp",
63 bf42a16c Dionysis Grigoropoulos
            action="store_true",
64 bf42a16c Dionysis Grigoropoulos
            dest="dhcp",
65 bf42a16c Dionysis Grigoropoulos
            default=False,
66 bf42a16c Dionysis Grigoropoulos
            help="List only subnets that have DHCP/SLAC enabled"),
67 bf42a16c Dionysis Grigoropoulos
    )
68 bf42a16c Dionysis Grigoropoulos
69 bf42a16c Dionysis Grigoropoulos
    object_class = Subnet
70 9835a70d Christos Stavrakakis
    astakos_url = ASTAKOS_AUTH_URL
71 bf42a16c Dionysis Grigoropoulos
    astakos_token = ASTAKOS_TOKEN
72 bf42a16c Dionysis Grigoropoulos
73 bf42a16c Dionysis Grigoropoulos
    FIELDS = {
74 bf42a16c Dionysis Grigoropoulos
        "id": ("id", "ID of the subnet"),
75 53162472 Christos Stavrakakis
        "network": ("network_id", "ID of the network the subnet belongs to"),
76 bf42a16c Dionysis Grigoropoulos
        "name": ("name", "Name of the subnet"),
77 53162472 Christos Stavrakakis
        "user.uuid": ("network.userid", "The UUID of the subnet's owner"),
78 bf42a16c Dionysis Grigoropoulos
        "cidr": ("cidr", "The CIDR of the subnet"),
79 bf42a16c Dionysis Grigoropoulos
        "ipversion": ("ipversion", "The IP version of the subnet"),
80 6f99f94f Dionysis Grigoropoulos
        "gateway": ("gateway", "The gateway IP of the subnet"),
81 6f99f94f Dionysis Grigoropoulos
        "dhcp": ("dhcp", "DHCP flag of the subnet"),
82 bf42a16c Dionysis Grigoropoulos
    }
83 bf42a16c Dionysis Grigoropoulos
84 6f99f94f Dionysis Grigoropoulos
    fields = ["id", "network", "name", "user.uuid", "cidr", "ipversion",
85 6f99f94f Dionysis Grigoropoulos
              "gateway", "dhcp"]
86 bf42a16c Dionysis Grigoropoulos
87 bf42a16c Dionysis Grigoropoulos
    def handle_args(self, *args, **options):
88 bf42a16c Dionysis Grigoropoulos
        if options["ipv4"] and options["ipv6"]:
89 bf42a16c Dionysis Grigoropoulos
            raise CommandError("Use either --ipv4 or --ipv6, not both")
90 bf42a16c Dionysis Grigoropoulos
91 bf42a16c Dionysis Grigoropoulos
        if options["ipv4"]:
92 bf42a16c Dionysis Grigoropoulos
            self.filters["ipversion"] = 4
93 bf42a16c Dionysis Grigoropoulos
94 bf42a16c Dionysis Grigoropoulos
        if options["ipv6"]:
95 bf42a16c Dionysis Grigoropoulos
            self.filters["ipversion"] = 6
96 bf42a16c Dionysis Grigoropoulos
97 6f99f94f Dionysis Grigoropoulos
        if options["dhcp"]:
98 bf42a16c Dionysis Grigoropoulos
            self.filters["dhcp"] = True