blob: 598d5a63e14d9f90072441780ed802f29ef9d5fe [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
Sergey Nikitin8654e5b2017-06-04 22:09:56 +040030from tempest.lib.api_schema.response.compute.v2_47 import servers as schemav247
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040031from tempest.lib.api_schema.response.compute.v2_48 import servers as schemav248
Markus Zoeller69d58b82017-02-17 10:09:22 +010032from tempest.lib.api_schema.response.compute.v2_6 import servers as schemav26
lanoux2746ba02016-03-16 17:41:01 +090033from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050034from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090035from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050036
37
Ghanshyamee9af302016-02-25 06:12:43 +090038class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080039 """Service client for the resource /servers"""
40
lanoux2746ba02016-03-16 17:41:01 +090041 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080042 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010043 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
44 {'min': '2.6', 'max': '2.8', 'schema': schemav26},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080045 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
46 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040047 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
Sergey Nikitin8654e5b2017-06-04 22:09:56 +040048 {'min': '2.26', 'max': '2.46', 'schema': schemav226},
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040049 {'min': '2.47', 'max': '2.47', 'schema': schemav247},
50 {'min': '2.48', 'max': None, 'schema': schemav248}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050051
52 def __init__(self, auth_provider, service, region,
53 enable_instance_password=True, **kwargs):
54 super(ServersClient, self).__init__(
55 auth_provider, service, region, **kwargs)
56 self.enable_instance_password = enable_instance_password
57
58 def create_server(self, **kwargs):
59 """Create server.
60
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070061 For a full list of available parameters, please refer to the official
62 API reference:
63 http://developer.openstack.org/api-ref/compute/#create-server
64
65 :param name: Server name
66 :param imageRef: Image reference (UUID)
67 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050068
69 Most parameters except the following are passed to the API without
70 any changes.
71 :param disk_config: The name is changed to OS-DCF:diskConfig
72 :param scheduler_hints: The name is changed to os:scheduler_hints and
73 the parameter is set in the same level as the parameter 'server'.
74 """
75 body = copy.deepcopy(kwargs)
76 if body.get('disk_config'):
77 body['OS-DCF:diskConfig'] = body.pop('disk_config')
78
79 hints = None
80 if body.get('scheduler_hints'):
81 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
82
83 post_body = {'server': body}
84
85 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +020086 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050087
88 post_body = json.dumps(post_body)
89 resp, body = self.post('servers', post_body)
90
91 body = json.loads(body)
92 # NOTE(maurosr): this deals with the case of multiple server create
93 # with return reservation id set True
94 if 'reservation_id' in body:
95 return rest_client.ResponseBody(resp, body)
96 if self.enable_instance_password:
97 create_schema = schema.create_server_with_admin_pass
98 else:
99 create_schema = schema.create_server
100 self.validate_response(create_schema, resp, body)
101 return rest_client.ResponseBody(resp, body)
102
103 def update_server(self, server_id, **kwargs):
104 """Update server.
105
Dong Mad12c2332016-10-19 01:36:27 -0700106 For a full list of available parameters, please refer to the official
107 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800108 https://developer.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500109
110 Most parameters except the following are passed to the API without
111 any changes.
112 :param disk_config: The name is changed to OS-DCF:diskConfig
113 """
ghanshyam910022e2016-12-21 13:32:57 +0900114 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500115 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
116
117 post_body = json.dumps({'server': kwargs})
118 resp, body = self.put("servers/%s" % server_id, post_body)
119 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900120 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500121 self.validate_response(schema.update_server, resp, body)
122 return rest_client.ResponseBody(resp, body)
123
124 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800125 """Get server details.
126
Dong Mad12c2332016-10-19 01:36:27 -0700127 For a full list of available parameters, please refer to the official
128 API reference:
129 http://developer.openstack.org/api-ref-compute-v2.1.html#showServer
Lv Fumei7e326332016-07-08 15:18:03 +0800130 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500131 resp, body = self.get("servers/%s" % server_id)
132 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900133 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500134 self.validate_response(schema.get_server, resp, body)
135 return rest_client.ResponseBody(resp, body)
136
137 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800138 """Delete server.
139
Dong Mad12c2332016-10-19 01:36:27 -0700140 For a full list of available parameters, please refer to the official
141 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800142 https://developer.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800143 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500144 resp, body = self.delete("servers/%s" % server_id)
145 self.validate_response(schema.delete_server, resp, body)
146 return rest_client.ResponseBody(resp, body)
147
148 def list_servers(self, detail=False, **params):
149 """List servers.
150
Dong Mad12c2332016-10-19 01:36:27 -0700151 For a full list of available parameters, please refer to the official
152 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800153 https://developer.openstack.org/api-ref/compute/#list-servers
154 https://developer.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500155 """
156
157 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900158 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500159 _schema = schema.list_servers
160
161 if detail:
162 url += '/detail'
163 _schema = schema.list_servers_detail
164 if params:
165 url += '?%s' % urllib.urlencode(params)
166
167 resp, body = self.get(url)
168 body = json.loads(body)
169 self.validate_response(_schema, resp, body)
170 return rest_client.ResponseBody(resp, body)
171
172 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800173 """Lists all addresses for a server.
174
Dong Mad12c2332016-10-19 01:36:27 -0700175 For a full list of available parameters, please refer to the official
176 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800177 https://developer.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800178 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500179 resp, body = self.get("servers/%s/ips" % server_id)
180 body = json.loads(body)
181 self.validate_response(schema.list_addresses, resp, body)
182 return rest_client.ResponseBody(resp, body)
183
184 def list_addresses_by_network(self, server_id, network_id):
185 """Lists all addresses of a specific network type for a server."""
186 resp, body = self.get("servers/%s/ips/%s" %
187 (server_id, network_id))
188 body = json.loads(body)
189 self.validate_response(schema.list_addresses_by_network, resp, body)
190 return rest_client.ResponseBody(resp, body)
191
192 def action(self, server_id, action_name,
193 schema=schema.server_actions_common_schema,
194 **kwargs):
195 post_body = json.dumps({action_name: kwargs})
196 resp, body = self.post('servers/%s/action' % server_id,
197 post_body)
198 if body:
199 body = json.loads(body)
200 self.validate_response(schema, resp, body)
201 return rest_client.ResponseBody(resp, body)
202
203 def create_backup(self, server_id, **kwargs):
204 """Backup a server instance.
205
Dong Mad12c2332016-10-19 01:36:27 -0700206 For a full list of available parameters, please refer to the official
207 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800208 https://developer.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500209 """
210 return self.action(server_id, "createBackup", **kwargs)
211
212 def change_password(self, server_id, **kwargs):
213 """Change the root password for the server.
214
Dong Mad12c2332016-10-19 01:36:27 -0700215 For a full list of available parameters, please refer to the official
216 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800217 https://developer.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500218 """
219 return self.action(server_id, 'changePassword', **kwargs)
220
221 def show_password(self, server_id):
222 resp, body = self.get("servers/%s/os-server-password" %
223 server_id)
224 body = json.loads(body)
225 self.validate_response(schema.show_password, resp, body)
226 return rest_client.ResponseBody(resp, body)
227
228 def delete_password(self, server_id):
229 """Removes the encrypted server password from the metadata server
230
231 Note that this does not actually change the instance server
232 password.
233 """
234 resp, body = self.delete("servers/%s/os-server-password" %
235 server_id)
236 self.validate_response(schema.server_actions_delete_password,
237 resp, body)
238 return rest_client.ResponseBody(resp, body)
239
240 def reboot_server(self, server_id, **kwargs):
241 """Reboot a server.
242
Dong Mad12c2332016-10-19 01:36:27 -0700243 For a full list of available parameters, please refer to the official
244 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800245 https://developer.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500246 """
247 return self.action(server_id, 'reboot', **kwargs)
248
249 def rebuild_server(self, server_id, image_ref, **kwargs):
250 """Rebuild a server with a new image.
251
Dong Mad12c2332016-10-19 01:36:27 -0700252 For a full list of available parameters, please refer to the official
253 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800254 https://developer.openstack.org/api-ref/compute/#rebuild-server-rebuild-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500255
256 Most parameters except the following are passed to the API without
257 any changes.
258 :param disk_config: The name is changed to OS-DCF:diskConfig
259 """
260 kwargs['imageRef'] = image_ref
261 if 'disk_config' in kwargs:
262 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900263 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500264 if self.enable_instance_password:
265 rebuild_schema = schema.rebuild_server_with_admin_pass
266 else:
267 rebuild_schema = schema.rebuild_server
268 return self.action(server_id, 'rebuild',
269 rebuild_schema, **kwargs)
270
271 def resize_server(self, server_id, flavor_ref, **kwargs):
272 """Change the flavor of a server.
273
Dong Mad12c2332016-10-19 01:36:27 -0700274 For a full list of available parameters, please refer to the official
275 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800276 https://developer.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500277
278 Most parameters except the following are passed to the API without
279 any changes.
280 :param disk_config: The name is changed to OS-DCF:diskConfig
281 """
282 kwargs['flavorRef'] = flavor_ref
283 if 'disk_config' in kwargs:
284 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
285 return self.action(server_id, 'resize', **kwargs)
286
287 def confirm_resize_server(self, server_id, **kwargs):
288 """Confirm the flavor change for a server.
289
Dong Mad12c2332016-10-19 01:36:27 -0700290 For a full list of available parameters, please refer to the official
291 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800292 https://developer.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500293 """
294 return self.action(server_id, 'confirmResize',
295 schema.server_actions_confirm_resize,
296 **kwargs)
297
298 def revert_resize_server(self, server_id, **kwargs):
299 """Revert a server back to its original flavor.
300
Dong Mad12c2332016-10-19 01:36:27 -0700301 For a full list of available parameters, please refer to the official
302 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800303 https://developer.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500304 """
305 return self.action(server_id, 'revertResize', **kwargs)
306
307 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800308 """Lists all metadata for a server.
309
Dong Mad12c2332016-10-19 01:36:27 -0700310 For a full list of available parameters, please refer to the official
311 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800312 https://developer.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800313 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500314 resp, body = self.get("servers/%s/metadata" % server_id)
315 body = json.loads(body)
316 self.validate_response(schema.list_server_metadata, resp, body)
317 return rest_client.ResponseBody(resp, body)
318
319 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800320 """Sets one or more metadata items for a server.
321
Dong Mad12c2332016-10-19 01:36:27 -0700322 For a full list of available parameters, please refer to the official
323 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800324 https://developer.openstack.org/api-ref/compute/#create-or-replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800325 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500326 if no_metadata_field:
327 post_body = ""
328 else:
329 post_body = json.dumps({'metadata': meta})
330 resp, body = self.put('servers/%s/metadata' % server_id,
331 post_body)
332 body = json.loads(body)
333 self.validate_response(schema.set_server_metadata, resp, body)
334 return rest_client.ResponseBody(resp, body)
335
336 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800337 """Updates one or more metadata items for a server.
338
Dong Mad12c2332016-10-19 01:36:27 -0700339 For a full list of available parameters, please refer to the official
340 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800341 https://developer.openstack.org/api-ref/compute/#update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800342 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500343 post_body = json.dumps({'metadata': meta})
344 resp, body = self.post('servers/%s/metadata' % server_id,
345 post_body)
346 body = json.loads(body)
347 self.validate_response(schema.update_server_metadata,
348 resp, body)
349 return rest_client.ResponseBody(resp, body)
350
351 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800352 """Shows details for a metadata item, by key, for a server.
353
Dong Mad12c2332016-10-19 01:36:27 -0700354 For a full list of available parameters, please refer to the official
355 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800356 https://developer.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800357 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500358 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
359 body = json.loads(body)
360 self.validate_response(schema.set_show_server_metadata_item,
361 resp, body)
362 return rest_client.ResponseBody(resp, body)
363
364 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800365 """Sets a metadata item, by key, for a server.
366
Dong Mad12c2332016-10-19 01:36:27 -0700367 For a full list of available parameters, please refer to the official
368 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800369 https://developer.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800370 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500371 post_body = json.dumps({'meta': meta})
372 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
373 post_body)
374 body = json.loads(body)
375 self.validate_response(schema.set_show_server_metadata_item,
376 resp, body)
377 return rest_client.ResponseBody(resp, body)
378
379 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800380 """Deletes a metadata item, by key, from a server.
381
Dong Mad12c2332016-10-19 01:36:27 -0700382 For a full list of available parameters, please refer to the official
383 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800384 https://developer.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800385 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500386 resp, body = self.delete("servers/%s/metadata/%s" %
387 (server_id, key))
388 self.validate_response(schema.delete_server_metadata_item,
389 resp, body)
390 return rest_client.ResponseBody(resp, body)
391
392 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800393 """Stops a running server and changes its status to SHUTOFF.
394
Dong Mad12c2332016-10-19 01:36:27 -0700395 For a full list of available parameters, please refer to the official
396 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800397 https://developer.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800398 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500399 return self.action(server_id, 'os-stop', **kwargs)
400
401 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800402 """Starts a stopped server and changes its status to ACTIVE.
403
Dong Mad12c2332016-10-19 01:36:27 -0700404 For a full list of available parameters, please refer to the official
405 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800406 https://developer.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800407 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500408 return self.action(server_id, 'os-start', **kwargs)
409
410 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800411 """Attaches a volume to a server instance.
412
Dong Mad12c2332016-10-19 01:36:27 -0700413 For a full list of available parameters, please refer to the official
414 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800415 https://developer.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800416 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500417 post_body = json.dumps({'volumeAttachment': kwargs})
418 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
419 post_body)
420 body = json.loads(body)
421 self.validate_response(schema.attach_volume, resp, body)
422 return rest_client.ResponseBody(resp, body)
423
424 def update_attached_volume(self, server_id, attachment_id, **kwargs):
425 """Swaps a volume attached to an instance for another volume"""
426 post_body = json.dumps({'volumeAttachment': kwargs})
427 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
428 (server_id, attachment_id),
429 post_body)
430 self.validate_response(schema.update_attached_volume, resp, body)
431 return rest_client.ResponseBody(resp, body)
432
433 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800434 """Detaches a volume from a server instance.
435
Dong Mad12c2332016-10-19 01:36:27 -0700436 For a full list of available parameters, please refer to the official
437 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800438 https://developer.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800439 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500440 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
441 (server_id, volume_id))
442 self.validate_response(schema.detach_volume, resp, body)
443 return rest_client.ResponseBody(resp, body)
444
445 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800446 """Return details about the given volume attachment.
447
Dong Mad12c2332016-10-19 01:36:27 -0700448 For a full list of available parameters, please refer to the official
449 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800450 https://developer.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800451 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500452 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
453 server_id, volume_id))
454 body = json.loads(body)
455 self.validate_response(schema.show_volume_attachment, resp, body)
456 return rest_client.ResponseBody(resp, body)
457
458 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800459 """Returns the list of volume attachments for a given instance.
460
Dong Mad12c2332016-10-19 01:36:27 -0700461 For a full list of available parameters, please refer to the official
462 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800463 https://developer.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800464 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500465 resp, body = self.get('servers/%s/os-volume_attachments' % (
466 server_id))
467 body = json.loads(body)
468 self.validate_response(schema.list_volume_attachments, resp, body)
469 return rest_client.ResponseBody(resp, body)
470
471 def add_security_group(self, server_id, **kwargs):
472 """Add a security group to the server.
473
Dong Mad12c2332016-10-19 01:36:27 -0700474 For a full list of available parameters, please refer to the official
475 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800476 https://developer.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500477 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500478 return self.action(server_id, 'addSecurityGroup', **kwargs)
479
480 def remove_security_group(self, server_id, **kwargs):
481 """Remove a security group from the server.
482
Dong Mad12c2332016-10-19 01:36:27 -0700483 For a full list of available parameters, please refer to the official
484 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800485 https://developer.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500486 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500487 return self.action(server_id, 'removeSecurityGroup', **kwargs)
488
489 def live_migrate_server(self, server_id, **kwargs):
490 """This should be called with administrator privileges.
491
Dong Mad12c2332016-10-19 01:36:27 -0700492 For a full list of available parameters, please refer to the official
493 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800494 https://developer.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500495 """
496 return self.action(server_id, 'os-migrateLive', **kwargs)
497
498 def migrate_server(self, server_id, **kwargs):
499 """Migrate a server to a new host.
500
Dong Mad12c2332016-10-19 01:36:27 -0700501 For a full list of available parameters, please refer to the official
502 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800503 https://developer.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500504 """
505 return self.action(server_id, 'migrate', **kwargs)
506
507 def lock_server(self, server_id, **kwargs):
508 """Lock the given server.
509
Dong Mad12c2332016-10-19 01:36:27 -0700510 For a full list of available parameters, please refer to the official
511 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800512 https://developer.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500513 """
514 return self.action(server_id, 'lock', **kwargs)
515
516 def unlock_server(self, server_id, **kwargs):
517 """UNlock the given server.
518
Dong Mad12c2332016-10-19 01:36:27 -0700519 For a full list of available parameters, please refer to the official
520 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800521 https://developer.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500522 """
523 return self.action(server_id, 'unlock', **kwargs)
524
525 def suspend_server(self, server_id, **kwargs):
526 """Suspend the provided server.
527
Dong Mad12c2332016-10-19 01:36:27 -0700528 For a full list of available parameters, please refer to the official
529 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800530 https://developer.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500531 """
532 return self.action(server_id, 'suspend', **kwargs)
533
534 def resume_server(self, server_id, **kwargs):
535 """Un-suspend the provided server.
536
Dong Mad12c2332016-10-19 01:36:27 -0700537 For a full list of available parameters, please refer to the official
538 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800539 https://developer.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500540 """
541 return self.action(server_id, 'resume', **kwargs)
542
543 def pause_server(self, server_id, **kwargs):
544 """Pause the provided server.
545
Dong Mad12c2332016-10-19 01:36:27 -0700546 For a full list of available parameters, please refer to the official
547 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800548 https://developer.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500549 """
550 return self.action(server_id, 'pause', **kwargs)
551
552 def unpause_server(self, server_id, **kwargs):
553 """Un-pause the provided server.
554
Dong Mad12c2332016-10-19 01:36:27 -0700555 For a full list of available parameters, please refer to the official
556 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800557 https://developer.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500558 """
559 return self.action(server_id, 'unpause', **kwargs)
560
561 def reset_state(self, server_id, **kwargs):
562 """Reset the state of a server to active/error.
563
Dong Mad12c2332016-10-19 01:36:27 -0700564 For a full list of available parameters, please refer to the official
565 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800566 https://developer.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500567 """
568 return self.action(server_id, 'os-resetState', **kwargs)
569
570 def shelve_server(self, server_id, **kwargs):
571 """Shelve the provided server.
572
Dong Mad12c2332016-10-19 01:36:27 -0700573 For a full list of available parameters, please refer to the official
574 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800575 https://developer.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500576 """
577 return self.action(server_id, 'shelve', **kwargs)
578
579 def unshelve_server(self, server_id, **kwargs):
580 """Un-shelve the provided server.
581
Dong Mad12c2332016-10-19 01:36:27 -0700582 For a full list of available parameters, please refer to the official
583 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800584 https://developer.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500585 """
586 return self.action(server_id, 'unshelve', **kwargs)
587
588 def shelve_offload_server(self, server_id, **kwargs):
589 """Shelve-offload the provided server.
590
Dong Mad12c2332016-10-19 01:36:27 -0700591 For a full list of available parameters, please refer to the official
592 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800593 https://developer.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500594 """
595 return self.action(server_id, 'shelveOffload', **kwargs)
596
597 def get_console_output(self, server_id, **kwargs):
598 """Get console output.
599
Dong Mad12c2332016-10-19 01:36:27 -0700600 For a full list of available parameters, please refer to the official
601 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800602 https://developer.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500603 """
604 return self.action(server_id, 'os-getConsoleOutput',
605 schema.get_console_output, **kwargs)
606
Markus Zoeller69d58b82017-02-17 10:09:22 +0100607 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
608 """Get a remote console.
609
610 For a full list of available parameters, please refer to the official
611 API reference:
612 TODO (markus_z) The api-ref for that isn't yet available, update this
613 here when the docs in Nova are updated. The old API is at
614 http://developer.openstack.org/api-ref/compute/#get-serial-console-os-getserialconsole-action
615 """
616 param = {
617 'remote_console': {
618 'type': console_type,
619 'protocol': protocol,
620 }
621 }
622 post_body = json.dumps(param)
623 resp, body = self.post("servers/%s/remote-consoles" % server_id,
624 post_body)
625 body = json.loads(body)
626 schema = self.get_schema(self.schema_versions_info)
627 self.validate_response(schema.get_remote_consoles, resp, body)
628 return rest_client.ResponseBody(resp, body)
629
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500630 def list_virtual_interfaces(self, server_id):
631 """List the virtual interfaces used in an instance."""
632 resp, body = self.get('/'.join(['servers', server_id,
633 'os-virtual-interfaces']))
634 body = json.loads(body)
635 self.validate_response(schema.list_virtual_interfaces, resp, body)
636 return rest_client.ResponseBody(resp, body)
637
638 def rescue_server(self, server_id, **kwargs):
639 """Rescue the provided server.
640
Dong Mad12c2332016-10-19 01:36:27 -0700641 For a full list of available parameters, please refer to the official
642 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800643 https://developer.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500644 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100645 if self.enable_instance_password:
646 rescue_schema = schema.rescue_server_with_admin_pass
647 else:
648 rescue_schema = schema.rescue_server
649 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500650
651 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800652 """Unrescue the provided server.
653
Dong Mad12c2332016-10-19 01:36:27 -0700654 For a full list of available parameters, please refer to the official
655 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800656 https://developer.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800657 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500658 return self.action(server_id, 'unrescue')
659
660 def show_server_diagnostics(self, server_id):
661 """Get the usage data for a server."""
662 resp, body = self.get("servers/%s/diagnostics" % server_id)
Sergey Nikitin0cb4f222017-02-03 13:16:33 +0400663 body = json.loads(body)
664 schema = self.get_schema(self.schema_versions_info)
665 self.validate_response(schema.show_server_diagnostics, resp, body)
666 return rest_client.ResponseBody(resp, body)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500667
668 def list_instance_actions(self, server_id):
669 """List the provided server action."""
670 resp, body = self.get("servers/%s/os-instance-actions" %
671 server_id)
672 body = json.loads(body)
673 self.validate_response(schema.list_instance_actions, resp, body)
674 return rest_client.ResponseBody(resp, body)
675
676 def show_instance_action(self, server_id, request_id):
677 """Returns the action details of the provided server."""
678 resp, body = self.get("servers/%s/os-instance-actions/%s" %
679 (server_id, request_id))
680 body = json.loads(body)
681 self.validate_response(schema.show_instance_action, resp, body)
682 return rest_client.ResponseBody(resp, body)
683
684 def force_delete_server(self, server_id, **kwargs):
685 """Force delete a server.
686
Dong Mad12c2332016-10-19 01:36:27 -0700687 For a full list of available parameters, please refer to the official
688 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800689 https://developer.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500690 """
691 return self.action(server_id, 'forceDelete', **kwargs)
692
693 def restore_soft_deleted_server(self, server_id, **kwargs):
694 """Restore a soft-deleted server.
695
Dong Mad12c2332016-10-19 01:36:27 -0700696 For a full list of available parameters, please refer to the official
697 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800698 https://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500699 """
700 return self.action(server_id, 'restore', **kwargs)
701
702 def reset_network(self, server_id, **kwargs):
703 """Reset the Network of a server.
704
Dong Mad12c2332016-10-19 01:36:27 -0700705 For a full list of available parameters, please refer to the official
706 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800707 https://developer.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500708 """
709 return self.action(server_id, 'resetNetwork', **kwargs)
710
711 def inject_network_info(self, server_id, **kwargs):
712 """Inject the Network Info into server.
713
Dong Mad12c2332016-10-19 01:36:27 -0700714 For a full list of available parameters, please refer to the official
715 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800716 https://developer.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500717 """
718 return self.action(server_id, 'injectNetworkInfo', **kwargs)
719
720 def get_vnc_console(self, server_id, **kwargs):
721 """Get URL of VNC console.
722
Dong Mad12c2332016-10-19 01:36:27 -0700723 For a full list of available parameters, please refer to the official
724 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800725 https://developer.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500726 """
727 return self.action(server_id, "os-getVNCConsole",
728 schema.get_vnc_console, **kwargs)
729
730 def add_fixed_ip(self, server_id, **kwargs):
731 """Add a fixed IP to server instance.
732
Dong Mad12c2332016-10-19 01:36:27 -0700733 For a full list of available parameters, please refer to the official
734 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800735 https://developer.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500736 """
737 return self.action(server_id, 'addFixedIp', **kwargs)
738
739 def remove_fixed_ip(self, server_id, **kwargs):
740 """Remove input fixed IP from input server instance.
741
Dong Mad12c2332016-10-19 01:36:27 -0700742 For a full list of available parameters, please refer to the official
743 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800744 https://developer.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500745 """
746 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800747
748 def list_security_groups_by_server(self, server_id):
749 """Lists security groups for a server.
750
751 For a full list of available parameters, please refer to the official
752 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800753 https://developer.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800754 """
755 resp, body = self.get("servers/%s/os-security-groups" % server_id)
756 body = json.loads(body)
757 self.validate_response(security_groups_schema.list_security_groups,
758 resp, body)
759 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500760
761 def list_tags(self, server_id):
762 """Lists all tags for a server.
763
764 For a full list of available parameters, please refer to the official
765 API reference:
766 https://developer.openstack.org/api-ref/compute/#list-tags
767 """
768 url = 'servers/%s/tags' % server_id
769 resp, body = self.get(url)
770 body = json.loads(body)
771 schema = self.get_schema(self.schema_versions_info)
772 self.validate_response(schema.list_tags, resp, body)
773 return rest_client.ResponseBody(resp, body)
774
775 def update_all_tags(self, server_id, tags):
776 """Replaces all tags on specified server with the new set of tags.
777
778 For a full list of available parameters, please refer to the official
779 API reference:
780 https://developer.openstack.org/api-ref/compute/#replace-tags
781
782 :param tags: List of tags to replace current server tags with.
783 """
784 url = 'servers/%s/tags' % server_id
785 put_body = {'tags': tags}
786 resp, body = self.put(url, json.dumps(put_body))
787 body = json.loads(body)
788 schema = self.get_schema(self.schema_versions_info)
789 self.validate_response(schema.update_all_tags, resp, body)
790 return rest_client.ResponseBody(resp, body)
791
792 def delete_all_tags(self, server_id):
793 """Deletes all tags from the specified server.
794
795 For a full list of available parameters, please refer to the official
796 API reference:
797 https://developer.openstack.org/api-ref/compute/#delete-all-tags
798 """
799 url = 'servers/%s/tags' % server_id
800 resp, body = self.delete(url)
801 schema = self.get_schema(self.schema_versions_info)
802 self.validate_response(schema.delete_all_tags, resp, body)
803 return rest_client.ResponseBody(resp, body)
804
805 def check_tag_existence(self, server_id, tag):
806 """Checks tag existence on the server.
807
808 For a full list of available parameters, please refer to the official
809 API reference:
810 https://developer.openstack.org/api-ref/compute/#check-tag-existence
811
812 :param tag: Check for existence of tag on specified server.
813 """
814 url = 'servers/%s/tags/%s' % (server_id, tag)
815 resp, body = self.get(url)
816 schema = self.get_schema(self.schema_versions_info)
817 self.validate_response(schema.check_tag_existence, resp, body)
818 return rest_client.ResponseBody(resp, body)
819
820 def update_tag(self, server_id, tag):
821 """Adds a single tag to the server if server has no specified tag.
822
823 For a full list of available parameters, please refer to the official
824 API reference:
825 https://developer.openstack.org/api-ref/compute/#add-a-single-tag
826
827 :param tag: Tag to be added to the specified server.
828 """
829 url = 'servers/%s/tags/%s' % (server_id, tag)
830 resp, body = self.put(url, None)
831 schema = self.get_schema(self.schema_versions_info)
832 self.validate_response(schema.update_tag, resp, body)
833 return rest_client.ResponseBody(resp, body)
834
835 def delete_tag(self, server_id, tag):
836 """Deletes a single tag from the specified server.
837
838 For a full list of available parameters, please refer to the official
839 API reference:
840 https://developer.openstack.org/api-ref/compute/#delete-a-single-tag
841
842 :param tag: Tag to be removed from the specified server.
843 """
844 url = 'servers/%s/tags/%s' % (server_id, tag)
845 resp, body = self.delete(url)
846 schema = self.get_schema(self.schema_versions_info)
847 self.validate_response(schema.delete_tag, resp, body)
848 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530849
850 def evacuate_server(self, server_id, **kwargs):
851 """Evacuate the given server.
852
853 For a full list of available parameters, please refer to the official
854 API reference:
855 https://developer.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
856 """
857 if self.enable_instance_password:
858 evacuate_schema = schema.evacuate_server_with_admin_pass
859 else:
860 evacuate_schema = schema.evacuate_server
861
862 return self.action(server_id, 'evacuate',
863 evacuate_schema,
864 **kwargs)