Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / subnet-list.py @ fa532396

History | View | Annotate | Download (3.8 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 6a439d95 Dionysis Grigoropoulos
        make_option(
68 6a439d95 Dionysis Grigoropoulos
            "--public",
69 6a439d95 Dionysis Grigoropoulos
            action="store_true",
70 6a439d95 Dionysis Grigoropoulos
            dest="public",
71 6a439d95 Dionysis Grigoropoulos
            default=False,
72 6a439d95 Dionysis Grigoropoulos
            help="List only public subnets"),
73 bf42a16c Dionysis Grigoropoulos
    )
74 bf42a16c Dionysis Grigoropoulos
75 bf42a16c Dionysis Grigoropoulos
    object_class = Subnet
76 9b5dd109 Christos Stavrakakis
    astakos_auth_url = ASTAKOS_AUTH_URL
77 bf42a16c Dionysis Grigoropoulos
    astakos_token = ASTAKOS_TOKEN
78 91430ce0 Dionysis Grigoropoulos
    deleted_field = "deleted"
79 bf42a16c Dionysis Grigoropoulos
80 bf42a16c Dionysis Grigoropoulos
    FIELDS = {
81 bf42a16c Dionysis Grigoropoulos
        "id": ("id", "ID of the subnet"),
82 53162472 Christos Stavrakakis
        "network": ("network_id", "ID of the network the subnet belongs to"),
83 bf42a16c Dionysis Grigoropoulos
        "name": ("name", "Name of the subnet"),
84 6a439d95 Dionysis Grigoropoulos
        "user.uuid": ("userid", "The UUID of the subnet's owner"),
85 bf42a16c Dionysis Grigoropoulos
        "cidr": ("cidr", "The CIDR of the subnet"),
86 bf42a16c Dionysis Grigoropoulos
        "ipversion": ("ipversion", "The IP version of the subnet"),
87 6f99f94f Dionysis Grigoropoulos
        "gateway": ("gateway", "The gateway IP of the subnet"),
88 6f99f94f Dionysis Grigoropoulos
        "dhcp": ("dhcp", "DHCP flag of the subnet"),
89 6a439d95 Dionysis Grigoropoulos
        "public": ("public", "Public flag of the subnet"),
90 bf42a16c Dionysis Grigoropoulos
    }
91 bf42a16c Dionysis Grigoropoulos
92 6f99f94f Dionysis Grigoropoulos
    fields = ["id", "network", "name", "user.uuid", "cidr", "ipversion",
93 6a439d95 Dionysis Grigoropoulos
              "gateway", "dhcp", "public"]
94 bf42a16c Dionysis Grigoropoulos
95 bf42a16c Dionysis Grigoropoulos
    def handle_args(self, *args, **options):
96 bf42a16c Dionysis Grigoropoulos
        if options["ipv4"] and options["ipv6"]:
97 bf42a16c Dionysis Grigoropoulos
            raise CommandError("Use either --ipv4 or --ipv6, not both")
98 bf42a16c Dionysis Grigoropoulos
99 bf42a16c Dionysis Grigoropoulos
        if options["ipv4"]:
100 bf42a16c Dionysis Grigoropoulos
            self.filters["ipversion"] = 4
101 bf42a16c Dionysis Grigoropoulos
102 bf42a16c Dionysis Grigoropoulos
        if options["ipv6"]:
103 bf42a16c Dionysis Grigoropoulos
            self.filters["ipversion"] = 6
104 bf42a16c Dionysis Grigoropoulos
105 6f99f94f Dionysis Grigoropoulos
        if options["dhcp"]:
106 bf42a16c Dionysis Grigoropoulos
            self.filters["dhcp"] = True
107 6a439d95 Dionysis Grigoropoulos
108 6a439d95 Dionysis Grigoropoulos
        if options["public"]:
109 6a439d95 Dionysis Grigoropoulos
            self.filters["public"] = True