blob: 9eed4b347f0af4b568721c20b4825b185515db5b [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
ghanshyam85a4b0a2018-04-24 11:09:25 +030032from tempest.lib.api_schema.response.compute.v2_54 import servers as schemav254
Ghanshyamd5394652018-04-26 07:59:32 +000033from tempest.lib.api_schema.response.compute.v2_57 import servers as schemav257
Markus Zoeller69d58b82017-02-17 10:09:22 +010034from tempest.lib.api_schema.response.compute.v2_6 import servers as schemav26
Jackie Truong1fa44642017-10-25 16:42:08 -040035from tempest.lib.api_schema.response.compute.v2_63 import servers as schemav263
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040036from tempest.lib.api_schema.response.compute.v2_8 import servers as schemav28
lanoux2746ba02016-03-16 17:41:01 +090037from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050038from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090039from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050040
41
Ghanshyamee9af302016-02-25 06:12:43 +090042class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080043 """Service client for the resource /servers"""
44
lanoux2746ba02016-03-16 17:41:01 +090045 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080046 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010047 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040048 {'min': '2.6', 'max': '2.7', 'schema': schemav26},
49 {'min': '2.8', 'max': '2.8', 'schema': schemav28},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080050 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
51 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040052 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
Sergey Nikitin8654e5b2017-06-04 22:09:56 +040053 {'min': '2.26', 'max': '2.46', 'schema': schemav226},
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040054 {'min': '2.47', 'max': '2.47', 'schema': schemav247},
ghanshyam85a4b0a2018-04-24 11:09:25 +030055 {'min': '2.48', 'max': '2.53', 'schema': schemav248},
Ghanshyamd5394652018-04-26 07:59:32 +000056 {'min': '2.54', 'max': '2.56', 'schema': schemav254},
Jackie Truong1fa44642017-10-25 16:42:08 -040057 {'min': '2.57', 'max': '2.62', 'schema': schemav257},
58 {'min': '2.63', 'max': None, 'schema': schemav263}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050059
60 def __init__(self, auth_provider, service, region,
61 enable_instance_password=True, **kwargs):
62 super(ServersClient, self).__init__(
63 auth_provider, service, region, **kwargs)
64 self.enable_instance_password = enable_instance_password
65
66 def create_server(self, **kwargs):
67 """Create server.
68
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070069 For a full list of available parameters, please refer to the official
70 API reference:
71 http://developer.openstack.org/api-ref/compute/#create-server
72
73 :param name: Server name
74 :param imageRef: Image reference (UUID)
75 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050076
77 Most parameters except the following are passed to the API without
78 any changes.
79 :param disk_config: The name is changed to OS-DCF:diskConfig
80 :param scheduler_hints: The name is changed to os:scheduler_hints and
81 the parameter is set in the same level as the parameter 'server'.
82 """
83 body = copy.deepcopy(kwargs)
84 if body.get('disk_config'):
85 body['OS-DCF:diskConfig'] = body.pop('disk_config')
86
87 hints = None
88 if body.get('scheduler_hints'):
89 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
90
91 post_body = {'server': body}
92
93 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +020094 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050095
96 post_body = json.dumps(post_body)
97 resp, body = self.post('servers', post_body)
98
99 body = json.loads(body)
100 # NOTE(maurosr): this deals with the case of multiple server create
101 # with return reservation id set True
102 if 'reservation_id' in body:
103 return rest_client.ResponseBody(resp, body)
104 if self.enable_instance_password:
105 create_schema = schema.create_server_with_admin_pass
106 else:
107 create_schema = schema.create_server
108 self.validate_response(create_schema, resp, body)
109 return rest_client.ResponseBody(resp, body)
110
111 def update_server(self, server_id, **kwargs):
112 """Update server.
113
Dong Mad12c2332016-10-19 01:36:27 -0700114 For a full list of available parameters, please refer to the official
115 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800116 https://developer.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500117
118 Most parameters except the following are passed to the API without
119 any changes.
120 :param disk_config: The name is changed to OS-DCF:diskConfig
121 """
ghanshyam910022e2016-12-21 13:32:57 +0900122 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500123 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
124
125 post_body = json.dumps({'server': kwargs})
126 resp, body = self.put("servers/%s" % server_id, post_body)
127 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900128 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500129 self.validate_response(schema.update_server, resp, body)
130 return rest_client.ResponseBody(resp, body)
131
132 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800133 """Get server details.
134
Dong Mad12c2332016-10-19 01:36:27 -0700135 For a full list of available parameters, please refer to the official
136 API reference:
zhufl94337052018-01-22 17:10:29 +0800137 https://developer.openstack.org/api-ref/compute/#show-server-details
Lv Fumei7e326332016-07-08 15:18:03 +0800138 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500139 resp, body = self.get("servers/%s" % server_id)
140 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900141 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500142 self.validate_response(schema.get_server, resp, body)
143 return rest_client.ResponseBody(resp, body)
144
145 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800146 """Delete server.
147
Dong Mad12c2332016-10-19 01:36:27 -0700148 For a full list of available parameters, please refer to the official
149 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800150 https://developer.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800151 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500152 resp, body = self.delete("servers/%s" % server_id)
153 self.validate_response(schema.delete_server, resp, body)
154 return rest_client.ResponseBody(resp, body)
155
156 def list_servers(self, detail=False, **params):
157 """List servers.
158
Dong Mad12c2332016-10-19 01:36:27 -0700159 For a full list of available parameters, please refer to the official
160 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800161 https://developer.openstack.org/api-ref/compute/#list-servers
162 https://developer.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500163 """
164
165 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900166 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500167 if detail:
168 url += '/detail'
169 _schema = schema.list_servers_detail
ghanshyama8ace722018-04-20 08:45:10 +0000170 else:
171 _schema = schema.list_servers
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500172 if params:
173 url += '?%s' % urllib.urlencode(params)
174
175 resp, body = self.get(url)
176 body = json.loads(body)
177 self.validate_response(_schema, resp, body)
178 return rest_client.ResponseBody(resp, body)
179
180 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800181 """Lists all addresses for a server.
182
Dong Mad12c2332016-10-19 01:36:27 -0700183 For a full list of available parameters, please refer to the official
184 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800185 https://developer.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800186 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500187 resp, body = self.get("servers/%s/ips" % server_id)
188 body = json.loads(body)
189 self.validate_response(schema.list_addresses, resp, body)
190 return rest_client.ResponseBody(resp, body)
191
192 def list_addresses_by_network(self, server_id, network_id):
193 """Lists all addresses of a specific network type for a server."""
194 resp, body = self.get("servers/%s/ips/%s" %
195 (server_id, network_id))
196 body = json.loads(body)
197 self.validate_response(schema.list_addresses_by_network, resp, body)
198 return rest_client.ResponseBody(resp, body)
199
200 def action(self, server_id, action_name,
201 schema=schema.server_actions_common_schema,
202 **kwargs):
203 post_body = json.dumps({action_name: kwargs})
204 resp, body = self.post('servers/%s/action' % server_id,
205 post_body)
206 if body:
207 body = json.loads(body)
208 self.validate_response(schema, resp, body)
209 return rest_client.ResponseBody(resp, body)
210
211 def create_backup(self, server_id, **kwargs):
212 """Backup a server instance.
213
Dong Mad12c2332016-10-19 01:36:27 -0700214 For a full list of available parameters, please refer to the official
215 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800216 https://developer.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500217 """
218 return self.action(server_id, "createBackup", **kwargs)
219
220 def change_password(self, server_id, **kwargs):
221 """Change the root password for the server.
222
Dong Mad12c2332016-10-19 01:36:27 -0700223 For a full list of available parameters, please refer to the official
224 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800225 https://developer.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500226 """
227 return self.action(server_id, 'changePassword', **kwargs)
228
229 def show_password(self, server_id):
230 resp, body = self.get("servers/%s/os-server-password" %
231 server_id)
232 body = json.loads(body)
233 self.validate_response(schema.show_password, resp, body)
234 return rest_client.ResponseBody(resp, body)
235
236 def delete_password(self, server_id):
237 """Removes the encrypted server password from the metadata server
238
239 Note that this does not actually change the instance server
240 password.
241 """
242 resp, body = self.delete("servers/%s/os-server-password" %
243 server_id)
244 self.validate_response(schema.server_actions_delete_password,
245 resp, body)
246 return rest_client.ResponseBody(resp, body)
247
248 def reboot_server(self, server_id, **kwargs):
249 """Reboot a server.
250
Dong Mad12c2332016-10-19 01:36:27 -0700251 For a full list of available parameters, please refer to the official
252 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800253 https://developer.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500254 """
255 return self.action(server_id, 'reboot', **kwargs)
256
257 def rebuild_server(self, server_id, image_ref, **kwargs):
258 """Rebuild a server with a new image.
259
Dong Mad12c2332016-10-19 01:36:27 -0700260 For a full list of available parameters, please refer to the official
261 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800262 https://developer.openstack.org/api-ref/compute/#rebuild-server-rebuild-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500263
264 Most parameters except the following are passed to the API without
265 any changes.
266 :param disk_config: The name is changed to OS-DCF:diskConfig
267 """
268 kwargs['imageRef'] = image_ref
269 if 'disk_config' in kwargs:
270 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900271 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500272 if self.enable_instance_password:
273 rebuild_schema = schema.rebuild_server_with_admin_pass
274 else:
275 rebuild_schema = schema.rebuild_server
276 return self.action(server_id, 'rebuild',
277 rebuild_schema, **kwargs)
278
279 def resize_server(self, server_id, flavor_ref, **kwargs):
280 """Change the flavor of a server.
281
Dong Mad12c2332016-10-19 01:36:27 -0700282 For a full list of available parameters, please refer to the official
283 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800284 https://developer.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500285
286 Most parameters except the following are passed to the API without
287 any changes.
288 :param disk_config: The name is changed to OS-DCF:diskConfig
289 """
290 kwargs['flavorRef'] = flavor_ref
291 if 'disk_config' in kwargs:
292 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
293 return self.action(server_id, 'resize', **kwargs)
294
295 def confirm_resize_server(self, server_id, **kwargs):
296 """Confirm the flavor change for a server.
297
Dong Mad12c2332016-10-19 01:36:27 -0700298 For a full list of available parameters, please refer to the official
299 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800300 https://developer.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500301 """
302 return self.action(server_id, 'confirmResize',
303 schema.server_actions_confirm_resize,
304 **kwargs)
305
306 def revert_resize_server(self, server_id, **kwargs):
307 """Revert a server back to its original flavor.
308
Dong Mad12c2332016-10-19 01:36:27 -0700309 For a full list of available parameters, please refer to the official
310 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800311 https://developer.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500312 """
313 return self.action(server_id, 'revertResize', **kwargs)
314
315 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800316 """Lists all metadata 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/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800321 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500322 resp, body = self.get("servers/%s/metadata" % server_id)
323 body = json.loads(body)
324 self.validate_response(schema.list_server_metadata, resp, body)
325 return rest_client.ResponseBody(resp, body)
326
327 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800328 """Sets one or more metadata items for a server.
329
Dong Mad12c2332016-10-19 01:36:27 -0700330 For a full list of available parameters, please refer to the official
331 API reference:
zhufl94337052018-01-22 17:10:29 +0800332 https://developer.openstack.org/api-ref/compute/#replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800333 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500334 if no_metadata_field:
335 post_body = ""
336 else:
337 post_body = json.dumps({'metadata': meta})
338 resp, body = self.put('servers/%s/metadata' % server_id,
339 post_body)
340 body = json.loads(body)
341 self.validate_response(schema.set_server_metadata, resp, body)
342 return rest_client.ResponseBody(resp, body)
343
344 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800345 """Updates one or more metadata items for a server.
346
Dong Mad12c2332016-10-19 01:36:27 -0700347 For a full list of available parameters, please refer to the official
348 API reference:
zhufl94337052018-01-22 17:10:29 +0800349 https://developer.openstack.org/api-ref/compute/#create-or-update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800350 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500351 post_body = json.dumps({'metadata': meta})
352 resp, body = self.post('servers/%s/metadata' % server_id,
353 post_body)
354 body = json.loads(body)
355 self.validate_response(schema.update_server_metadata,
356 resp, body)
357 return rest_client.ResponseBody(resp, body)
358
359 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800360 """Shows details for a metadata item, by key, for a server.
361
Dong Mad12c2332016-10-19 01:36:27 -0700362 For a full list of available parameters, please refer to the official
363 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800364 https://developer.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800365 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500366 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
367 body = json.loads(body)
368 self.validate_response(schema.set_show_server_metadata_item,
369 resp, body)
370 return rest_client.ResponseBody(resp, body)
371
372 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800373 """Sets a metadata item, by key, for a server.
374
Dong Mad12c2332016-10-19 01:36:27 -0700375 For a full list of available parameters, please refer to the official
376 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800377 https://developer.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800378 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500379 post_body = json.dumps({'meta': meta})
380 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
381 post_body)
382 body = json.loads(body)
383 self.validate_response(schema.set_show_server_metadata_item,
384 resp, body)
385 return rest_client.ResponseBody(resp, body)
386
387 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800388 """Deletes a metadata item, by key, from a server.
389
Dong Mad12c2332016-10-19 01:36:27 -0700390 For a full list of available parameters, please refer to the official
391 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800392 https://developer.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800393 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500394 resp, body = self.delete("servers/%s/metadata/%s" %
395 (server_id, key))
396 self.validate_response(schema.delete_server_metadata_item,
397 resp, body)
398 return rest_client.ResponseBody(resp, body)
399
400 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800401 """Stops a running server and changes its status to SHUTOFF.
402
Dong Mad12c2332016-10-19 01:36:27 -0700403 For a full list of available parameters, please refer to the official
404 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800405 https://developer.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800406 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500407 return self.action(server_id, 'os-stop', **kwargs)
408
409 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800410 """Starts a stopped server and changes its status to ACTIVE.
411
Dong Mad12c2332016-10-19 01:36:27 -0700412 For a full list of available parameters, please refer to the official
413 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800414 https://developer.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800415 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500416 return self.action(server_id, 'os-start', **kwargs)
417
418 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800419 """Attaches a volume to a server instance.
420
Dong Mad12c2332016-10-19 01:36:27 -0700421 For a full list of available parameters, please refer to the official
422 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800423 https://developer.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800424 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500425 post_body = json.dumps({'volumeAttachment': kwargs})
426 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
427 post_body)
428 body = json.loads(body)
429 self.validate_response(schema.attach_volume, resp, body)
430 return rest_client.ResponseBody(resp, body)
431
432 def update_attached_volume(self, server_id, attachment_id, **kwargs):
433 """Swaps a volume attached to an instance for another volume"""
434 post_body = json.dumps({'volumeAttachment': kwargs})
435 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
436 (server_id, attachment_id),
437 post_body)
438 self.validate_response(schema.update_attached_volume, resp, body)
439 return rest_client.ResponseBody(resp, body)
440
441 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800442 """Detaches a volume from a server instance.
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/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800447 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500448 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
449 (server_id, volume_id))
450 self.validate_response(schema.detach_volume, resp, body)
451 return rest_client.ResponseBody(resp, body)
452
453 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800454 """Return details about the given volume attachment.
455
Dong Mad12c2332016-10-19 01:36:27 -0700456 For a full list of available parameters, please refer to the official
457 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800458 https://developer.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800459 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500460 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
461 server_id, volume_id))
462 body = json.loads(body)
463 self.validate_response(schema.show_volume_attachment, resp, body)
464 return rest_client.ResponseBody(resp, body)
465
466 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800467 """Returns the list of volume attachments for a given instance.
468
Dong Mad12c2332016-10-19 01:36:27 -0700469 For a full list of available parameters, please refer to the official
470 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800471 https://developer.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800472 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500473 resp, body = self.get('servers/%s/os-volume_attachments' % (
474 server_id))
475 body = json.loads(body)
476 self.validate_response(schema.list_volume_attachments, resp, body)
477 return rest_client.ResponseBody(resp, body)
478
479 def add_security_group(self, server_id, **kwargs):
480 """Add a security group to the server.
481
Dong Mad12c2332016-10-19 01:36:27 -0700482 For a full list of available parameters, please refer to the official
483 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800484 https://developer.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500485 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500486 return self.action(server_id, 'addSecurityGroup', **kwargs)
487
488 def remove_security_group(self, server_id, **kwargs):
489 """Remove a security group from the server.
490
Dong Mad12c2332016-10-19 01:36:27 -0700491 For a full list of available parameters, please refer to the official
492 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800493 https://developer.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500494 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500495 return self.action(server_id, 'removeSecurityGroup', **kwargs)
496
497 def live_migrate_server(self, server_id, **kwargs):
498 """This should be called with administrator privileges.
499
Dong Mad12c2332016-10-19 01:36:27 -0700500 For a full list of available parameters, please refer to the official
501 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800502 https://developer.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500503 """
504 return self.action(server_id, 'os-migrateLive', **kwargs)
505
506 def migrate_server(self, server_id, **kwargs):
507 """Migrate a server to a new host.
508
Dong Mad12c2332016-10-19 01:36:27 -0700509 For a full list of available parameters, please refer to the official
510 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800511 https://developer.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500512 """
513 return self.action(server_id, 'migrate', **kwargs)
514
515 def lock_server(self, server_id, **kwargs):
516 """Lock the given server.
517
Dong Mad12c2332016-10-19 01:36:27 -0700518 For a full list of available parameters, please refer to the official
519 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800520 https://developer.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500521 """
522 return self.action(server_id, 'lock', **kwargs)
523
524 def unlock_server(self, server_id, **kwargs):
525 """UNlock the given server.
526
Dong Mad12c2332016-10-19 01:36:27 -0700527 For a full list of available parameters, please refer to the official
528 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800529 https://developer.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500530 """
531 return self.action(server_id, 'unlock', **kwargs)
532
533 def suspend_server(self, server_id, **kwargs):
534 """Suspend the provided server.
535
Dong Mad12c2332016-10-19 01:36:27 -0700536 For a full list of available parameters, please refer to the official
537 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800538 https://developer.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500539 """
540 return self.action(server_id, 'suspend', **kwargs)
541
542 def resume_server(self, server_id, **kwargs):
543 """Un-suspend the provided server.
544
Dong Mad12c2332016-10-19 01:36:27 -0700545 For a full list of available parameters, please refer to the official
546 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800547 https://developer.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500548 """
549 return self.action(server_id, 'resume', **kwargs)
550
551 def pause_server(self, server_id, **kwargs):
552 """Pause the provided server.
553
Dong Mad12c2332016-10-19 01:36:27 -0700554 For a full list of available parameters, please refer to the official
555 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800556 https://developer.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500557 """
558 return self.action(server_id, 'pause', **kwargs)
559
560 def unpause_server(self, server_id, **kwargs):
561 """Un-pause the provided server.
562
Dong Mad12c2332016-10-19 01:36:27 -0700563 For a full list of available parameters, please refer to the official
564 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800565 https://developer.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500566 """
567 return self.action(server_id, 'unpause', **kwargs)
568
569 def reset_state(self, server_id, **kwargs):
570 """Reset the state of a server to active/error.
571
Dong Mad12c2332016-10-19 01:36:27 -0700572 For a full list of available parameters, please refer to the official
573 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800574 https://developer.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500575 """
576 return self.action(server_id, 'os-resetState', **kwargs)
577
578 def shelve_server(self, server_id, **kwargs):
579 """Shelve the provided server.
580
Dong Mad12c2332016-10-19 01:36:27 -0700581 For a full list of available parameters, please refer to the official
582 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800583 https://developer.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500584 """
585 return self.action(server_id, 'shelve', **kwargs)
586
587 def unshelve_server(self, server_id, **kwargs):
588 """Un-shelve the provided server.
589
Dong Mad12c2332016-10-19 01:36:27 -0700590 For a full list of available parameters, please refer to the official
591 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800592 https://developer.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500593 """
594 return self.action(server_id, 'unshelve', **kwargs)
595
596 def shelve_offload_server(self, server_id, **kwargs):
597 """Shelve-offload the provided server.
598
Dong Mad12c2332016-10-19 01:36:27 -0700599 For a full list of available parameters, please refer to the official
600 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800601 https://developer.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500602 """
603 return self.action(server_id, 'shelveOffload', **kwargs)
604
605 def get_console_output(self, server_id, **kwargs):
606 """Get console output.
607
Dong Mad12c2332016-10-19 01:36:27 -0700608 For a full list of available parameters, please refer to the official
609 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800610 https://developer.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500611 """
612 return self.action(server_id, 'os-getConsoleOutput',
613 schema.get_console_output, **kwargs)
614
Markus Zoeller69d58b82017-02-17 10:09:22 +0100615 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
616 """Get a remote console.
617
618 For a full list of available parameters, please refer to the official
619 API reference:
zhufl94337052018-01-22 17:10:29 +0800620 https://developer.openstack.org/api-ref/compute/#create-remote-console
Markus Zoeller69d58b82017-02-17 10:09:22 +0100621 """
622 param = {
623 'remote_console': {
624 'type': console_type,
625 'protocol': protocol,
626 }
627 }
628 post_body = json.dumps(param)
629 resp, body = self.post("servers/%s/remote-consoles" % server_id,
630 post_body)
631 body = json.loads(body)
632 schema = self.get_schema(self.schema_versions_info)
633 self.validate_response(schema.get_remote_consoles, resp, body)
634 return rest_client.ResponseBody(resp, body)
635
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500636 def list_virtual_interfaces(self, server_id):
637 """List the virtual interfaces used in an instance."""
638 resp, body = self.get('/'.join(['servers', server_id,
639 'os-virtual-interfaces']))
640 body = json.loads(body)
641 self.validate_response(schema.list_virtual_interfaces, resp, body)
642 return rest_client.ResponseBody(resp, body)
643
644 def rescue_server(self, server_id, **kwargs):
645 """Rescue the provided server.
646
Dong Mad12c2332016-10-19 01:36:27 -0700647 For a full list of available parameters, please refer to the official
648 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800649 https://developer.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500650 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100651 if self.enable_instance_password:
652 rescue_schema = schema.rescue_server_with_admin_pass
653 else:
654 rescue_schema = schema.rescue_server
655 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500656
657 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800658 """Unrescue the provided server.
659
Dong Mad12c2332016-10-19 01:36:27 -0700660 For a full list of available parameters, please refer to the official
661 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800662 https://developer.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800663 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500664 return self.action(server_id, 'unrescue')
665
666 def show_server_diagnostics(self, server_id):
667 """Get the usage data for a server."""
668 resp, body = self.get("servers/%s/diagnostics" % server_id)
Sergey Nikitin0cb4f222017-02-03 13:16:33 +0400669 body = json.loads(body)
670 schema = self.get_schema(self.schema_versions_info)
671 self.validate_response(schema.show_server_diagnostics, resp, body)
672 return rest_client.ResponseBody(resp, body)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500673
674 def list_instance_actions(self, server_id):
675 """List the provided server action."""
676 resp, body = self.get("servers/%s/os-instance-actions" %
677 server_id)
678 body = json.loads(body)
679 self.validate_response(schema.list_instance_actions, resp, body)
680 return rest_client.ResponseBody(resp, body)
681
682 def show_instance_action(self, server_id, request_id):
683 """Returns the action details of the provided server."""
684 resp, body = self.get("servers/%s/os-instance-actions/%s" %
685 (server_id, request_id))
686 body = json.loads(body)
687 self.validate_response(schema.show_instance_action, resp, body)
688 return rest_client.ResponseBody(resp, body)
689
690 def force_delete_server(self, server_id, **kwargs):
691 """Force delete a server.
692
Dong Mad12c2332016-10-19 01:36:27 -0700693 For a full list of available parameters, please refer to the official
694 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800695 https://developer.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500696 """
697 return self.action(server_id, 'forceDelete', **kwargs)
698
699 def restore_soft_deleted_server(self, server_id, **kwargs):
700 """Restore a soft-deleted server.
701
Dong Mad12c2332016-10-19 01:36:27 -0700702 For a full list of available parameters, please refer to the official
703 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800704 https://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500705 """
706 return self.action(server_id, 'restore', **kwargs)
707
708 def reset_network(self, server_id, **kwargs):
709 """Reset the Network of a server.
710
Dong Mad12c2332016-10-19 01:36:27 -0700711 For a full list of available parameters, please refer to the official
712 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800713 https://developer.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500714 """
715 return self.action(server_id, 'resetNetwork', **kwargs)
716
717 def inject_network_info(self, server_id, **kwargs):
718 """Inject the Network Info into server.
719
Dong Mad12c2332016-10-19 01:36:27 -0700720 For a full list of available parameters, please refer to the official
721 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800722 https://developer.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500723 """
724 return self.action(server_id, 'injectNetworkInfo', **kwargs)
725
726 def get_vnc_console(self, server_id, **kwargs):
727 """Get URL of VNC console.
728
Dong Mad12c2332016-10-19 01:36:27 -0700729 For a full list of available parameters, please refer to the official
730 API reference:
zhufl94337052018-01-22 17:10:29 +0800731 https://developer.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500732 """
733 return self.action(server_id, "os-getVNCConsole",
734 schema.get_vnc_console, **kwargs)
735
736 def add_fixed_ip(self, server_id, **kwargs):
737 """Add a fixed IP to server instance.
738
Dong Mad12c2332016-10-19 01:36:27 -0700739 For a full list of available parameters, please refer to the official
740 API reference:
zhufl94337052018-01-22 17:10:29 +0800741 https://developer.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500742 """
743 return self.action(server_id, 'addFixedIp', **kwargs)
744
745 def remove_fixed_ip(self, server_id, **kwargs):
746 """Remove input fixed IP from input server instance.
747
Dong Mad12c2332016-10-19 01:36:27 -0700748 For a full list of available parameters, please refer to the official
749 API reference:
zhufl94337052018-01-22 17:10:29 +0800750 https://developer.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500751 """
752 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800753
754 def list_security_groups_by_server(self, server_id):
755 """Lists security groups for a server.
756
757 For a full list of available parameters, please refer to the official
758 API reference:
zhufl01ae8db2017-03-08 10:50:51 +0800759 https://developer.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800760 """
761 resp, body = self.get("servers/%s/os-security-groups" % server_id)
762 body = json.loads(body)
763 self.validate_response(security_groups_schema.list_security_groups,
764 resp, body)
765 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500766
767 def list_tags(self, server_id):
768 """Lists all tags for a server.
769
770 For a full list of available parameters, please refer to the official
771 API reference:
772 https://developer.openstack.org/api-ref/compute/#list-tags
773 """
774 url = 'servers/%s/tags' % server_id
775 resp, body = self.get(url)
776 body = json.loads(body)
777 schema = self.get_schema(self.schema_versions_info)
778 self.validate_response(schema.list_tags, resp, body)
779 return rest_client.ResponseBody(resp, body)
780
781 def update_all_tags(self, server_id, tags):
782 """Replaces all tags on specified server with the new set of tags.
783
784 For a full list of available parameters, please refer to the official
785 API reference:
786 https://developer.openstack.org/api-ref/compute/#replace-tags
787
788 :param tags: List of tags to replace current server tags with.
789 """
790 url = 'servers/%s/tags' % server_id
791 put_body = {'tags': tags}
792 resp, body = self.put(url, json.dumps(put_body))
793 body = json.loads(body)
794 schema = self.get_schema(self.schema_versions_info)
795 self.validate_response(schema.update_all_tags, resp, body)
796 return rest_client.ResponseBody(resp, body)
797
798 def delete_all_tags(self, server_id):
799 """Deletes all tags from the specified 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/#delete-all-tags
804 """
805 url = 'servers/%s/tags' % server_id
806 resp, body = self.delete(url)
807 schema = self.get_schema(self.schema_versions_info)
808 self.validate_response(schema.delete_all_tags, resp, body)
809 return rest_client.ResponseBody(resp, body)
810
811 def check_tag_existence(self, server_id, tag):
812 """Checks tag existence on the server.
813
814 For a full list of available parameters, please refer to the official
815 API reference:
816 https://developer.openstack.org/api-ref/compute/#check-tag-existence
817
818 :param tag: Check for existence of tag on specified server.
819 """
820 url = 'servers/%s/tags/%s' % (server_id, tag)
821 resp, body = self.get(url)
822 schema = self.get_schema(self.schema_versions_info)
823 self.validate_response(schema.check_tag_existence, resp, body)
824 return rest_client.ResponseBody(resp, body)
825
826 def update_tag(self, server_id, tag):
827 """Adds a single tag to the server if server has no specified tag.
828
829 For a full list of available parameters, please refer to the official
830 API reference:
831 https://developer.openstack.org/api-ref/compute/#add-a-single-tag
832
833 :param tag: Tag to be added to the specified server.
834 """
835 url = 'servers/%s/tags/%s' % (server_id, tag)
836 resp, body = self.put(url, None)
837 schema = self.get_schema(self.schema_versions_info)
838 self.validate_response(schema.update_tag, resp, body)
839 return rest_client.ResponseBody(resp, body)
840
841 def delete_tag(self, server_id, tag):
842 """Deletes a single tag from the specified server.
843
844 For a full list of available parameters, please refer to the official
845 API reference:
846 https://developer.openstack.org/api-ref/compute/#delete-a-single-tag
847
848 :param tag: Tag to be removed from the specified server.
849 """
850 url = 'servers/%s/tags/%s' % (server_id, tag)
851 resp, body = self.delete(url)
852 schema = self.get_schema(self.schema_versions_info)
853 self.validate_response(schema.delete_tag, resp, body)
854 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530855
856 def evacuate_server(self, server_id, **kwargs):
857 """Evacuate the given server.
858
859 For a full list of available parameters, please refer to the official
860 API reference:
861 https://developer.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
862 """
863 if self.enable_instance_password:
864 evacuate_schema = schema.evacuate_server_with_admin_pass
865 else:
866 evacuate_schema = schema.evacuate_server
867
868 return self.action(server_id, 'evacuate',
869 evacuate_schema,
870 **kwargs)