Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / management / commands / floating-ip-dettach.py @ c6fe2f41

History | View | Annotate | Download (2.4 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 b3106aa4 Marios Kogias
from django.core.management.base import BaseCommand, CommandError
37 fae6e5f0 Christos Stavrakakis
from synnefo.management import common
38 e4f484da Marios Kogias
from synnefo.logic import servers
39 b3106aa4 Marios Kogias
40 b3106aa4 Marios Kogias
41 fae6e5f0 Christos Stavrakakis
class Command(BaseCommand):
42 b3106aa4 Marios Kogias
    help = "Dettach a floating IP from a VM or router"
43 b3106aa4 Marios Kogias
44 fae6e5f0 Christos Stavrakakis
    @common.convert_api_faults
45 b3106aa4 Marios Kogias
    def handle(self, *args, **options):
46 fae6e5f0 Christos Stavrakakis
        if not args or len(args) > 1:
47 b3106aa4 Marios Kogias
            raise CommandError("Command accepts exactly one argument")
48 b3106aa4 Marios Kogias
49 fae6e5f0 Christos Stavrakakis
        floating_ip_id = args[0]
50 b3106aa4 Marios Kogias
51 b3106aa4 Marios Kogias
        #get the floating-ip
52 fae6e5f0 Christos Stavrakakis
        floating_ip = common.get_floating_ip_by_id(floating_ip_id,
53 fae6e5f0 Christos Stavrakakis
                                                   for_update=True)
54 b3106aa4 Marios Kogias
55 b3106aa4 Marios Kogias
        if not floating_ip.nic:
56 b3106aa4 Marios Kogias
            raise CommandError('This floating IP is not attached to a device')
57 b3106aa4 Marios Kogias
58 b3106aa4 Marios Kogias
        nic = floating_ip.nic
59 b3106aa4 Marios Kogias
        vm = nic.machine
60 fae6e5f0 Christos Stavrakakis
        servers.delete_port(nic)
61 b3106aa4 Marios Kogias
        self.stdout.write("Dettached floating IP %s from  %s.\n"
62 fae6e5f0 Christos Stavrakakis
                          % (floating_ip_id, vm))