Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (2.8 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 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 d9c36253 Marios Kogias
from synnefo.logic import servers
40 d9c36253 Marios Kogias
41 d9c36253 Marios Kogias
42 8c911970 Christos Stavrakakis
class Command(SynnefoCommand):
43 d9c36253 Marios Kogias
    help = "Attach a floating IP to a VM or router"
44 d9c36253 Marios Kogias
45 8c911970 Christos Stavrakakis
    option_list = SynnefoCommand.option_list + (
46 d9c36253 Marios Kogias
        make_option(
47 d9c36253 Marios Kogias
            '--machine',
48 d9c36253 Marios Kogias
            dest='machine',
49 d9c36253 Marios Kogias
            default=None,
50 d9c36253 Marios Kogias
            help='The server id the floating-ip will be attached to'),
51 d9c36253 Marios Kogias
    )
52 d9c36253 Marios Kogias
53 fae6e5f0 Christos Stavrakakis
    @common.convert_api_faults
54 d9c36253 Marios Kogias
    def handle(self, *args, **options):
55 d9c36253 Marios Kogias
        if not args or len(args) > 1:
56 d9c36253 Marios Kogias
            raise CommandError("Command accepts exactly one argument")
57 d9c36253 Marios Kogias
58 fae6e5f0 Christos Stavrakakis
        floating_ip_id = args[0]  # this is the floating-ip address
59 d9c36253 Marios Kogias
        device = options['machine']
60 d9c36253 Marios Kogias
61 d9c36253 Marios Kogias
        if not device:
62 d9c36253 Marios Kogias
            raise CommandError('Please give either a server or a router id')
63 d9c36253 Marios Kogias
64 d9c36253 Marios Kogias
        #get the vm
65 1bf69a52 Giorgos Korfiatis
        vm = common.get_vm(device, for_update=True)
66 fae6e5f0 Christos Stavrakakis
        floating_ip = common.get_floating_ip_by_id(floating_ip_id,
67 fae6e5f0 Christos Stavrakakis
                                                   for_update=True)
68 fae6e5f0 Christos Stavrakakis
        servers.create_port(vm.userid, floating_ip.network,
69 fae6e5f0 Christos Stavrakakis
                            use_ipaddress=floating_ip, machine=vm)
70 d9c36253 Marios Kogias
71 d9c36253 Marios Kogias
        self.stdout.write("Attached %s to %s.\n" % (floating_ip, vm))