summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Leafe <ed@leafe.com>2011-08-08 14:19:53 +0000
committerEd Leafe <ed@leafe.com>2011-08-08 14:19:53 +0000
commitb1a503053cb8cbeb1a4ab18e650b49cc4da15e23 (patch)
tree7609d01cd6095dd6a33ee2714f1c7277efd1ee14
parent10ab2e76b1ea8bbbb6bff4ccaf506bfdd5b57388 (diff)
Moved the restriction on host startup to the xenapi layer.:
-rw-r--r--nova/api/openstack/contrib/hosts.py18
-rw-r--r--nova/virt/xenapi/vmops.py2
-rw-r--r--nova/virt/xenapi_conn.py13
3 files changed, 19 insertions, 14 deletions
diff --git a/nova/api/openstack/contrib/hosts.py b/nova/api/openstack/contrib/hosts.py
index cdf8760d5..d5bd3166b 100644
--- a/nova/api/openstack/contrib/hosts.py
+++ b/nova/api/openstack/contrib/hosts.py
@@ -96,21 +96,17 @@ class HostController(object):
return {"host": host, "status": result}
def _host_power_action(self, req, host, action):
- """Reboots or shuts down the host."""
+ """Reboots, shuts down or powers up the host."""
context = req.environ['nova.context']
- result = self.compute_api.host_power_action(context, host=host,
- action=action)
+ try:
+ result = self.compute_api.host_power_action(context, host=host,
+ action=action)
+ except NotImplementedError as e:
+ raise webob.exc.HTTPBadRequest(explanation=e.msg)
return {"host": host, "power_action": result}
def startup(self, req, id):
- """The only valid values for 'action' are 'reboot' or
- 'shutdown'. For completeness' sake there is the
- 'startup' option to start up a host, but this is not
- technically feasible now, as we run the host on the
- XenServer box.
- """
- msg = _("Host startup on XenServer is not supported.")
- raise webob.exc.HTTPBadRequest(explanation=msg)
+ return self._host_power_action(req, host=id, action="startup")
def shutdown(self, req, id):
return self._host_power_action(req, host=id, action="shutdown")
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index df90b62c4..2a5cf8b5e 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -1032,7 +1032,7 @@ class VMOps(object):
return 'http://fakeajaxconsole/fake_url'
def host_power_action(self, host, action):
- """Reboots, shuts down or powers up the host."""
+ """Reboots or shuts down the host."""
args = {"action": json.dumps(action)}
methods = {"reboot": "host_reboot", "shutdown": "host_shutdown"}
json_resp = self._call_xenhost(methods[action], args)
diff --git a/nova/virt/xenapi_conn.py b/nova/virt/xenapi_conn.py
index 720c9fd58..2a6a97faf 100644
--- a/nova/virt/xenapi_conn.py
+++ b/nova/virt/xenapi_conn.py
@@ -333,8 +333,17 @@ class XenAPIConnection(driver.ComputeDriver):
return self.HostState.get_host_stats(refresh=refresh)
def host_power_action(self, host, action):
- """Reboots, shuts down or powers up the host."""
- return self._vmops.host_power_action(host, action)
+ """The only valid values for 'action' on XenServer are 'reboot' or
+ 'shutdown', even though the API also accepts 'startup'. As this is
+ not technically possible on XenServer, since the host is the same
+ physical machine as the hypervisor, if this is requested, we need to
+ raise an exception.
+ """
+ if action in ("reboot", "shutdown"):
+ return self._vmops.host_power_action(host, action)
+ else:
+ msg = _("Host startup on XenServer is not supported.")
+ raise NotImplementedError(msg)
def set_host_enabled(self, host, enabled):
"""Sets the specified host's ability to accept new instances."""