Revision 35f2fc07 snf-cyclades-app/synnefo/api/management/commands/server-modify.py

b/snf-cyclades-app/synnefo/api/management/commands/server-modify.py
1
# Copyright 2012 GRNET S.A. All rights reserved.
1
# Copyright 2013 GRNET S.A. All rights reserved.
2 2
#
3 3
# Redistribution and use in source and binary forms, with or
4 4
# without modification, are permitted provided that the following
......
35 35

  
36 36
from django.db import transaction
37 37
from django.core.management.base import BaseCommand, CommandError
38
from synnefo.management.common import get_vm, get_flavor, convert_api_faults
38
from synnefo.management.common import (get_vm, get_flavor, convert_api_faults,
39
                                       wait_server_task)
39 40
from synnefo.webproject.management.utils import parse_bool
40
from synnefo.logic import servers, backend as backend_mod
41
from synnefo.logic import servers
42

  
43

  
44
ACTIONS = ["start", "stop", "reboot_hard", "reboot_soft"]
41 45

  
42 46

  
43 47
class Command(BaseCommand):
......
49 53
            '--name',
50 54
            dest='name',
51 55
            metavar='NAME',
52
            help="Rename server"),
56
            help="Rename server."),
53 57
        make_option(
54 58
            '--owner',
55 59
            dest='owner',
......
68 72
            metavar="FLAVOR_ID",
69 73
            help="Resize a server by modifying its flavor. The new flavor"
70 74
                 " must have the same disk size and disk template."),
75
        make_option(
76
            "--action",
77
            dest="action",
78
            choices=ACTIONS,
79
            metavar="|".join(ACTIONS),
80
            help="Perform one of the allowed actions."),
81
        make_option(
82
            "--wait",
83
            dest="wait",
84
            default="True",
85
            choices=["True", "False"],
86
            metavar="True|False",
87
            help="Wait for Ganeti jobs to complete."),
71 88
    )
72 89

  
73 90
    @transaction.commit_on_success
......
103 120
            msg = "Changed the owner of server '%s' from '%s' to '%s'.\n"
104 121
            self.stdout.write(msg % (server, old_owner, new_owner))
105 122

  
123
        wait = parse_bool(options["wait"])
106 124
        new_flavor_id = options.get("flavor")
107 125
        if new_flavor_id is not None:
108 126
            new_flavor = get_flavor(new_flavor_id)
......
110 128
            msg = "Resizing server '%s' from flavor '%s' to '%s'.\n"
111 129
            self.stdout.write(msg % (server, old_flavor, new_flavor))
112 130
            server = servers.resize(server, new_flavor)
113
            jobID = server.task_job_id
114
            msg = "Issued job '%s'. Waiting to complete...\n"
115
            self.stdout.write(msg % jobID)
116
            client = server.get_client()
117
            status, error = backend_mod.wait_for_job(client, jobID)
118
            if status == "success":
119
                self.stdout.write("Job finished successfully.\n")
131
            wait_server_task(server, wait, stdout=self.stdout)
132

  
133
        action = options.get("action")
134
        if action is not None:
135
            if action == "start":
136
                server = servers.start(server)
137
            elif action == "stop":
138
                server = servers.stop(server)
139
            elif action == "reboot_hard":
140
                server = servers.reboot(server, reboot_type="HARD")
141
            elif action == "reboot_stof":
142
                server = servers.reboot(server, reboot_type="SOFT")
120 143
            else:
121
                self.stdout.write("Job failed! Error: %s\n" % error)
144
                raise CommandError("Unknown action.")
145
            wait_server_task(server, wait, stdout=self.stdout)

Also available in: Unified diff