Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / management / commands / port-remove.py @ 9835a70d

History | View | Annotate | Download (2.6 kB)

1 0069a20c Marios Kogias
# Copyright 2011-2013 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 0069a20c Marios Kogias
from django.core.management.base import BaseCommand, 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 0723a85c Christos Stavrakakis
37 0069a20c Marios Kogias
38 0069a20c Marios Kogias
class Command(BaseCommand):
39 0069a20c Marios Kogias
    can_import_settings = True
40 0069a20c Marios Kogias
    help = "Remove a port from the Database and from the VMs attached to"
41 0723a85c Christos Stavrakakis
    option_list = BaseCommand.option_list + (
42 0723a85c Christos Stavrakakis
        make_option(
43 0723a85c Christos Stavrakakis
            "--wait",
44 0723a85c Christos Stavrakakis
            dest="wait",
45 0723a85c Christos Stavrakakis
            default="True",
46 0723a85c Christos Stavrakakis
            choices=["True", "False"],
47 0723a85c Christos Stavrakakis
            metavar="True|False",
48 0723a85c Christos Stavrakakis
            help="Wait for Ganeti jobs to complete."),
49 0723a85c Christos Stavrakakis
    )
50 0069a20c Marios Kogias
51 0723a85c Christos Stavrakakis
    @common.convert_api_faults
52 0069a20c Marios Kogias
    def handle(self, *args, **options):
53 0069a20c Marios Kogias
        if len(args) < 1:
54 0069a20c Marios Kogias
            raise CommandError("Please provide a port ID")
55 0069a20c Marios Kogias
56 09b76b7e Christos Stavrakakis
        port = common.get_port(args[0], for_update=True)
57 0069a20c Marios Kogias
58 fae6e5f0 Christos Stavrakakis
        servers.delete_port(port)
59 0069a20c Marios Kogias
60 0723a85c Christos Stavrakakis
        wait = parse_bool(options["wait"])
61 fae6e5f0 Christos Stavrakakis
        if port.machine is not None:
62 fae6e5f0 Christos Stavrakakis
            common.wait_server_task(port.machine, wait, stdout=self.stdout)
63 fae6e5f0 Christos Stavrakakis
        else:
64 fae6e5f0 Christos Stavrakakis
            self.stdout.write("Successfully removed port %s\n" % port)