summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2011-08-18 21:09:01 -0400
committerAlex Meade <alex.meade@rackspace.com>2011-08-18 21:09:01 -0400
commit65a8ad501e8bc306ab89b67b339615967d0af6c5 (patch)
treef39df0f4364253839999c90516bb74a2123ec344 /nova/api
parent4ffd31764f47bbe11d59753ef9731b8eb2c61243 (diff)
parent862dc7acaf86bcfaebfce423c8198ea18b5e07c4 (diff)
merged trunk
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/contrib/rescue.py83
-rw-r--r--nova/api/openstack/create_instance_helper.py2
-rw-r--r--nova/api/openstack/servers.py6
3 files changed, 91 insertions, 0 deletions
diff --git a/nova/api/openstack/contrib/rescue.py b/nova/api/openstack/contrib/rescue.py
new file mode 100644
index 000000000..3de128895
--- /dev/null
+++ b/nova/api/openstack/contrib/rescue.py
@@ -0,0 +1,83 @@
+# Copyright 2011 Openstack, LLC.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""The rescue mode extension."""
+
+import webob
+from webob import exc
+
+from nova import compute
+from nova import log as logging
+from nova.api.openstack import extensions as exts
+from nova.api.openstack import faults
+
+
+LOG = logging.getLogger("nova.api.contrib.rescue")
+
+
+def wrap_errors(fn):
+ """"Ensure errors are not passed along."""
+ def wrapped(*args):
+ try:
+ fn(*args)
+ except Exception, e:
+ return faults.Fault(exc.HTTPInternalServerError())
+ return wrapped
+
+
+class Rescue(exts.ExtensionDescriptor):
+ """The Rescue controller for the OpenStack API."""
+ def __init__(self):
+ super(Rescue, self).__init__()
+ self.compute_api = compute.API()
+
+ @wrap_errors
+ def _rescue(self, input_dict, req, instance_id):
+ """Rescue an instance."""
+ context = req.environ["nova.context"]
+ self.compute_api.rescue(context, instance_id)
+
+ return webob.Response(status_int=202)
+
+ @wrap_errors
+ def _unrescue(self, input_dict, req, instance_id):
+ """Unrescue an instance."""
+ context = req.environ["nova.context"]
+ self.compute_api.unrescue(context, instance_id)
+
+ return webob.Response(status_int=202)
+
+ def get_name(self):
+ return "Rescue"
+
+ def get_alias(self):
+ return "os-rescue"
+
+ def get_description(self):
+ return "Instance rescue mode"
+
+ def get_namespace(self):
+ return "http://docs.openstack.org/ext/rescue/api/v1.1"
+
+ def get_updated(self):
+ return "2011-08-18T00:00:00+00:00"
+
+ def get_actions(self):
+ """Return the actions the extension adds, as required by contract."""
+ actions = [
+ exts.ActionExtension("servers", "rescue", self._rescue),
+ exts.ActionExtension("servers", "unrescue", self._unrescue),
+ ]
+
+ return actions
diff --git a/nova/api/openstack/create_instance_helper.py b/nova/api/openstack/create_instance_helper.py
index 2676ab02f..b17bb5b62 100644
--- a/nova/api/openstack/create_instance_helper.py
+++ b/nova/api/openstack/create_instance_helper.py
@@ -122,6 +122,7 @@ class CreateInstanceHelper(object):
raise exc.HTTPBadRequest(explanation=msg)
zone_blob = server_dict.get('blob')
+ user_data = server_dict.get('user_data')
availability_zone = server_dict.get('availability_zone')
name = server_dict['name']
self._validate_server_name(name)
@@ -165,6 +166,7 @@ class CreateInstanceHelper(object):
reservation_id=reservation_id,
min_count=min_count,
max_count=max_count,
+ user_data=user_data,
availability_zone=availability_zone))
except quota.QuotaError as error:
self._handle_quota_error(error)
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index df55d981a..1d1975a1c 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -935,6 +935,12 @@ class ServerXMLSerializer(wsgi.XMLDictSerializer):
node.setAttribute('adminPass', server_dict['server']['adminPass'])
return self.to_xml_string(node, True)
+ def update(self, server_dict):
+ xml_doc = minidom.Document()
+ node = self._server_to_xml_detailed(xml_doc,
+ server_dict['server'])
+ return self.to_xml_string(node, True)
+
def create_resource(version='1.0'):
controller = {