Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / management / commands / server-create.py @ b1fb3aac

History | View | Annotate | Download (4 kB)

1 9f663ec2 Christos Stavrakakis
# Copyright 2012 GRNET S.A. All rights reserved.
2 9f663ec2 Christos Stavrakakis
#
3 9f663ec2 Christos Stavrakakis
# Redistribution and use in source and binary forms, with or
4 9f663ec2 Christos Stavrakakis
# without modification, are permitted provided that the following
5 9f663ec2 Christos Stavrakakis
# conditions are met:
6 9f663ec2 Christos Stavrakakis
#
7 9f663ec2 Christos Stavrakakis
#   1. Redistributions of source code must retain the above
8 9f663ec2 Christos Stavrakakis
#      copyright notice, this list of conditions and the following
9 9f663ec2 Christos Stavrakakis
#      disclaimer.
10 9f663ec2 Christos Stavrakakis
#
11 9f663ec2 Christos Stavrakakis
#   2. Redistributions in binary form must reproduce the above
12 9f663ec2 Christos Stavrakakis
#      copyright notice, this list of conditions and the following
13 9f663ec2 Christos Stavrakakis
#      disclaimer in the documentation and/or other materials
14 9f663ec2 Christos Stavrakakis
#      provided with the distribution.
15 9f663ec2 Christos Stavrakakis
#
16 9f663ec2 Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 9f663ec2 Christos Stavrakakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 9f663ec2 Christos Stavrakakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 9f663ec2 Christos Stavrakakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 9f663ec2 Christos Stavrakakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 9f663ec2 Christos Stavrakakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 9f663ec2 Christos Stavrakakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 9f663ec2 Christos Stavrakakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 9f663ec2 Christos Stavrakakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 9f663ec2 Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 9f663ec2 Christos Stavrakakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 9f663ec2 Christos Stavrakakis
# POSSIBILITY OF SUCH DAMAGE.
28 9f663ec2 Christos Stavrakakis
#
29 9f663ec2 Christos Stavrakakis
# The views and conclusions contained in the software and
30 9f663ec2 Christos Stavrakakis
# documentation are those of the authors and should not be
31 9f663ec2 Christos Stavrakakis
# interpreted as representing official policies, either expressed
32 9f663ec2 Christos Stavrakakis
# or implied, of GRNET S.A.
33 9f663ec2 Christos Stavrakakis
34 9f663ec2 Christos Stavrakakis
from optparse import make_option
35 9f663ec2 Christos Stavrakakis
36 9f663ec2 Christos Stavrakakis
from django.core.management.base import BaseCommand, CommandError
37 b84ed662 Christos Stavrakakis
from synnefo.management import common
38 9f663ec2 Christos Stavrakakis
39 030eb609 Christos Stavrakakis
from synnefo.api import util
40 bcd80cd9 Christos Stavrakakis
from synnefo.api.servers import do_create_server
41 9f663ec2 Christos Stavrakakis
42 39a6388d Christos Stavrakakis
HELP_MSG = """
43 39a6388d Christos Stavrakakis

44 39a6388d Christos Stavrakakis
Create a new VM without authenticating the user or checking the resource
45 39a6388d Christos Stavrakakis
limits of the user. Also the allocator can be bypassed by specifing a
46 39a6388d Christos Stavrakakis
backend-id.
47 39a6388d Christos Stavrakakis
"""
48 39a6388d Christos Stavrakakis
49 9f663ec2 Christos Stavrakakis
50 9f663ec2 Christos Stavrakakis
class Command(BaseCommand):
51 39a6388d Christos Stavrakakis
    help = "Create a new VM." + HELP_MSG
