Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / floating-ip-detach.py @ 6fec4302

History | View | Annotate | Download (2.5 kB)

1 b3106aa4 Marios Kogias
# Copyright 2012 GRNET S.A. All rights reserved.
2 b3106aa4 Marios Kogias
#
3 b3106aa4 Marios Kogias
# Redistribution and use in source and binary forms, with or
4 b3106aa4 Marios Kogias
# without modification, are permitted provided that the following
5 b3106aa4 Marios Kogias
# conditions are met:
6 b3106aa4 Marios Kogias
#
7 b3106aa4 Marios Kogias
#   1. Redistributions of source code must retain the above
8 b3106aa4 Marios Kogias
#      copyright notice, this list of conditions and the following
9 b3106aa4 Marios Kogias
#      disclaimer.
10 b3106aa4 Marios Kogias
#
11 b3106aa4 Marios Kogias
#   2. Redistributions in binary form must reproduce the above
12 b3106aa4 Marios Kogias
#      copyright notice, this list of conditions and the following
13 b3106aa4 Marios Kogias
#      disclaimer in the documentation and/or other materials
14 b3106aa4 Marios Kogias
#      provided with the distribution.
15 b3106aa4 Marios Kogias
#
16 b3106aa4 Marios Kogias
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 b3106aa4 Marios Kogias
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 b3106aa4 Marios Kogias
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 b3106aa4 Marios Kogias
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 b3106aa4 Marios Kogias
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 b3106aa4 Marios Kogias
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 b3106aa4 Marios Kogias
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 b3106aa4 Marios Kogias
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 b3106aa4 Marios Kogias
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 b3106aa4 Marios Kogias
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 b3106aa4 Marios Kogias
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 b3106aa4 Marios Kogias
# POSSIBILITY OF SUCH DAMAGE.
28 b3106aa4 Marios Kogias
#
29 b3106aa4 Marios Kogias
# The views and conclusions contained in the software and
30 b3106aa4 Marios Kogias
# documentation are those of the authors and should not be
31 b3106aa4 Marios Kogias
# interpreted as representing official policies, either expressed
32 b3106aa4 Marios Kogias
# or implied, of GRNET S.A.
33 b3106aa4 Marios Kogias
34 fae6e5f0 Christos Stavrakakis
#from optparse import make_option
35 b3106aa4 Marios Kogias
36 8c911970 Christos Stavrakakis
from django.core.management.base import CommandError
37 8c911970 Christos Stavrakakis
from snf_django.management.commands import SynnefoCommand
38 fae6e5f0 Christos Stavrakakis
from synnefo.management import common
39 e4f484da Marios Kogias
from synnefo.logic import servers
40 b3106aa4 Marios Kogias
41 b3106aa4 Marios Kogias
42 8c911970 Christos Stavrakakis
class Command(SynnefoCommand):
43 5d5d8f19 Constantinos Venetsanopoulos
    help = "Detach a floating IP from a VM or router"
44 b3106aa4 Marios Kogias
45 fae6e5f0 Christos Stavrakakis
    @common.convert_api_faults
46 b3106aa4 Marios Kogias
    def handle(self, *args, **options):
47 fae6e5f0 Christos Stavrakakis
        if not args or len(args) > 1:
48 b3106aa4 Marios Kogias
            raise CommandError("Command accepts exactly one argument")
49 b3106aa4 Marios Kogias
50 fae6e5f0 Christos Stavrakakis
        floating_ip_id = args[0]
51 b3106aa4 Marios Kogias
52 b3106aa4 Marios Kogias
        #get the floating-ip
53 fae6e5f0 Christos Stavrakakis
        floating_ip = common.get_floating_ip_by_id(floating_ip_id,
54 fae6e5f0 Christos Stavrakakis
                                                   for_update=True)
55 b3106aa4 Marios Kogias
56 b3106aa4 Marios Kogias
        if not floating_ip.nic:
57 b3106aa4 Marios Kogias
            raise CommandError('This floating IP is not attached to a device')
58 b3106aa4 Marios Kogias
59 b3106aa4 Marios Kogias
        nic = floating_ip.nic
60 b3106aa4 Marios Kogias
        vm = nic.machine
61 fae6e5f0 Christos Stavrakakis
        servers.delete_port(nic)
62 5d5d8f19 Constantinos Venetsanopoulos
        self.stdout.write("Detached floating IP %s from  %s.\n"
63 fae6e5f0 Christos Stavrakakis
                          % (floating_ip_id, vm))