blob: 0d355a1d40ef3d77f5d476803f7da01165ccec96 [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
lanoux2746ba02016-03-16 17:41:01 +090030from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050031from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090032from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050033
34
Ghanshyamee9af302016-02-25 06:12:43 +090035class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080036 """Service client for the resource /servers"""
37
lanoux2746ba02016-03-16 17:41:01 +090038 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080039 {'min': None, 'max': '2.2', 'schema': schema},
40 {'min': '2.3', 'max': '2.8', 'schema': schemav23},
41 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
42 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040043 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
44 {'min': '2.26', 'max': None, 'schema': schemav226}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050045
46 def __init__(self, auth_provider, service, region,
47 enable_instance_password=True, **kwargs):
48 super(ServersClient, self).__init__(
49 auth_provider, service, region, **kwargs)
50 self.enable_instance_password = enable_instance_password
51
52 def create_server(self, **kwargs):
53 """Create server.
54
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070055 For a full list of available parameters, please refer to the official
56 API reference:
57 http://developer.openstack.org/api-ref/compute/#create-server
58
59 :param name: Server name
60 :param imageRef: Image reference (UUID)
61 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050062
63 Most parameters except the following are passed to the API without
64 any changes.
65 :param disk_config: The name is changed to OS-DCF:diskConfig
66 :param scheduler_hints: The name is changed to os:scheduler_hints and
67 the parameter is set in the same level as the parameter 'server'.
68 """
69 body = copy.deepcopy(kwargs)
70 if body.get('disk_config'):
71 body['OS-DCF:diskConfig'] = body.pop('disk_config')
72
73 hints = None
74 if body.get('scheduler_hints'):
75 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
76
77 post_body = {'server': body}
78
79 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +020080 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050081
82 post_body = json.dumps(post_body)
83 resp, body = self.post('servers', post_body)
84
85 body = json.loads(body)
86 # NOTE(maurosr): this deals with the case of multiple server create
87 # with return reservation id set True
88 if 'reservation_id' in body:
89 return rest_client.ResponseBody(resp, body)
90 if self.enable_instance_password:
91 create_schema = schema.create_server_with_admin_pass
92 else:
93 create_schema = schema.create_server
94 self.validate_response(create_schema, resp, body)
95 return rest_client.ResponseBody(resp, body)
96
97 def update_server(self, server_id, **kwargs):
98 """Update server.
99
Dong Mad12c2332016-10-19 01:36:27 -0700100 For a full list of available parameters, please refer to the official
101 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800102 https://developer.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500103
104 Most parameters except the following are passed to the API without
105 any changes.
106 :param disk_config: The name is changed to OS-DCF:diskConfig
107 """
ghanshyam910022e2016-12-21 13:32:57 +0900108 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500109 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
110
111 post_body = json.dumps({'server': kwargs})
112 resp, body = self.put("servers/%s" % server_id, post_body)
113 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900114 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500115 self.validate_response(schema.update_server, resp, body)
116 return rest_client.ResponseBody(resp, body)
117
118 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800119 """Get server details.
120
Dong Mad12c2332016-10-19 01:36:27 -0700121 For a full list of available parameters, please refer to the official
122 API reference:
123 http://developer.openstack.org/api-ref-compute-v2.1.html#showServer
Lv Fumei7e326332016-07-08 15:18:03 +0800124 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500125 resp, body = self.get("servers/%s" % server_id)
126 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900127 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500128 self.validate_response(schema.get_server, resp, body)
129 return rest_client.ResponseBody(resp, body)
130
131 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800132 """Delete server.
133
Dong Mad12c2332016-10-19 01:36:27 -0700134 For a full list of available parameters, please refer to the official
135 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800136 https://developer.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800137 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500138 resp, body = self.delete("servers/%s" % server_id)
139 self.validate_response(schema.delete_server, resp, body)
140 return rest_client.ResponseBody(resp, body)
141
142 def list_servers(self, detail=False, **params):
143 """List servers.
144
Dong Mad12c2332016-10-19 01:36:27 -0700145 For a full list of available parameters, please refer to the official
146 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800147 https://developer.openstack.org/api-ref/compute/#list-servers
148 https://developer.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500149 """
150
151 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900152 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500153 _schema = schema.list_servers
154
155 if detail:
156 url += '/detail'
157 _schema = schema.list_servers_detail
158 if params:
159 url += '?%s' % urllib.urlencode(params)
160
161 resp, body = self.get(url)
162 body = json.loads(body)
163 self.validate_response(_schema, resp, body)
164 return rest_client.ResponseBody(resp, body)
165
166 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800167 """Lists all addresses for a server.
168
Dong Mad12c2332016-10-19 01:36:27 -0700169 For a full list of available parameters, please refer to the official
170 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800171 https://developer.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800172 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500173 resp, body = self.get("servers/%s/ips" % server_id)
174 body = json.loads(body)
175 self.validate_response(schema.list_addresses, resp, body)
176 return rest_client.ResponseBody(resp, body)
177
178 def list_addresses_by_network(self, server_id, network_id):
179 """Lists all addresses of a specific network type for a server."""
180 resp, body = self.get("servers/%s/ips/%s" %
181 (server_id, network_id))
182 body = json.loads(body)
183 self.validate_response(schema.list_addresses_by_network, resp, body)
184 return rest_client.ResponseBody(resp, body)
185
186 def action(self, server_id, action_name,
187 schema=schema.server_actions_common_schema,
188 **kwargs):
189 post_body = json.dumps({action_name: kwargs})
190 resp, body = self.post('servers/%s/action' % server_id,
191 post_body)
192 if body:
193 body = json.loads(body)
194 self.validate_response(schema, resp, body)
195 return rest_client.ResponseBody(resp, body)
196
197 def create_backup(self, server_id, **kwargs):
198 """Backup a server instance.
199
Dong Mad12c2332016-10-19 01:36:27 -0700200 For a full list of available parameters, please refer to the official
201 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800202 https://developer.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500203 """
204 return self.action(server_id, "createBackup", **kwargs)
205
206 def change_password(self, server_id, **kwargs):
207 """Change the root password for the server.
208
Dong Mad12c2332016-10-19 01:36:27 -0700209 For a full list of available parameters, please refer to the official
210 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800211 https://developer.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500212 """
213 return self.action(server_id, 'changePassword', **kwargs)
214
215 def show_password(self, server_id):
216 resp, body = self.get("servers/%s/os-server-password" %
217 server_id)
218 body = json.loads(body)
219 self.validate_response(schema.show_password, resp, body)
220 return rest_client.ResponseBody(resp, body)
221
222 def delete_password(self, server_id):
223 """Removes the encrypted server password from the metadata server
224
225 Note that this does not actually change the instance server
226 password.
227 """
228 resp, body = self.delete("servers/%s/os-server-password" %
229 server_id)
230 self.validate_response(schema.server_actions_delete_password,
231 resp, body)
232 return rest_client.ResponseBody(resp, body)
233
234 def reboot_server(self, server_id, **kwargs):
235 """Reboot a server.
236
Dong Mad12c2332016-10-19 01:36:27 -0700237 For a full list of available parameters, please refer to the official
238 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800239 https://developer.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500240 """
241 return self.action(server_id, 'reboot', **kwargs)
242
243 def rebuild_server(self, server_id, image_ref, **kwargs):
244 """Rebuild a server with a new image.
245
Dong Mad12c2332016-10-19 01:36:27 -0700246 For a full list of available parameters, please refer to the official
247 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800248 https://developer.openstack.org/api-ref/compute/#rebuild-server-rebuild-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500249
250 Most parameters except the following are passed to the API without
251 any changes.
252 :param disk_config: The name is changed to OS-DCF:diskConfig
253 """
254 kwargs['imageRef'] = image_ref
255 if 'disk_config' in kwargs:
256 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900257 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500258 if self.enable_instance_password:
259 rebuild_schema = schema.rebuild_server_with_admin_pass
260 else:
261 rebuild_schema = schema.rebuild_server
262 return self.action(server_id, 'rebuild',
263 rebuild_schema, **kwargs)
264
265 def resize_server(self, server_id, flavor_ref, **kwargs):
266 """Change the flavor of a server.
267
Dong Mad12c2332016-10-19 01:36:27 -0700268 For a full list of available parameters, please refer to the official
269 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800270 https://developer.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500271
272 Most parameters except the following are passed to the API without
273 any changes.
274 :param disk_config: The name is changed to OS-DCF:diskConfig
275 """
276 kwargs['flavorRef'] = flavor_ref
277 if 'disk_config' in kwargs:
278 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
279 return self.action(server_id, 'resize', **kwargs)
280
281 def confirm_resize_server(self, server_id, **kwargs):
282 """Confirm the flavor change for a server.
283
Dong Mad12c2332016-10-19 01:36:27 -0700284 For a full list of available parameters, please refer to the official
285 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800286 https://developer.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500287 """
288 return self.action(server_id, 'confirmResize',
289 schema.server_actions_confirm_resize,
290 **kwargs)
291
292 def revert_resize_server(self, server_id, **kwargs):
293 """Revert a server back to its original flavor.
294
Dong Mad12c2332016-10-19 01:36:27 -0700295 For a full list of available parameters, please refer to the official
296 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800297 https://developer.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500298 """
299 return self.action(server_id, 'revertResize', **kwargs)
300
301 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800302 """Lists all metadata for a server.
303
Dong Mad12c2332016-10-19 01:36:27 -0700304 For a full list of available parameters, please refer to the official
305 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800306 https://developer.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800307 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500308 resp, body = self.get("servers/%s/metadata" % server_id)
309 body = json.loads(body)
310 self.validate_response(schema.list_server_metadata, resp, body)
311 return rest_client.ResponseBody(resp, body)
312
313 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800314 """Sets one or more metadata items for a server.
315
Dong Mad12c2332016-10-19 01:36:27 -0700316 For a full list of available parameters, please refer to the official
317 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800318 https://developer.openstack.org/api-ref/compute/#create-or-replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800319 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500320 if no_metadata_field:
321 post_body = ""
322 else:
323 post_body = json.dumps({'metadata': meta})
324 resp, body = self.put('servers/%s/metadata' % server_id,
325 post_body)
326 body = json.loads(body)
327 self.validate_response(schema.set_server_metadata, resp, body)
328 return rest_client.ResponseBody(resp, body)
329
330 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800331 """Updates one or more metadata items for a server.
332
Dong Mad12c2332016-10-19 01:36:27 -0700333 For a full list of available parameters, please refer to the official
334 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800335 https://developer.openstack.org/api-ref/compute/#update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800336 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500337 post_body = json.dumps({'metadata': meta})
338 resp, body = self.post('servers/%s/metadata' % server_id,
339 post_body)
340 body = json.loads(body)
341 self.validate_response(schema.update_server_metadata,
342 resp, body)
343 return rest_client.ResponseBody(resp, body)
344
345 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800346 """Shows details for a metadata item, by key, for a server.
347
Dong Mad12c2332016-10-19 01:36:27 -0700348 For a full list of available parameters, please refer to the official
349 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800350 https://developer.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800351 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500352 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
353 body = json.loads(body)
354 self.validate_response(schema.set_show_server_metadata_item,
355 resp, body)
356 return rest_client.ResponseBody(resp, body)
357
358 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800359 """Sets a metadata item, by key, for a server.
360
Dong Mad12c2332016-10-19 01:36:27 -0700361 For a full list of available parameters, please refer to the official
362 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800363 https://developer.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800364 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500365 post_body = json.dumps({'meta': meta})
366 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
367 post_body)
368 body = json.loads(body)
369 self.validate_response(schema.set_show_server_metadata_item,
370 resp, body)
371 return rest_client.ResponseBody(resp, body)
372
373 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800374 """Deletes a metadata item, by key, from a server.
375
Dong Mad12c2332016-10-19 01:36:27 -0700376 For a full list of available parameters, please refer to the official
377 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800378 https://developer.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800379 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500380 resp, body = self.delete("servers/%s/metadata/%s" %
381 (server_id, key))
382 self.validate_response(schema.delete_server_metadata_item,
383 resp, body)
384 return rest_client.ResponseBody(resp, body)
385
386 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800387 """Stops a running server and changes its status to SHUTOFF.
388
Dong Mad12c2332016-10-19 01:36:27 -0700389 For a full list of available parameters, please refer to the official
390 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800391 https://developer.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800392 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500393 return self.action(server_id, 'os-stop', **kwargs)
394
395 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800396 """Starts a stopped server and changes its status to ACTIVE.
397
Dong Mad12c2332016-10-19 01:36:27 -0700398 For a full list of available parameters, please refer to the official
399 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800400 https://developer.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800401 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500402 return self.action(server_id, 'os-start', **kwargs)
403
404 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800405 """Attaches a volume to a server instance.
406
Dong Mad12c2332016-10-19 01:36:27 -0700407 For a full list of available parameters, please refer to the official
408 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800409 https://developer.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800410 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500411 post_body = json.dumps({'volumeAttachment': kwargs})
412 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
413 post_body)
414 body = json.loads(body)
415 self.validate_response(schema.attach_volume, resp, body)
416 return rest_client.ResponseBody(resp, body)
417
418 def update_attached_volume(self, server_id, attachment_id, **kwargs):
419 """Swaps a volume attached to an instance for another volume"""
420 post_body = json.dumps({'volumeAttachment': kwargs})
421 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
422 (server_id, attachment_id),
423 post_body)
424 self.validate_response(schema.update_attached_volume, resp, body)
425 return rest_client.ResponseBody(resp, body)
426
427 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800428 """Detaches a volume from a server instance.
429
Dong Mad12c2332016-10-19 01:36:27 -0700430 For a full list of available parameters, please refer to the official
431 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800432 https://developer.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800433 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500434 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
435 (server_id, volume_id))
436 self.validate_response(schema.detach_volume, resp, body)
437 return rest_client.ResponseBody(resp, body)
438
439 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800440 """Return details about the given volume attachment.
441
Dong Mad12c2332016-10-19 01:36:27 -0700442 For a full list of available parameters, please refer to the official
443 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800444 https://developer.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800445 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500446 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
447 server_id, volume_id))
448 body = json.loads(body)
449 self.validate_response(schema.show_volume_attachment, resp, body)
450 return rest_client.ResponseBody(resp, body)
451
452 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800453 """Returns the list of volume attachments for a given instance.
454
Dong Mad12c2332016-10-19 01:36:27 -0700455 For a full list of available parameters, please refer to the official
456 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800457 https://developer.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800458 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500459 resp, body = self.get('servers/%s/os-volume_attachments' % (
460 server_id))
461 body = json.loads(body)
462 self.validate_response(schema.list_volume_attachments, resp, body)
463 return rest_client.ResponseBody(resp, body)
464
465 def add_security_group(self, server_id, **kwargs):
466 """Add a security group to the server.
467
Dong Mad12c2332016-10-19 01:36:27 -0700468 For a full list of available parameters, please refer to the official
469 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800470 https://developer.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500471 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500472 return self.action(server_id, 'addSecurityGroup', **kwargs)
473
474 def remove_security_group(self, server_id, **kwargs):
475 """Remove a security group from the server.
476
Dong Mad12c2332016-10-19 01:36:27 -0700477 For a full list of available parameters, please refer to the official
478 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800479 https://developer.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500480 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500481 return self.action(server_id, 'removeSecurityGroup', **kwargs)
482
483 def live_migrate_server(self, server_id, **kwargs):
484 """This should be called with administrator privileges.
485
Dong Mad12c2332016-10-19 01:36:27 -0700486 For a full list of available parameters, please refer to the official
487 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800488 https://developer.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500489 """
490 return self.action(server_id, 'os-migrateLive', **kwargs)
491
492 def migrate_server(self, server_id, **kwargs):
493 """Migrate a server to a new host.
494
Dong Mad12c2332016-10-19 01:36:27 -0700495 For a full list of available parameters, please refer to the official
496 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800497 https://developer.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500498 """
499 return self.action(server_id, 'migrate', **kwargs)
500
501 def lock_server(self, server_id, **kwargs):
502 """Lock the given server.
503
Dong Mad12c2332016-10-19 01:36:27 -0700504 For a full list of available parameters, please refer to the official
505 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800506 https://developer.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500507 """
508 return self.action(server_id, 'lock', **kwargs)
509
510 def unlock_server(self, server_id, **kwargs):
511 """UNlock the given server.
512
Dong Mad12c2332016-10-19 01:36:27 -0700513 For a full list of available parameters, please refer to the official
514 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800515 https://developer.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500516 """
517 return self.action(server_id, 'unlock', **kwargs)
518
519 def suspend_server(self, server_id, **kwargs):
520 """Suspend the provided server.
521
Dong Mad12c2332016-10-19 01:36:27 -0700522 For a full list of available parameters, please refer to the official
523 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800524 https://developer.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500525 """
526 return self.action(server_id, 'suspend', **kwargs)
527
528 def resume_server(self, server_id, **kwargs):
529 """Un-suspend the provided server.
530
Dong Mad12c2332016-10-19 01:36:27 -0700531 For a full list of available parameters, please refer to the official
532 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800533 https://developer.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500534 """
535 return self.action(server_id, 'resume', **kwargs)
536
537 def pause_server(self, server_id, **kwargs):
538 """Pause the provided server.
539
Dong Mad12c2332016-10-19 01:36:27 -0700540 For a full list of available parameters, please refer to the official
541 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800542 https://developer.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500543 """
544 return self.action(server_id, 'pause', **kwargs)
545
546 def unpause_server(self, server_id, **kwargs):
547 """Un-pause the provided server.
548
Dong Mad12c2332016-10-19 01:36:27 -0700549 For a full list of available parameters, please refer to the official
550 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800551 https://developer.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500552 """
553 return self.action(server_id, 'unpause', **kwargs)
554
555 def reset_state(self, server_id, **kwargs):
556 """Reset the state of a server to active/error.
557
Dong Mad12c2332016-10-19 01:36:27 -0700558 For a full list of available parameters, please refer to the official
559 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800560 https://developer.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500561 """
562 return self.action(server_id, 'os-resetState', **kwargs)
563
564 def shelve_server(self, server_id, **kwargs):
565 """Shelve the provided server.
566
Dong Mad12c2332016-10-19 01:36:27 -0700567 For a full list of available parameters, please refer to the official
568 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800569 https://developer.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500570 """
571 return self.action(server_id, 'shelve', **kwargs)
572
573 def unshelve_server(self, server_id, **kwargs):
574 """Un-shelve the provided server.
575
Dong Mad12c2332016-10-19 01:36:27 -0700576 For a full list of available parameters, please refer to the official
577 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800578 https://developer.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500579 """
580 return self.action(server_id, 'unshelve', **kwargs)
581
582 def shelve_offload_server(self, server_id, **kwargs):
583 """Shelve-offload the provided server.
584
Dong Mad12c2332016-10-19 01:36:27 -0700585 For a full list of available parameters, please refer to the official
586 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800587 https://developer.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500588 """
589 return self.action(server_id, 'shelveOffload', **kwargs)
590
591 def get_console_output(self, server_id, **kwargs):
592 """Get console output.
593
Dong Mad12c2332016-10-19 01:36:27 -0700594 For a full list of available parameters, please refer to the official
595 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800596 https://developer.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500597 """
598 return self.action(server_id, 'os-getConsoleOutput',
599 schema.get_console_output, **kwargs)
600
601 def list_virtual_interfaces(self, server_id):
602 """List the virtual interfaces used in an instance."""
603 resp, body = self.get('/'.join(['servers', server_id,
604 'os-virtual-interfaces']))
605 body = json.loads(body)
606 self.validate_response(schema.list_virtual_interfaces, resp, body)
607 return rest_client.ResponseBody(resp, body)
608
609 def rescue_server(self, server_id, **kwargs):
610 """Rescue the provided server.
611
Dong Mad12c2332016-10-19 01:36:27 -0700612 For a full list of available parameters, please refer to the official
613 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800614 https://developer.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500615 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100616 if self.enable_instance_password:
617 rescue_schema = schema.rescue_server_with_admin_pass
618 else:
619 rescue_schema = schema.rescue_server
620 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500621
622 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800623 """Unrescue the provided server.
624
Dong Mad12c2332016-10-19 01:36:27 -0700625 For a full list of available parameters, please refer to the official
626 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800627 https://developer.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800628 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500629 return self.action(server_id, 'unrescue')
630
631 def show_server_diagnostics(self, server_id):
632 """Get the usage data for a server."""
633 resp, body = self.get("servers/%s/diagnostics" % server_id)
634 return rest_client.ResponseBody(resp, json.loads(body))
635
636 def list_instance_actions(self, server_id):
637 """List the provided server action."""
638 resp, body = self.get("servers/%s/os-instance-actions" %
639 server_id)
640 body = json.loads(body)
641 self.validate_response(schema.list_instance_actions, resp, body)
642 return rest_client.ResponseBody(resp, body)
643
644 def show_instance_action(self, server_id, request_id):
645 """Returns the action details of the provided server."""
646 resp, body = self.get("servers/%s/os-instance-actions/%s" %
647 (server_id, request_id))
648 body = json.loads(body)
649 self.validate_response(schema.show_instance_action, resp, body)
650 return rest_client.ResponseBody(resp, body)
651
652 def force_delete_server(self, server_id, **kwargs):
653 """Force delete a server.
654
Dong Mad12c2332016-10-19 01:36:27 -0700655 For a full list of available parameters, please refer to the official
656 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800657 https://developer.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500658 """
659 return self.action(server_id, 'forceDelete', **kwargs)
660
661 def restore_soft_deleted_server(self, server_id, **kwargs):
662 """Restore a soft-deleted server.
663
Dong Mad12c2332016-10-19 01:36:27 -0700664 For a full list of available parameters, please refer to the official
665 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800666 https://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500667 """
668 return self.action(server_id, 'restore', **kwargs)
669
670 def reset_network(self, server_id, **kwargs):
671 """Reset the Network of a server.
672
Dong Mad12c2332016-10-19 01:36:27 -0700673 For a full list of available parameters, please refer to the official
674 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800675 https://developer.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500676 """
677 return self.action(server_id, 'resetNetwork', **kwargs)
678
679 def inject_network_info(self, server_id, **kwargs):
680 """Inject the Network Info into server.
681
Dong Mad12c2332016-10-19 01:36:27 -0700682 For a full list of available parameters, please refer to the official
683 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800684 https://developer.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500685 """
686 return self.action(server_id, 'injectNetworkInfo', **kwargs)
687
688 def get_vnc_console(self, server_id, **kwargs):
689 """Get URL of VNC console.
690
Dong Mad12c2332016-10-19 01:36:27 -0700691 For a full list of available parameters, please refer to the official
692 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800693 https://developer.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500694 """
695 return self.action(server_id, "os-getVNCConsole",
696 schema.get_vnc_console, **kwargs)
697
698 def add_fixed_ip(self, server_id, **kwargs):
699 """Add a fixed IP to server instance.
700
Dong Mad12c2332016-10-19 01:36:27 -0700701 For a full list of available parameters, please refer to the official
702 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800703 https://developer.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500704 """
705 return self.action(server_id, 'addFixedIp', **kwargs)
706
707 def remove_fixed_ip(self, server_id, **kwargs):
708 """Remove input fixed IP from input server instance.
709
Dong Mad12c2332016-10-19 01:36:27 -0700710 For a full list of available parameters, please refer to the official
711 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800712 https://developer.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500713 """
714 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800715
716 def list_security_groups_by_server(self, server_id):
717 """Lists security groups for a server.
718
719 For a full list of available parameters, please refer to the official
720 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800721 https://developer.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800722 """
723 resp, body = self.get("servers/%s/os-security-groups" % server_id)
724 body = json.loads(body)
725 self.validate_response(security_groups_schema.list_security_groups,
726 resp, body)
727 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500728
729 def list_tags(self, server_id):
730 """Lists all tags for a server.
731
732 For a full list of available parameters, please refer to the official
733 API reference:
734 https://developer.openstack.org/api-ref/compute/#list-tags
735 """
736 url = 'servers/%s/tags' % server_id
737 resp, body = self.get(url)
738 body = json.loads(body)
739 schema = self.get_schema(self.schema_versions_info)
740 self.validate_response(schema.list_tags, resp, body)
741 return rest_client.ResponseBody(resp, body)
742
743 def update_all_tags(self, server_id, tags):
744 """Replaces all tags on specified server with the new set of tags.
745
746 For a full list of available parameters, please refer to the official
747 API reference:
748 https://developer.openstack.org/api-ref/compute/#replace-tags
749
750 :param tags: List of tags to replace current server tags with.
751 """
752 url = 'servers/%s/tags' % server_id
753 put_body = {'tags': tags}
754 resp, body = self.put(url, json.dumps(put_body))
755 body = json.loads(body)
756 schema = self.get_schema(self.schema_versions_info)
757 self.validate_response(schema.update_all_tags, resp, body)
758 return rest_client.ResponseBody(resp, body)
759
760 def delete_all_tags(self, server_id):
761 """Deletes all tags from the specified server.
762
763 For a full list of available parameters, please refer to the official
764 API reference:
765 https://developer.openstack.org/api-ref/compute/#delete-all-tags
766 """
767 url = 'servers/%s/tags' % server_id
768 resp, body = self.delete(url)
769 schema = self.get_schema(self.schema_versions_info)
770 self.validate_response(schema.delete_all_tags, resp, body)
771 return rest_client.ResponseBody(resp, body)
772
773 def check_tag_existence(self, server_id, tag):
774 """Checks tag existence on the server.
775
776 For a full list of available parameters, please refer to the official
777 API reference:
778 https://developer.openstack.org/api-ref/compute/#check-tag-existence
779
780 :param tag: Check for existence of tag on specified server.
781 """
782 url = 'servers/%s/tags/%s' % (server_id, tag)
783 resp, body = self.get(url)
784 schema = self.get_schema(self.schema_versions_info)
785 self.validate_response(schema.check_tag_existence, resp, body)
786 return rest_client.ResponseBody(resp, body)
787
788 def update_tag(self, server_id, tag):
789 """Adds a single tag to the server if server has no specified tag.
790
791 For a full list of available parameters, please refer to the official
792 API reference:
793 https://developer.openstack.org/api-ref/compute/#add-a-single-tag
794
795 :param tag: Tag to be added to the specified server.
796 """
797 url = 'servers/%s/tags/%s' % (server_id, tag)
798 resp, body = self.put(url, None)
799 schema = self.get_schema(self.schema_versions_info)
800 self.validate_response(schema.update_tag, resp, body)
801 return rest_client.ResponseBody(resp, body)
802
803 def delete_tag(self, server_id, tag):
804 """Deletes a single tag from the specified server.
805
806 For a full list of available parameters, please refer to the official
807 API reference:
808 https://developer.openstack.org/api-ref/compute/#delete-a-single-tag
809
810 :param tag: Tag to be removed from the specified server.
811 """
812 url = 'servers/%s/tags/%s' % (server_id, tag)
813 resp, body = self.delete(url)
814 schema = self.get_schema(self.schema_versions_info)
815 self.validate_response(schema.delete_tag, resp, body)
816 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530817
818 def evacuate_server(self, server_id, **kwargs):
819 """Evacuate the given server.
820
821 For a full list of available parameters, please refer to the official
822 API reference:
823 https://developer.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
824 """
825 if self.enable_instance_password:
826 evacuate_schema = schema.evacuate_server_with_admin_pass
827 else:
828 evacuate_schema = schema.evacuate_server
829
830 return self.action(server_id, 'evacuate',
831 evacuate_schema,
832 **kwargs)