Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / port-remove.py @ a6e6fe48

History | View | Annotate | Download (3.1 kB)

1 a6e6fe48 Christos Stavrakakis
# Copyright 2011-2014 GRNET S.A. All rights reserved.
2 0069a20c Marios Kogias
#
3 0069a20c Marios Kogias
# Redistribution and use in source and binary forms, with or without
4 0069a20c Marios Kogias
# modification, are permitted provided that the following conditions
5 0069a20c Marios Kogias
# are met:
6 0069a20c Marios Kogias
#
7 0069a20c Marios Kogias
#   1. Redistributions of source code must retain the above copyright
8 0069a20c Marios Kogias
#      notice, this list of conditions and the following disclaimer.
9 0069a20c Marios Kogias
#
10 0069a20c Marios Kogias
#  2. Redistributions in binary form must reproduce the above copyright
11 0069a20c Marios Kogias
#     notice, this list of conditions and the following disclaimer in the
12 0069a20c Marios Kogias
#     documentation and/or other materials provided with the distribution.
13 0069a20c Marios Kogias
#
14 0069a20c Marios Kogias
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
15 0069a20c Marios Kogias
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 0069a20c Marios Kogias
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 0069a20c Marios Kogias
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
18 0069a20c Marios Kogias
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 0069a20c Marios Kogias
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 0069a20c Marios Kogias
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 0069a20c Marios Kogias
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 0069a20c Marios Kogias
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 0069a20c Marios Kogias
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 0069a20c Marios Kogias
# SUCH DAMAGE.
25 0069a20c Marios Kogias
#
26 0069a20c Marios Kogias
# The views and conclusions contained in the software and documentation are
27 0069a20c Marios Kogias
# those of the authors and should not be interpreted as representing official
28 0069a20c Marios Kogias
# policies, either expressed or implied, of GRNET S.A.
29 0069a20c Marios Kogias
#
30 0069a20c Marios Kogias
31 0723a85c Christos Stavrakakis
from optparse import make_option
32 0f89715b Dionysis Grigoropoulos
from django.core.management.base import CommandError
33 fae6e5f0 Christos Stavrakakis
from synnefo.logic import servers
34 0723a85c Christos Stavrakakis
from synnefo.management import common
35 0723a85c Christos Stavrakakis
from snf_django.management.utils import parse_bool
36 0f89715b Dionysis Grigoropoulos
from snf_django.management.commands import RemoveCommand
37 0723a85c Christos Stavrakakis
38 0069a20c Marios Kogias
39 0f89715b Dionysis Grigoropoulos
class Command(RemoveCommand):
40 0069a20c Marios Kogias
    can_import_settings = True
41 2bd38823 Dionysis Grigoropoulos
    args = "<Port ID> [<Port ID> ...]"
42 0069a20c Marios Kogias
    help = "Remove a port from the Database and from the VMs attached to"
43 0f89715b Dionysis Grigoropoulos
    option_list = RemoveCommand.option_list + (
44 0723a85c Christos Stavrakakis
        make_option(
45 0723a85c Christos Stavrakakis
            "--wait",
46 0723a85c Christos Stavrakakis
            dest="wait",
47 0723a85c Christos Stavrakakis
            default="True",
48 0723a85c Christos Stavrakakis
            choices=["True", "False"],
49 0723a85c Christos Stavrakakis
            metavar="True|False",
50 0723a85c Christos Stavrakakis
            help="Wait for Ganeti jobs to complete."),
51 0723a85c Christos Stavrakakis
    )
52 0069a20c Marios Kogias
53 0723a85c Christos Stavrakakis
    @common.convert_api_faults
54 0069a20c Marios Kogias
    def handle(self, *args, **options):
55 20fc5c41 Dionysis Grigoropoulos
        if not args:
56 0069a20c Marios Kogias
            raise CommandError("Please provide a port ID")
57 0069a20c Marios Kogias
58 0f89715b Dionysis Grigoropoulos
        force = options['force']
59 d27b16cc Dionysis Grigoropoulos
        message = "ports" if len(args) > 1 else "port"
60 d27b16cc Dionysis Grigoropoulos
        self.confirm_deletion(force, message, args)
61 0f89715b Dionysis Grigoropoulos
62 20fc5c41 Dionysis Grigoropoulos
        for port_id in args:
63 20fc5c41 Dionysis Grigoropoulos
            self.stdout.write("\n")
64 20fc5c41 Dionysis Grigoropoulos
            try:
65 a6e6fe48 Christos Stavrakakis
                port = common.get_resource("port", port_id, for_update=True)
66 0069a20c Marios Kogias
67 20fc5c41 Dionysis Grigoropoulos
                servers.delete_port(port)
68 0069a20c Marios Kogias
69 20fc5c41 Dionysis Grigoropoulos
                wait = parse_bool(options["wait"])
70 20fc5c41 Dionysis Grigoropoulos
                if port.machine is not None:
71 20fc5c41 Dionysis Grigoropoulos
                    common.wait_server_task(port.machine, wait,
72 20fc5c41 Dionysis Grigoropoulos
                                            stdout=self.stdout)
73 20fc5c41 Dionysis Grigoropoulos
                else:
74 20fc5c41 Dionysis Grigoropoulos
                    self.stdout.write("Successfully removed port %s\n" % port)
75 20fc5c41 Dionysis Grigoropoulos
            except CommandError as e:
76 20fc5c41 Dionysis Grigoropoulos
                self.stdout.write("Error -- %s\n" % e.message)