52 9f663ec2 Christos Stavrakakis
53 9f663ec2 Christos Stavrakakis
    option_list = BaseCommand.option_list + (
54 9621c777 Christos Stavrakakis
        make_option("--backend-id", dest="backend_id",
55 9621c777 Christos Stavrakakis
                    help="Unique identifier of the Ganeti backend."
56 9621c777 Christos Stavrakakis
                         " Use snf-manage backend-list to find out"
57 9621c777 Christos Stavrakakis
                         " available backends."),
58 9621c777 Christos Stavrakakis
        make_option("--name", dest="name",
59 9621c777 Christos Stavrakakis
                    help="An arbitrary string for naming the server"),
60 9621c777 Christos Stavrakakis
        make_option("--user-id", dest="user_id",
61 9621c777 Christos Stavrakakis
                    help="Unique identifier of the owner of the server"),
62 9621c777 Christos Stavrakakis
        make_option("--image-id", dest="image_id",
63 9621c777 Christos Stavrakakis
                    help="Unique identifier of the image."
64 9621c777 Christos Stavrakakis
                         " Use snf-manage image-list to find out"
65 9621c777 Christos Stavrakakis
                         " available images."),
66 9621c777 Christos Stavrakakis
        make_option("--flavor-id", dest="flavor_id",
67 9621c777 Christos Stavrakakis
                    help="Unique identifier of the flavor"
68 9621c777 Christos Stavrakakis
                         " Use snf-manage flavor-list to find out"
69 9621c777 Christos Stavrakakis
                         " available flavors."),
70 9621c777 Christos Stavrakakis
        make_option("--password", dest="password",
71 9621c777 Christos Stavrakakis
                    help="Password for the new server")
72 9621c777 Christos Stavrakakis
    )
73 9f663ec2 Christos Stavrakakis
74 9f663ec2 Christos Stavrakakis
    def handle(self, *args, **options):
75 9f663ec2 Christos Stavrakakis
        if args:
76 9f663ec2 Christos Stavrakakis
            raise CommandError("Command doesn't accept any arguments")
77 9f663ec2 Christos Stavrakakis
78 9f663ec2 Christos Stavrakakis
        name = options['name']
79 9f663ec2 Christos Stavrakakis
        user_id = options['user_id']
80 9f663ec2 Christos Stavrakakis
        backend_id = options['backend_id']
81 9f663ec2 Christos Stavrakakis
        image_id = options['image_id']
82 9f663ec2 Christos Stavrakakis
        flavor_id = options['flavor_id']
83 9f663ec2 Christos Stavrakakis
        password = options['password']
84 9f663ec2 Christos Stavrakakis
85 9f663ec2 Christos Stavrakakis
        if not name:
86 9f663ec2 Christos Stavrakakis
            raise CommandError("name is mandatory")
87 9f663ec2 Christos Stavrakakis
        if not user_id:
88 9f663ec2 Christos Stavrakakis
            raise CommandError("user-id is mandatory")
89 9f663ec2 Christos Stavrakakis
        if not password:
90 9f663ec2 Christos Stavrakakis
            raise CommandError("password is mandatory")
91 3fff9189 Christos Stavrakakis
        if not flavor_id:
92 3fff9189 Christos Stavrakakis
            raise CommandError("flavor-id is mandatory")
93 bcd80cd9 Christos Stavrakakis
        if not image_id:
94 9f663ec2 Christos Stavrakakis
            raise CommandError("image-id is mandatory")
95 9f663ec2 Christos Stavrakakis
96 bcd80cd9 Christos Stavrakakis
        flavor = common.get_flavor(flavor_id)
97 bcd80cd9 Christos Stavrakakis
        image = common.get_image(image_id, user_id)
98 bcd80cd9 Christos Stavrakakis
        if backend_id:
99 bcd80cd9 Christos Stavrakakis
            backend = common.get_backend(backend_id)
100 030eb609 Christos Stavrakakis
101 bcd80cd9 Christos Stavrakakis
        do_create_server(user_id, name, password, flavor, image,
102 bcd80cd9 Christos Stavrakakis
                         backend=backend)