Revision 91f7a08c

b/snf-cyclades-app/synnefo/api/management/commands/server-modify.py
33 33

  
34 34
from optparse import make_option
35 35

  
36
from django.db import transaction
36 37
from django.core.management.base import BaseCommand, CommandError
37 38
from synnefo.management.common import get_vm
38

  
39
from synnefo.db.models import VirtualMachine
39
from synnefo.webproject.management.utils import parse_bool
40
from synnefo.logic import servers
40 41

  
41 42

  
42 43
class Command(BaseCommand):
43 44
    args = "<server ID>"
44
    help = "Modify a server"
45
    help = "Modify a server."
45 46

  
46 47
    option_list = BaseCommand.option_list + (
47 48
        make_option(
48 49
            '--name',
49 50
            dest='name',
50 51
            metavar='NAME',
51
            help="Set server's name"),
52
            help="Rename server"),
52 53
        make_option(
53 54
            '--owner',
54 55
            dest='owner',
55
            metavar='USER_ID',
56
            help="Set server's owner"),
57
        make_option(
58
            '--state',
59
            dest='state',
60
            metavar='STATE',
61
            help="Set server's state"),
62
        make_option(
63
            '--set-deleted',
64
            action='store_true',
65
            dest='deleted',
66
            help="Mark a server as deleted"),
67
        make_option(
68
            '--set-undeleted',
69
            action='store_true',
70
            dest='undeleted',
71
            help="Mark a server as not deleted"),
56
            metavar='USER_UUID',
57
            help="Change ownership of server. Value must be a user UUID"),
72 58
        make_option(
73
            '--set-suspended',
74
            action='store_true',
75
            dest='suspended',
76
            help="Mark a server as suspended"),
77
        make_option(
78
            '--set-unsuspended',
79
            action='store_true',
80
            dest='unsuspended',
81
            help="Mark a server as not suspended")
59
            "--suspended",
60
            dest="suspended",
61
            default=None,
62
            choices=["True", "False"],
63
            metavar="True|False",
64
            help="Mark a server as suspended/non-suspended."),
82 65
    )
83 66

  
67
    @transaction.commit_on_success
84 68
    def handle(self, *args, **options):
85 69
        if len(args) != 1:
86 70
            raise CommandError("Please provide a server ID")
87 71

  
88 72
        server = get_vm(args[0])
89 73

  
90
        name = options.get('name')
91
        if name is not None:
92
            server.name = name
93

  
94
        owner = options.get('owner')
95
        if owner is not None:
96
            server.userid = owner
97

  
98
        state = options.get('state')
99
        if state is not None:
100
            allowed = [x[0] for x in VirtualMachine.OPER_STATES]
101
            if state not in allowed:
102
                msg = "Invalid state, must be one of %s" % ', '.join(allowed)
103
                raise CommandError(msg)
104
            server.operstate = state
105

  
106
        if options.get('deleted'):
107
            server.deleted = True
108
        elif options.get('undeleted'):
109
            server.deleted = False
74
        new_name = options.get("name", None)
75
        if new_name is not None:
76
            old_name = server.name
77
            server = servers.rename(server, new_name)
78
            self.stdout.write("Renamed server '%s' from '%s' to '%s'\n" %
79
                              (server, old_name, new_name))
110 80

  
111
        if options.get('suspended'):
112
            server.suspended = True
113
        elif options.get('unsuspended'):
114
            server.suspended = False
81
        suspended = options.get("suspended", None)
82
        if suspended is not None:
83
            suspended = parse_bool(suspended)
84
            server.suspended = suspended
85
            server.save()
86
            self.stdout.write("Set server '%s' as suspended=%s\n" %
87
                              (server, suspended))
115 88

  
116
        server.save()
89
        new_owner = options.get('owner')
90
        if new_owner is not None:
91
            if "@" in new_owner:
92
                raise CommandError("Invalid owner UUID.")
93
            old_owner = server.userid
94
            server.userid = new_owner
95
            server.save()
96
            msg = "Changed the owner of server '%s' from '%s' to '%s'.\n"
97
            self.stdout.write(msg % (server, old_owner, new_owner))

Also available in: Unified diff