summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorEd Leafe <ed@leafe.com>2011-07-01 14:26:05 +0000
committerEd Leafe <ed@leafe.com>2011-07-01 14:26:05 +0000
commitfb6aba61ef03032c31196bd58c68fa7b7d4c2769 (patch)
treeedf5f32bd90eb283d4cc3c57cc14f21fb95559f9 /nova
parent7ca20797496947c0bdd60e77b4962fd360e01f55 (diff)
downloadnova-fb6aba61ef03032c31196bd58c68fa7b7d4c2769.tar.gz
nova-fb6aba61ef03032c31196bd58c68fa7b7d4c2769.tar.xz
nova-fb6aba61ef03032c31196bd58c68fa7b7d4c2769.zip
completed api changes. still need plugin changes
Diffstat (limited to 'nova')
-rw-r--r--nova/compute/api.py13
-rw-r--r--nova/compute/manager.py12
-rw-r--r--nova/virt/driver.py4
-rw-r--r--nova/virt/fake.py4
-rw-r--r--nova/virt/hyperv.py4
-rw-r--r--nova/virt/libvirt/connection.py4
-rw-r--r--nova/virt/vmwareapi_conn.py4
-rw-r--r--nova/virt/xenapi/vmops.py18
-rw-r--r--nova/virt/xenapi_conn.py4
9 files changed, 50 insertions, 17 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 4dba6cf1f..c99b64c50 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -912,15 +912,10 @@ class API(base.Base):
"""Unpause the given instance."""
self._cast_compute_message('unpause_instance', context, instance_id)
- def disable_host(self, context, instance_id=None, host=None):
- """Sets the specified to not receive new instances."""
- return self._call_compute_message("disable_host", context,
- instance_id=None, host=host)
-
- def enable_host(self, context, instance_id=None, host=None):
- """Sets the specified to receive new instances."""
- return self._call_compute_message("enable_host", context,
- instance_id=None, host=host)
+ def set_host_enabled(self, context, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ return self._call_compute_message("set_host_enabled", context,
+ instance_id=None, host=host, enabled=enabled)
@scheduler_api.reroute_compute("diagnostics")
def get_diagnostics(self, context, instance_id):
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 152b2670c..91a604934 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -875,14 +875,10 @@ class ComputeManager(manager.SchedulerDependentManager):
result))
@exception.wrap_exception
- def disable_host(self, context, instance_id=None, host=None):
- """Set a host so that it can not accept new instances."""
- return self.driver.disable_host(host)
-
- @exception.wrap_exception
- def enable_host(self, context, instance_id=None, host=None):
- """Set a host so that it can accept new instances."""
- return self.driver.enable_host(host)
+ def set_host_enabled(self, context, instance_id=None, host=None,
+ enabled=None):
+ """Sets the specified host's ability to accept new instances."""
+ return self.driver.set_host_enabled(host, enabled)
@exception.wrap_exception
def get_diagnostics(self, context, instance_id):
diff --git a/nova/virt/driver.py b/nova/virt/driver.py
index 1c9797973..3c4a073bf 100644
--- a/nova/virt/driver.py
+++ b/nova/virt/driver.py
@@ -249,3 +249,7 @@ class ComputeDriver(object):
def poll_rescued_instances(self, timeout):
"""Poll for rescued instances"""
raise NotImplementedError()
+
+ def set_host_enabled(self, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ raise NotImplementedError()
diff --git a/nova/virt/fake.py b/nova/virt/fake.py
index 5fe9d674f..ea0a59f21 100644
--- a/nova/virt/fake.py
+++ b/nova/virt/fake.py
@@ -514,3 +514,7 @@ class FakeConnection(driver.ComputeDriver):
def get_host_stats(self, refresh=False):
"""Return fake Host Status of ram, disk, network."""
return self.host_status
+
+ def set_host_enabled(self, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ pass
diff --git a/nova/virt/hyperv.py b/nova/virt/hyperv.py
index f6783f3aa..5c1dc772d 100644
--- a/nova/virt/hyperv.py
+++ b/nova/virt/hyperv.py
@@ -499,3 +499,7 @@ class HyperVConnection(driver.ComputeDriver):
def get_host_stats(self, refresh=False):
"""See xenapi_conn.py implementation."""
pass
+
+ def set_host_enabled(self, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ pass
diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py
index 0c6eaab84..b80a3daee 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -1591,3 +1591,7 @@ class LibvirtConnection(driver.ComputeDriver):
def get_host_stats(self, refresh=False):
"""See xenapi_conn.py implementation."""
pass
+
+ def set_host_enabled(self, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ pass
diff --git a/nova/virt/vmwareapi_conn.py b/nova/virt/vmwareapi_conn.py
index 3c6345ec8..d80e14931 100644
--- a/nova/virt/vmwareapi_conn.py
+++ b/nova/virt/vmwareapi_conn.py
@@ -190,6 +190,10 @@ class VMWareESXConnection(driver.ComputeDriver):
"""This method is supported only by libvirt."""
return
+ def set_host_enabled(self, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ pass
+
class VMWareAPISession(object):
"""
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index b116c8467..44645840c 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -24,6 +24,7 @@ import json
import M2Crypto
import os
import pickle
+import random
import subprocess
import time
import uuid
@@ -932,6 +933,23 @@ class VMOps(object):
# TODO: implement this!
return 'http://fakeajaxconsole/fake_url'
+ def set_host_enabled(self, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ return self._call_xenhost("set_enabled", {"enabled": enabled})
+
+ def _call_xenhost(self, method, arg_dict):
+ # Create a task ID as something that won't match any instance ID
+ task_id = random.randint(-80000, -70000)
+ try:
+ task = self._session.async_call_plugin("xenhost", method,
+ args=arg_dict)
+ ret = self._session.wait_for_task(task, task_id)
+ except self.XenAPI.Failure as e:
+ ret = None
+ LOG.error(_("The call to %(method)s returned an error: %(e)s.")
+ % locals())
+ return ret
+
def inject_network_info(self, instance, network_info, vm_ref=None):
"""
Generate the network info and make calls to place it into the
diff --git a/nova/virt/xenapi_conn.py b/nova/virt/xenapi_conn.py
index cd4dc1b60..ec8c44c1c 100644
--- a/nova/virt/xenapi_conn.py
+++ b/nova/virt/xenapi_conn.py
@@ -336,6 +336,10 @@ class XenAPIConnection(driver.ComputeDriver):
True, run the update first."""
return self.HostState.get_host_stats(refresh=refresh)
+ def set_host_enabled(self, host, enabled):
+ """Sets the specified host's ability to accept new instances."""
+ return self._vmops.set_host_enabled(host, enabled)
+
class XenAPISession(object):
"""The session to invoke XenAPI SDK calls"""