blob: ff65b2518516e7d3690d872a8983ee7c272756fe [file] [log] [blame]
Matthew Treinish9e26ca82016-02-23 11:43:20 -05001# Copyright 2012 OpenStack Foundation
2# Copyright 2013 Hewlett-Packard Development Company, L.P.
Felipe Monteiro7c95bef2017-02-17 18:49:02 -05003# Copyright 2017 AT&T Corp.
Matthew Treinish9e26ca82016-02-23 11:43:20 -05004# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
18import copy
19
20from oslo_serialization import jsonutils as json
21from six.moves.urllib import parse as urllib
22
zwhe3beb6cf2017-02-09 16:59:41 +080023from tempest.lib.api_schema.response.compute.v2_1 import \
24 security_groups as security_groups_schema
Matthew Treinish9e26ca82016-02-23 11:43:20 -050025from tempest.lib.api_schema.response.compute.v2_1 import servers as schema
Eli Qiaoe07eacc2016-03-03 13:49:37 +080026from tempest.lib.api_schema.response.compute.v2_16 import servers as schemav216
lanoux2746ba02016-03-16 17:41:01 +090027from tempest.lib.api_schema.response.compute.v2_19 import servers as schemav219
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040028from tempest.lib.api_schema.response.compute.v2_26 import servers as schemav226
Eli Qiaoe07eacc2016-03-03 13:49:37 +080029from tempest.lib.api_schema.response.compute.v2_3 import servers as schemav23
Markus Zoeller69d58b82017-02-17 10:09:22 +010030from tempest.lib.api_schema.response.compute.v2_6 import servers as schemav26
lanoux2746ba02016-03-16 17:41:01 +090031from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050032from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090033from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050034
35
Ghanshyamee9af302016-02-25 06:12:43 +090036class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080037 """Service client for the resource /servers"""
38
lanoux2746ba02016-03-16 17:41:01 +090039 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080040 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010041 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
42 {'min': '2.6', 'max': '2.8', 'schema': schemav26},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080043 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
44 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040045 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
46 {'min': '2.26', 'max': None, 'schema': schemav226}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050047
48 def __init__(self, auth_provider, service, region,
49 enable_instance_password=True, **kwargs):
50 super(ServersClient, self).__init__(
51 auth_provider, service, region, **kwargs)
52 self.enable_instance_password = enable_instance_password
53
54 def create_server(self, **kwargs):
55 """Create server.
56
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070057 For a full list of available parameters, please refer to the official
58 API reference:
59 http://developer.openstack.org/api-ref/compute/#create-server
60
61 :param name: Server name
62 :param imageRef: Image reference (UUID)
63 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050064
65 Most parameters except the following are passed to the API without
66 any changes.
67 :param disk_config: The name is changed to OS-DCF:diskConfig
68 :param scheduler_hints: The name is changed to os:scheduler_hints and
69 the parameter is set in the same level as the parameter 'server'.
70 """
71 body = copy.deepcopy(kwargs)
72 if body.get('disk_config'):
73 body['OS-DCF:diskConfig'] = body.pop('disk_config')
74
75 hints = None
76 if body.get('scheduler_hints'):
77 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
78
79 post_body = {'server': body}
80
81 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +020082 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050083
84 post_body = json.dumps(post_body)
85 resp, body = self.post('servers', post_body)
86
87 body = json.loads(body)
88 # NOTE(maurosr): this deals with the case of multiple server create
89 # with return reservation id set True
90 if 'reservation_id' in body:
91 return rest_client.ResponseBody(resp, body)
92 if self.enable_instance_password:
93 create_schema = schema.create_server_with_admin_pass
94 else:
95 create_schema = schema.create_server
96 self.validate_response(create_schema, resp, body)
97 return rest_client.ResponseBody(resp, body)
98
99 def update_server(self, server_id, **kwargs):
100 """Update server.
101
Dong Mad12c2332016-10-19 01:36:27 -0700102 For a full list of available parameters, please refer to the official
103 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800104 https://developer.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500105
106 Most parameters except the following are passed to the API without
107 any changes.
108 :param disk_config: The name is changed to OS-DCF:diskConfig
109 """
ghanshyam910022e2016-12-21 13:32:57 +0900110 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500111 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
112
113 post_body = json.dumps({'server': kwargs})
114 resp, body = self.put("servers/%s" % server_id, post_body)
115 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900116 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500117 self.validate_response(schema.update_server, resp, body)
118 return rest_client.ResponseBody(resp, body)
119
120 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800121 """Get server details.
122
Dong Mad12c2332016-10-19 01:36:27 -0700123 For a full list of available parameters, please refer to the official
124 API reference:
125 http://developer.openstack.org/api-ref-compute-v2.1.html#showServer
Lv Fumei7e326332016-07-08 15:18:03 +0800126 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500127 resp, body = self.get("servers/%s" % server_id)
128 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900129 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500130 self.validate_response(schema.get_server, resp, body)
131 return rest_client.ResponseBody(resp, body)
132
133 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800134 """Delete server.
135
Dong Mad12c2332016-10-19 01:36:27 -0700136 For a full list of available parameters, please refer to the official
137 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800138 https://developer.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800139 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500140 resp, body = self.delete("servers/%s" % server_id)
141 self.validate_response(schema.delete_server, resp, body)
142 return rest_client.ResponseBody(resp, body)
143
144 def list_servers(self, detail=False, **params):
145 """List servers.
146
Dong Mad12c2332016-10-19 01:36:27 -0700147 For a full list of available parameters, please refer to the official
148 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800149 https://developer.openstack.org/api-ref/compute/#list-servers
150 https://developer.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500151 """
152
153 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900154 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500155 _schema = schema.list_servers
156
157 if detail:
158 url += '/detail'
159 _schema = schema.list_servers_detail
160 if params:
161 url += '?%s' % urllib.urlencode(params)
162
163 resp, body = self.get(url)
164 body = json.loads(body)
165 self.validate_response(_schema, resp, body)
166 return rest_client.ResponseBody(resp, body)
167
168 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800169 """Lists all addresses for a server.
170
Dong Mad12c2332016-10-19 01:36:27 -0700171 For a full list of available parameters, please refer to the official
172 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800173 https://developer.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800174 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500175 resp, body = self.get("servers/%s/ips" % server_id)
176 body = json.loads(body)
177 self.validate_response(schema.list_addresses, resp, body)
178 return rest_client.ResponseBody(resp, body)
179
180 def list_addresses_by_network(self, server_id, network_id):
181 """Lists all addresses of a specific network type for a server."""
182 resp, body = self.get("servers/%s/ips/%s" %
183 (server_id, network_id))
184 body = json.loads(body)
185 self.validate_response(schema.list_addresses_by_network, resp, body)
186 return rest_client.ResponseBody(resp, body)
187
188 def action(self, server_id, action_name,
189 schema=schema.server_actions_common_schema,
190 **kwargs):
191 post_body = json.dumps({action_name: kwargs})
192 resp, body = self.post('servers/%s/action' % server_id,
193 post_body)
194 if body:
195 body = json.loads(body)
196 self.validate_response(schema, resp, body)
197 return rest_client.ResponseBody(resp, body)
198
199 def create_backup(self, server_id, **kwargs):
200 """Backup a server instance.
201
Dong Mad12c2332016-10-19 01:36:27 -0700202 For a full list of available parameters, please refer to the official
203 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800204 https://developer.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500205 """
206 return self.action(server_id, "createBackup", **kwargs)
207
208 def change_password(self, server_id, **kwargs):
209 """Change the root password for the server.
210
Dong Mad12c2332016-10-19 01:36:27 -0700211 For a full list of available parameters, please refer to the official
212 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800213 https://developer.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500214 """
215 return self.action(server_id, 'changePassword', **kwargs)
216
217 def show_password(self, server_id):
218 resp, body = self.get("servers/%s/os-server-password" %
219 server_id)
220 body = json.loads(body)
221 self.validate_response(schema.show_password, resp, body)
222 return rest_client.ResponseBody(resp, body)
223
224 def delete_password(self, server_id):
225 """Removes the encrypted server password from the metadata server
226
227 Note that this does not actually change the instance server
228 password.
229 """
230 resp, body = self.delete("servers/%s/os-server-password" %
231 server_id)
232 self.validate_response(schema.server_actions_delete_password,
233 resp, body)
234 return rest_client.ResponseBody(resp, body)
235
236 def reboot_server(self, server_id, **kwargs):
237 """Reboot a server.
238
Dong Mad12c2332016-10-19 01:36:27 -0700239 For a full list of available parameters, please refer to the official
240 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800241 https://developer.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500242 """
243 return self.action(server_id, 'reboot', **kwargs)
244
245 def rebuild_server(self, server_id, image_ref, **kwargs):
246 """Rebuild a server with a new image.
247
Dong Mad12c2332016-10-19 01:36:27 -0700248 For a full list of available parameters, please refer to the official
249 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800250 https://developer.openstack.org/api-ref/compute/#rebuild-server-rebuild-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500251
252 Most parameters except the following are passed to the API without
253 any changes.
254 :param disk_config: The name is changed to OS-DCF:diskConfig
255 """
256 kwargs['imageRef'] = image_ref
257 if 'disk_config' in kwargs:
258 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900259 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500260 if self.enable_instance_password:
261 rebuild_schema = schema.rebuild_server_with_admin_pass
262 else:
263 rebuild_schema = schema.rebuild_server
264 return self.action(server_id, 'rebuild',
265 rebuild_schema, **kwargs)
266
267 def resize_server(self, server_id, flavor_ref, **kwargs):
268 """Change the flavor of a server.
269
Dong Mad12c2332016-10-19 01:36:27 -0700270 For a full list of available parameters, please refer to the official
271 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800272 https://developer.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500273
274 Most parameters except the following are passed to the API without
275 any changes.
276 :param disk_config: The name is changed to OS-DCF:diskConfig
277 """
278 kwargs['flavorRef'] = flavor_ref
279 if 'disk_config' in kwargs:
280 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
281 return self.action(server_id, 'resize', **kwargs)
282
283 def confirm_resize_server(self, server_id, **kwargs):
284 """Confirm the flavor change for a server.
285
Dong Mad12c2332016-10-19 01:36:27 -0700286 For a full list of available parameters, please refer to the official
287 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800288 https://developer.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500289 """
290 return self.action(server_id, 'confirmResize',
291 schema.server_actions_confirm_resize,
292 **kwargs)
293
294 def revert_resize_server(self, server_id, **kwargs):
295 """Revert a server back to its original flavor.
296
Dong Mad12c2332016-10-19 01:36:27 -0700297 For a full list of available parameters, please refer to the official
298 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800299 https://developer.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500300 """
301 return self.action(server_id, 'revertResize', **kwargs)
302
303 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800304 """Lists all metadata for a server.
305
Dong Mad12c2332016-10-19 01:36:27 -0700306 For a full list of available parameters, please refer to the official
307 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800308 https://developer.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800309 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500310 resp, body = self.get("servers/%s/metadata" % server_id)
311 body = json.loads(body)
312 self.validate_response(schema.list_server_metadata, resp, body)
313 return rest_client.ResponseBody(resp, body)
314
315 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800316 """Sets one or more metadata items for a server.
317
Dong Mad12c2332016-10-19 01:36:27 -0700318 For a full list of available parameters, please refer to the official
319 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800320 https://developer.openstack.org/api-ref/compute/#create-or-replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800321 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500322 if no_metadata_field:
323 post_body = ""
324 else:
325 post_body = json.dumps({'metadata': meta})
326 resp, body = self.put('servers/%s/metadata' % server_id,
327 post_body)
328 body = json.loads(body)
329 self.validate_response(schema.set_server_metadata, resp, body)
330 return rest_client.ResponseBody(resp, body)
331
332 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800333 """Updates one or more metadata items for a server.
334
Dong Mad12c2332016-10-19 01:36:27 -0700335 For a full list of available parameters, please refer to the official
336 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800337 https://developer.openstack.org/api-ref/compute/#update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800338 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500339 post_body = json.dumps({'metadata': meta})
340 resp, body = self.post('servers/%s/metadata' % server_id,
341 post_body)
342 body = json.loads(body)
343 self.validate_response(schema.update_server_metadata,
344 resp, body)
345 return rest_client.ResponseBody(resp, body)
346
347 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800348 """Shows details for a metadata item, by key, for a server.
349
Dong Mad12c2332016-10-19 01:36:27 -0700350 For a full list of available parameters, please refer to the official
351 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800352 https://developer.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800353 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500354 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
355 body = json.loads(body)
356 self.validate_response(schema.set_show_server_metadata_item,
357 resp, body)
358 return rest_client.ResponseBody(resp, body)
359
360 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800361 """Sets a metadata item, by key, for a server.
362
Dong Mad12c2332016-10-19 01:36:27 -0700363 For a full list of available parameters, please refer to the official
364 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800365 https://developer.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800366 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500367 post_body = json.dumps({'meta': meta})
368 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
369 post_body)
370 body = json.loads(body)
371 self.validate_response(schema.set_show_server_metadata_item,
372 resp, body)
373 return rest_client.ResponseBody(resp, body)
374
375 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800376 """Deletes a metadata item, by key, from a server.
377
Dong Mad12c2332016-10-19 01:36:27 -0700378 For a full list of available parameters, please refer to the official
379 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800380 https://developer.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800381 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500382 resp, body = self.delete("servers/%s/metadata/%s" %
383 (server_id, key))
384 self.validate_response(schema.delete_server_metadata_item,
385 resp, body)
386 return rest_client.ResponseBody(resp, body)
387
388 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800389 """Stops a running server and changes its status to SHUTOFF.
390
Dong Mad12c2332016-10-19 01:36:27 -0700391 For a full list of available parameters, please refer to the official
392 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800393 https://developer.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800394 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500395 return self.action(server_id, 'os-stop', **kwargs)
396
397 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800398 """Starts a stopped server and changes its status to ACTIVE.
399
Dong Mad12c2332016-10-19 01:36:27 -0700400 For a full list of available parameters, please refer to the official
401 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800402 https://developer.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800403 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500404 return self.action(server_id, 'os-start', **kwargs)
405
406 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800407 """Attaches a volume to a server instance.
408
Dong Mad12c2332016-10-19 01:36:27 -0700409 For a full list of available parameters, please refer to the official
410 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800411 https://developer.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800412 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500413 post_body = json.dumps({'volumeAttachment': kwargs})
414 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
415 post_body)
416 body = json.loads(body)
417 self.validate_response(schema.attach_volume, resp, body)
418 return rest_client.ResponseBody(resp, body)
419
420 def update_attached_volume(self, server_id, attachment_id, **kwargs):
421 """Swaps a volume attached to an instance for another volume"""
422 post_body = json.dumps({'volumeAttachment': kwargs})
423 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
424 (server_id, attachment_id),
425 post_body)
426 self.validate_response(schema.update_attached_volume, resp, body)
427 return rest_client.ResponseBody(resp, body)
428
429 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800430 """Detaches a volume from a server instance.
431
Dong Mad12c2332016-10-19 01:36:27 -0700432 For a full list of available parameters, please refer to the official
433 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800434 https://developer.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800435 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500436 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
437 (server_id, volume_id))
438 self.validate_response(schema.detach_volume, resp, body)
439 return rest_client.ResponseBody(resp, body)
440
441 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800442 """Return details about the given volume attachment.
443
Dong Mad12c2332016-10-19 01:36:27 -0700444 For a full list of available parameters, please refer to the official
445 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800446 https://developer.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800447 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500448 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
449 server_id, volume_id))
450 body = json.loads(body)
451 self.validate_response(schema.show_volume_attachment, resp, body)
452 return rest_client.ResponseBody(resp, body)
453
454 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800455 """Returns the list of volume attachments for a given instance.
456
Dong Mad12c2332016-10-19 01:36:27 -0700457 For a full list of available parameters, please refer to the official
458 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800459 https://developer.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800460 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500461 resp, body = self.get('servers/%s/os-volume_attachments' % (
462 server_id))
463 body = json.loads(body)
464 self.validate_response(schema.list_volume_attachments, resp, body)
465 return rest_client.ResponseBody(resp, body)
466
467 def add_security_group(self, server_id, **kwargs):
468 """Add a security group to the server.
469
Dong Mad12c2332016-10-19 01:36:27 -0700470 For a full list of available parameters, please refer to the official
471 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800472 https://developer.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500473 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500474 return self.action(server_id, 'addSecurityGroup', **kwargs)
475
476 def remove_security_group(self, server_id, **kwargs):
477 """Remove a security group from the server.
478
Dong Mad12c2332016-10-19 01:36:27 -0700479 For a full list of available parameters, please refer to the official
480 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800481 https://developer.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500482 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500483 return self.action(server_id, 'removeSecurityGroup', **kwargs)
484
485 def live_migrate_server(self, server_id, **kwargs):
486 """This should be called with administrator privileges.
487
Dong Mad12c2332016-10-19 01:36:27 -0700488 For a full list of available parameters, please refer to the official
489 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800490 https://developer.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500491 """
492 return self.action(server_id, 'os-migrateLive', **kwargs)
493
494 def migrate_server(self, server_id, **kwargs):
495 """Migrate a server to a new host.
496
Dong Mad12c2332016-10-19 01:36:27 -0700497 For a full list of available parameters, please refer to the official
498 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800499 https://developer.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500500 """
501 return self.action(server_id, 'migrate', **kwargs)
502
503 def lock_server(self, server_id, **kwargs):
504 """Lock the given server.
505
Dong Mad12c2332016-10-19 01:36:27 -0700506 For a full list of available parameters, please refer to the official
507 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800508 https://developer.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500509 """
510 return self.action(server_id, 'lock', **kwargs)
511
512 def unlock_server(self, server_id, **kwargs):
513 """UNlock the given server.
514
Dong Mad12c2332016-10-19 01:36:27 -0700515 For a full list of available parameters, please refer to the official
516 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800517 https://developer.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500518 """
519 return self.action(server_id, 'unlock', **kwargs)
520
521 def suspend_server(self, server_id, **kwargs):
522 """Suspend the provided server.
523
Dong Mad12c2332016-10-19 01:36:27 -0700524 For a full list of available parameters, please refer to the official
525 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800526 https://developer.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500527 """
528 return self.action(server_id, 'suspend', **kwargs)
529
530 def resume_server(self, server_id, **kwargs):
531 """Un-suspend the provided server.
532
Dong Mad12c2332016-10-19 01:36:27 -0700533 For a full list of available parameters, please refer to the official
534 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800535 https://developer.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500536 """
537 return self.action(server_id, 'resume', **kwargs)
538
539 def pause_server(self, server_id, **kwargs):
540 """Pause the provided server.
541
Dong Mad12c2332016-10-19 01:36:27 -0700542 For a full list of available parameters, please refer to the official
543 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800544 https://developer.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500545 """
546 return self.action(server_id, 'pause', **kwargs)
547
548 def unpause_server(self, server_id, **kwargs):
549 """Un-pause the provided server.
550
Dong Mad12c2332016-10-19 01:36:27 -0700551 For a full list of available parameters, please refer to the official
552 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800553 https://developer.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500554 """
555 return self.action(server_id, 'unpause', **kwargs)
556
557 def reset_state(self, server_id, **kwargs):
558 """Reset the state of a server to active/error.
559
Dong Mad12c2332016-10-19 01:36:27 -0700560 For a full list of available parameters, please refer to the official
561 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800562 https://developer.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500563 """
564 return self.action(server_id, 'os-resetState', **kwargs)
565
566 def shelve_server(self, server_id, **kwargs):
567 """Shelve the provided server.
568
Dong Mad12c2332016-10-19 01:36:27 -0700569 For a full list of available parameters, please refer to the official
570 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800571 https://developer.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500572 """
573 return self.action(server_id, 'shelve', **kwargs)
574
575 def unshelve_server(self, server_id, **kwargs):
576 """Un-shelve the provided server.
577
Dong Mad12c2332016-10-19 01:36:27 -0700578 For a full list of available parameters, please refer to the official
579 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800580 https://developer.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500581 """
582 return self.action(server_id, 'unshelve', **kwargs)
583
584 def shelve_offload_server(self, server_id, **kwargs):
585 """Shelve-offload the provided server.
586
Dong Mad12c2332016-10-19 01:36:27 -0700587 For a full list of available parameters, please refer to the official
588 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800589 https://developer.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500590 """
591 return self.action(server_id, 'shelveOffload', **kwargs)
592
593 def get_console_output(self, server_id, **kwargs):
594 """Get console output.
595
Dong Mad12c2332016-10-19 01:36:27 -0700596 For a full list of available parameters, please refer to the official
597 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800598 https://developer.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500599 """
600 return self.action(server_id, 'os-getConsoleOutput',
601 schema.get_console_output, **kwargs)
602
Markus Zoeller69d58b82017-02-17 10:09:22 +0100603 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
604 """Get a remote console.
605
606 For a full list of available parameters, please refer to the official
607 API reference:
608 TODO (markus_z) The api-ref for that isn't yet available, update this
609 here when the docs in Nova are updated. The old API is at
610 http://developer.openstack.org/api-ref/compute/#get-serial-console-os-getserialconsole-action
611 """
612 param = {
613 'remote_console': {
614 'type': console_type,
615 'protocol': protocol,
616 }
617 }
618 post_body = json.dumps(param)
619 resp, body = self.post("servers/%s/remote-consoles" % server_id,
620 post_body)
621 body = json.loads(body)
622 schema = self.get_schema(self.schema_versions_info)
623 self.validate_response(schema.get_remote_consoles, resp, body)
624 return rest_client.ResponseBody(resp, body)
625
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500626 def list_virtual_interfaces(self, server_id):
627 """List the virtual interfaces used in an instance."""
628 resp, body = self.get('/'.join(['servers', server_id,
629 'os-virtual-interfaces']))
630 body = json.loads(body)
631 self.validate_response(schema.list_virtual_interfaces, resp, body)
632 return rest_client.ResponseBody(resp, body)
633
634 def rescue_server(self, server_id, **kwargs):
635 """Rescue the provided server.
636
Dong Mad12c2332016-10-19 01:36:27 -0700637 For a full list of available parameters, please refer to the official
638 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800639 https://developer.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500640 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100641 if self.enable_instance_password:
642 rescue_schema = schema.rescue_server_with_admin_pass
643 else:
644 rescue_schema = schema.rescue_server
645 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500646
647 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800648 """Unrescue the provided server.
649
Dong Mad12c2332016-10-19 01:36:27 -0700650 For a full list of available parameters, please refer to the official
651 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800652 https://developer.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800653 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500654 return self.action(server_id, 'unrescue')
655
656 def show_server_diagnostics(self, server_id):
657 """Get the usage data for a server."""
658 resp, body = self.get("servers/%s/diagnostics" % server_id)
659 return rest_client.ResponseBody(resp, json.loads(body))
660
661 def list_instance_actions(self, server_id):
662 """List the provided server action."""
663 resp, body = self.get("servers/%s/os-instance-actions" %
664 server_id)
665 body = json.loads(body)
666 self.validate_response(schema.list_instance_actions, resp, body)
667 return rest_client.ResponseBody(resp, body)
668
669 def show_instance_action(self, server_id, request_id):
670 """Returns the action details of the provided server."""
671 resp, body = self.get("servers/%s/os-instance-actions/%s" %
672 (server_id, request_id))
673 body = json.loads(body)
674 self.validate_response(schema.show_instance_action, resp, body)
675 return rest_client.ResponseBody(resp, body)
676
677 def force_delete_server(self, server_id, **kwargs):
678 """Force delete a server.
679
Dong Mad12c2332016-10-19 01:36:27 -0700680 For a full list of available parameters, please refer to the official
681 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800682 https://developer.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500683 """
684 return self.action(server_id, 'forceDelete', **kwargs)
685
686 def restore_soft_deleted_server(self, server_id, **kwargs):
687 """Restore a soft-deleted server.
688
Dong Mad12c2332016-10-19 01:36:27 -0700689 For a full list of available parameters, please refer to the official
690 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800691 https://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500692 """
693 return self.action(server_id, 'restore', **kwargs)
694
695 def reset_network(self, server_id, **kwargs):
696 """Reset the Network of a server.
697
Dong Mad12c2332016-10-19 01:36:27 -0700698 For a full list of available parameters, please refer to the official
699 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800700 https://developer.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500701 """
702 return self.action(server_id, 'resetNetwork', **kwargs)
703
704 def inject_network_info(self, server_id, **kwargs):
705 """Inject the Network Info into server.
706
Dong Mad12c2332016-10-19 01:36:27 -0700707 For a full list of available parameters, please refer to the official
708 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800709 https://developer.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500710 """
711 return self.action(server_id, 'injectNetworkInfo', **kwargs)
712
713 def get_vnc_console(self, server_id, **kwargs):
714 """Get URL of VNC console.
715
Dong Mad12c2332016-10-19 01:36:27 -0700716 For a full list of available parameters, please refer to the official
717 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800718 https://developer.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500719 """
720 return self.action(server_id, "os-getVNCConsole",
721 schema.get_vnc_console, **kwargs)
722
723 def add_fixed_ip(self, server_id, **kwargs):
724 """Add a fixed IP to server instance.
725
Dong Mad12c2332016-10-19 01:36:27 -0700726 For a full list of available parameters, please refer to the official
727 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800728 https://developer.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500729 """
730 return self.action(server_id, 'addFixedIp', **kwargs)
731
732 def remove_fixed_ip(self, server_id, **kwargs):
733 """Remove input fixed IP from input server instance.
734
Dong Mad12c2332016-10-19 01:36:27 -0700735 For a full list of available parameters, please refer to the official
736 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800737 https://developer.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500738 """
739 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800740
741 def list_security_groups_by_server(self, server_id):
742 """Lists security groups for a server.
743
744 For a full list of available parameters, please refer to the official
745 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800746 https://developer.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800747 """
748 resp, body = self.get("servers/%s/os-security-groups" % server_id)
749 body = json.loads(body)
750 self.validate_response(security_groups_schema.list_security_groups,
751 resp, body)
752 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500753
754 def list_tags(self, server_id):
755 """Lists all tags for a server.
756
757 For a full list of available parameters, please refer to the official
758 API reference:
759 https://developer.openstack.org/api-ref/compute/#list-tags
760 """
761 url = 'servers/%s/tags' % server_id
762 resp, body = self.get(url)
763 body = json.loads(body)
764 schema = self.get_schema(self.schema_versions_info)
765 self.validate_response(schema.list_tags, resp, body)
766 return rest_client.ResponseBody(resp, body)
767
768 def update_all_tags(self, server_id, tags):
769 """Replaces all tags on specified server with the new set of tags.
770
771 For a full list of available parameters, please refer to the official
772 API reference:
773 https://developer.openstack.org/api-ref/compute/#replace-tags
774
775 :param tags: List of tags to replace current server tags with.
776 """
777 url = 'servers/%s/tags' % server_id
778 put_body = {'tags': tags}
779 resp, body = self.put(url, json.dumps(put_body))
780 body = json.loads(body)
781 schema = self.get_schema(self.schema_versions_info)
782 self.validate_response(schema.update_all_tags, resp, body)
783 return rest_client.ResponseBody(resp, body)
784
785 def delete_all_tags(self, server_id):
786 """Deletes all tags from the specified server.
787
788 For a full list of available parameters, please refer to the official
789 API reference:
790 https://developer.openstack.org/api-ref/compute/#delete-all-tags
791 """
792 url = 'servers/%s/tags' % server_id
793 resp, body = self.delete(url)
794 schema = self.get_schema(self.schema_versions_info)
795 self.validate_response(schema.delete_all_tags, resp, body)
796 return rest_client.ResponseBody(resp, body)
797
798 def check_tag_existence(self, server_id, tag):
799 """Checks tag existence on the server.
800
801 For a full list of available parameters, please refer to the official
802 API reference:
803 https://developer.openstack.org/api-ref/compute/#check-tag-existence
804
805 :param tag: Check for existence of tag on specified server.
806 """
807 url = 'servers/%s/tags/%s' % (server_id, tag)
808 resp, body = self.get(url)
809 schema = self.get_schema(self.schema_versions_info)
810 self.validate_response(schema.check_tag_existence, resp, body)
811 return rest_client.ResponseBody(resp, body)
812
813 def update_tag(self, server_id, tag):
814 """Adds a single tag to the server if server has no specified tag.
815
816 For a full list of available parameters, please refer to the official
817 API reference:
818 https://developer.openstack.org/api-ref/compute/#add-a-single-tag
819
820 :param tag: Tag to be added to the specified server.
821 """
822 url = 'servers/%s/tags/%s' % (server_id, tag)
823 resp, body = self.put(url, None)
824 schema = self.get_schema(self.schema_versions_info)
825 self.validate_response(schema.update_tag, resp, body)
826 return rest_client.ResponseBody(resp, body)
827
828 def delete_tag(self, server_id, tag):
829 """Deletes a single tag from the specified server.
830
831 For a full list of available parameters, please refer to the official
832 API reference:
833 https://developer.openstack.org/api-ref/compute/#delete-a-single-tag
834
835 :param tag: Tag to be removed from the specified server.
836 """
837 url = 'servers/%s/tags/%s' % (server_id, tag)
838 resp, body = self.delete(url)
839 schema = self.get_schema(self.schema_versions_info)
840 self.validate_response(schema.delete_tag, resp, body)
841 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530842
843 def evacuate_server(self, server_id, **kwargs):
844 """Evacuate the given server.
845
846 For a full list of available parameters, please refer to the official
847 API reference:
848 https://developer.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
849 """
850 if self.enable_instance_password:
851 evacuate_schema = schema.evacuate_server_with_admin_pass
852 else:
853 evacuate_schema = schema.evacuate_server
854
855 return self.action(server_id, 'evacuate',
856 evacuate_schema,
857 **kwargs)