Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / management / commands / floating-ip-attach.py @ 1bf69a52

History | View | Annotate | Download (2.7 kB)

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