blob: e58890c89c601d456a6ad7414a6289982d003ab0 [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
songwenping99d6e002021-01-05 03:07:46 +000019from urllib import parse as urllib
Matthew Treinish9e26ca82016-02-23 11:43:20 -050020
21from oslo_serialization import jsonutils as json
Matthew Treinish9e26ca82016-02-23 11:43:20 -050022
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
Matt Riedemannb9b6e372019-03-02 12:23:14 -050036from tempest.lib.api_schema.response.compute.v2_70 import servers as schemav270
Matt Riedemann0b14b1e2019-03-02 12:38:10 -050037from tempest.lib.api_schema.response.compute.v2_71 import servers as schemav271
Lee Yarwood803b4a72020-01-07 17:10:29 +000038from tempest.lib.api_schema.response.compute.v2_73 import servers as schemav273
zhufle9ed6092020-06-16 16:36:59 +080039from tempest.lib.api_schema.response.compute.v2_79 import servers as schemav279
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040040from tempest.lib.api_schema.response.compute.v2_8 import servers as schemav28
lanoux2746ba02016-03-16 17:41:01 +090041from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050042from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090043from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050044
45
Ghanshyamee9af302016-02-25 06:12:43 +090046class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080047 """Service client for the resource /servers"""
48
lanoux2746ba02016-03-16 17:41:01 +090049 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080050 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010051 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040052 {'min': '2.6', 'max': '2.7', 'schema': schemav26},
53 {'min': '2.8', 'max': '2.8', 'schema': schemav28},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080054 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
55 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040056 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
Sergey Nikitin8654e5b2017-06-04 22:09:56 +040057 {'min': '2.26', 'max': '2.46', 'schema': schemav226},
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040058 {'min': '2.47', 'max': '2.47', 'schema': schemav247},
ghanshyam85a4b0a2018-04-24 11:09:25 +030059 {'min': '2.48', 'max': '2.53', 'schema': schemav248},
Ghanshyamd5394652018-04-26 07:59:32 +000060 {'min': '2.54', 'max': '2.56', 'schema': schemav254},
Jackie Truong1fa44642017-10-25 16:42:08 -040061 {'min': '2.57', 'max': '2.62', 'schema': schemav257},
Matt Riedemannb9b6e372019-03-02 12:23:14 -050062 {'min': '2.63', 'max': '2.69', 'schema': schemav263},
Matt Riedemann0b14b1e2019-03-02 12:38:10 -050063 {'min': '2.70', 'max': '2.70', 'schema': schemav270},
Lee Yarwood803b4a72020-01-07 17:10:29 +000064 {'min': '2.71', 'max': '2.72', 'schema': schemav271},
zhufle9ed6092020-06-16 16:36:59 +080065 {'min': '2.73', 'max': '2.78', 'schema': schemav273},
66 {'min': '2.79', 'max': None, 'schema': schemav279}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050067
68 def __init__(self, auth_provider, service, region,
69 enable_instance_password=True, **kwargs):
70 super(ServersClient, self).__init__(
71 auth_provider, service, region, **kwargs)
72 self.enable_instance_password = enable_instance_password
73
74 def create_server(self, **kwargs):
75 """Create server.
76
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070077 For a full list of available parameters, please refer to the official
78 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +020079 https://docs.openstack.org/api-ref/compute/#create-server
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070080
81 :param name: Server name
82 :param imageRef: Image reference (UUID)
83 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050084
85 Most parameters except the following are passed to the API without
86 any changes.
87 :param disk_config: The name is changed to OS-DCF:diskConfig
88 :param scheduler_hints: The name is changed to os:scheduler_hints and
89 the parameter is set in the same level as the parameter 'server'.
90 """
91 body = copy.deepcopy(kwargs)
92 if body.get('disk_config'):
93 body['OS-DCF:diskConfig'] = body.pop('disk_config')
94
95 hints = None
96 if body.get('scheduler_hints'):
97 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
98
99 post_body = {'server': body}
100
101 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +0200102 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500103
104 post_body = json.dumps(post_body)
105 resp, body = self.post('servers', post_body)
106
107 body = json.loads(body)
108 # NOTE(maurosr): this deals with the case of multiple server create
109 # with return reservation id set True
110 if 'reservation_id' in body:
111 return rest_client.ResponseBody(resp, body)
112 if self.enable_instance_password:
113 create_schema = schema.create_server_with_admin_pass
114 else:
115 create_schema = schema.create_server
116 self.validate_response(create_schema, resp, body)
117 return rest_client.ResponseBody(resp, body)
118
119 def update_server(self, server_id, **kwargs):
120 """Update server.
121
Dong Mad12c2332016-10-19 01:36:27 -0700122 For a full list of available parameters, please refer to the official
123 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200124 https://docs.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500125
126 Most parameters except the following are passed to the API without
127 any changes.
128 :param disk_config: The name is changed to OS-DCF:diskConfig
129 """
ghanshyam910022e2016-12-21 13:32:57 +0900130 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500131 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
132
133 post_body = json.dumps({'server': kwargs})
134 resp, body = self.put("servers/%s" % server_id, post_body)
135 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900136 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500137 self.validate_response(schema.update_server, resp, body)
138 return rest_client.ResponseBody(resp, body)
139
140 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800141 """Get server details.
142
Dong Mad12c2332016-10-19 01:36:27 -0700143 For a full list of available parameters, please refer to the official
144 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200145 https://docs.openstack.org/api-ref/compute/#show-server-details
Lv Fumei7e326332016-07-08 15:18:03 +0800146 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500147 resp, body = self.get("servers/%s" % server_id)
148 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900149 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500150 self.validate_response(schema.get_server, resp, body)
151 return rest_client.ResponseBody(resp, body)
152
153 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800154 """Delete server.
155
Dong Mad12c2332016-10-19 01:36:27 -0700156 For a full list of available parameters, please refer to the official
157 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200158 https://docs.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800159 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500160 resp, body = self.delete("servers/%s" % server_id)
161 self.validate_response(schema.delete_server, resp, body)
162 return rest_client.ResponseBody(resp, body)
163
164 def list_servers(self, detail=False, **params):
165 """List servers.
166
Dong Mad12c2332016-10-19 01:36:27 -0700167 For a full list of available parameters, please refer to the official
168 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200169 https://docs.openstack.org/api-ref/compute/#list-servers
170 https://docs.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500171 """
172
173 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900174 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500175 if detail:
176 url += '/detail'
177 _schema = schema.list_servers_detail
ghanshyama8ace722018-04-20 08:45:10 +0000178 else:
179 _schema = schema.list_servers
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500180 if params:
181 url += '?%s' % urllib.urlencode(params)
182
183 resp, body = self.get(url)
184 body = json.loads(body)
185 self.validate_response(_schema, resp, body)
186 return rest_client.ResponseBody(resp, body)
187
188 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800189 """Lists all addresses for a server.
190
Dong Mad12c2332016-10-19 01:36:27 -0700191 For a full list of available parameters, please refer to the official
192 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200193 https://docs.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800194 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500195 resp, body = self.get("servers/%s/ips" % server_id)
196 body = json.loads(body)
197 self.validate_response(schema.list_addresses, resp, body)
198 return rest_client.ResponseBody(resp, body)
199
200 def list_addresses_by_network(self, server_id, network_id):
201 """Lists all addresses of a specific network type for a server."""
202 resp, body = self.get("servers/%s/ips/%s" %
203 (server_id, network_id))
204 body = json.loads(body)
205 self.validate_response(schema.list_addresses_by_network, resp, body)
206 return rest_client.ResponseBody(resp, body)
207
208 def action(self, server_id, action_name,
209 schema=schema.server_actions_common_schema,
210 **kwargs):
Ghanshyamcbf480f2019-07-11 11:53:57 +0000211 if 'body' in kwargs:
212 post_body = json.dumps(kwargs['body'])
213 else:
214 post_body = json.dumps({action_name: kwargs})
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500215 resp, body = self.post('servers/%s/action' % server_id,
216 post_body)
217 if body:
218 body = json.loads(body)
zhuflbe86aec2020-02-25 16:56:51 +0800219 else:
220 if isinstance(body, bytes):
221 body = body.decode('utf-8')
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500222 self.validate_response(schema, resp, body)
223 return rest_client.ResponseBody(resp, body)
224
225 def create_backup(self, server_id, **kwargs):
226 """Backup a server instance.
227
Dong Mad12c2332016-10-19 01:36:27 -0700228 For a full list of available parameters, please refer to the official
229 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200230 https://docs.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500231 """
232 return self.action(server_id, "createBackup", **kwargs)
233
234 def change_password(self, server_id, **kwargs):
235 """Change the root password for the 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200239 https://docs.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500240 """
241 return self.action(server_id, 'changePassword', **kwargs)
242
243 def show_password(self, server_id):
244 resp, body = self.get("servers/%s/os-server-password" %
245 server_id)
246 body = json.loads(body)
247 self.validate_response(schema.show_password, resp, body)
248 return rest_client.ResponseBody(resp, body)
249
250 def delete_password(self, server_id):
251 """Removes the encrypted server password from the metadata server
252
253 Note that this does not actually change the instance server
254 password.
255 """
256 resp, body = self.delete("servers/%s/os-server-password" %
257 server_id)
258 self.validate_response(schema.server_actions_delete_password,
259 resp, body)
260 return rest_client.ResponseBody(resp, body)
261
262 def reboot_server(self, server_id, **kwargs):
263 """Reboot a server.
264
Dong Mad12c2332016-10-19 01:36:27 -0700265 For a full list of available parameters, please refer to the official
266 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200267 https://docs.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500268 """
269 return self.action(server_id, 'reboot', **kwargs)
270
271 def rebuild_server(self, server_id, image_ref, **kwargs):
272 """Rebuild a server with a new image.
273
Dong Mad12c2332016-10-19 01:36:27 -0700274 For a full list of available parameters, please refer to the official
275 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200276 https://docs.openstack.org/api-ref/compute/#rebuild-server-rebuild-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['imageRef'] = image_ref
283 if 'disk_config' in kwargs:
284 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900285 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500286 if self.enable_instance_password:
287 rebuild_schema = schema.rebuild_server_with_admin_pass
288 else:
289 rebuild_schema = schema.rebuild_server
290 return self.action(server_id, 'rebuild',
291 rebuild_schema, **kwargs)
292
293 def resize_server(self, server_id, flavor_ref, **kwargs):
294 """Change the flavor of a server.
295
Dong Mad12c2332016-10-19 01:36:27 -0700296 For a full list of available parameters, please refer to the official
297 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200298 https://docs.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500299
300 Most parameters except the following are passed to the API without
301 any changes.
302 :param disk_config: The name is changed to OS-DCF:diskConfig
303 """
304 kwargs['flavorRef'] = flavor_ref
305 if 'disk_config' in kwargs:
306 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
307 return self.action(server_id, 'resize', **kwargs)
308
309 def confirm_resize_server(self, server_id, **kwargs):
310 """Confirm the flavor change for a server.
311
Dong Mad12c2332016-10-19 01:36:27 -0700312 For a full list of available parameters, please refer to the official
313 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200314 https://docs.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500315 """
316 return self.action(server_id, 'confirmResize',
317 schema.server_actions_confirm_resize,
318 **kwargs)
319
320 def revert_resize_server(self, server_id, **kwargs):
321 """Revert a server back to its original flavor.
322
Dong Mad12c2332016-10-19 01:36:27 -0700323 For a full list of available parameters, please refer to the official
324 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200325 https://docs.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500326 """
327 return self.action(server_id, 'revertResize', **kwargs)
328
329 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800330 """Lists all metadata for a server.
331
Dong Mad12c2332016-10-19 01:36:27 -0700332 For a full list of available parameters, please refer to the official
333 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200334 https://docs.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800335 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500336 resp, body = self.get("servers/%s/metadata" % server_id)
337 body = json.loads(body)
338 self.validate_response(schema.list_server_metadata, resp, body)
339 return rest_client.ResponseBody(resp, body)
340
341 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800342 """Sets one or more metadata items for a server.
343
Dong Mad12c2332016-10-19 01:36:27 -0700344 For a full list of available parameters, please refer to the official
345 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200346 https://docs.openstack.org/api-ref/compute/#replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800347 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500348 if no_metadata_field:
349 post_body = ""
350 else:
351 post_body = json.dumps({'metadata': meta})
352 resp, body = self.put('servers/%s/metadata' % server_id,
353 post_body)
354 body = json.loads(body)
355 self.validate_response(schema.set_server_metadata, resp, body)
356 return rest_client.ResponseBody(resp, body)
357
358 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800359 """Updates one or more metadata items 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200363 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800364 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500365 post_body = json.dumps({'metadata': meta})
366 resp, body = self.post('servers/%s/metadata' % server_id,
367 post_body)
368 body = json.loads(body)
369 self.validate_response(schema.update_server_metadata,
370 resp, body)
371 return rest_client.ResponseBody(resp, body)
372
373 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800374 """Shows details for a metadata item, by key, for 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200378 https://docs.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800379 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500380 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
381 body = json.loads(body)
382 self.validate_response(schema.set_show_server_metadata_item,
383 resp, body)
384 return rest_client.ResponseBody(resp, body)
385
386 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800387 """Sets a metadata item, by key, for a server.
388
Dong Mad12c2332016-10-19 01:36:27 -0700389 For a full list of available parameters, please refer to the official
390 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200391 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800392 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500393 post_body = json.dumps({'meta': meta})
394 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
395 post_body)
396 body = json.loads(body)
397 self.validate_response(schema.set_show_server_metadata_item,
398 resp, body)
399 return rest_client.ResponseBody(resp, body)
400
401 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800402 """Deletes a metadata item, by key, from a server.
403
Dong Mad12c2332016-10-19 01:36:27 -0700404 For a full list of available parameters, please refer to the official
405 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200406 https://docs.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800407 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500408 resp, body = self.delete("servers/%s/metadata/%s" %
409 (server_id, key))
410 self.validate_response(schema.delete_server_metadata_item,
411 resp, body)
412 return rest_client.ResponseBody(resp, body)
413
414 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800415 """Stops a running server and changes its status to SHUTOFF.
416
Dong Mad12c2332016-10-19 01:36:27 -0700417 For a full list of available parameters, please refer to the official
418 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200419 https://docs.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800420 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500421 return self.action(server_id, 'os-stop', **kwargs)
422
423 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800424 """Starts a stopped server and changes its status to ACTIVE.
425
Dong Mad12c2332016-10-19 01:36:27 -0700426 For a full list of available parameters, please refer to the official
427 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200428 https://docs.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800429 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500430 return self.action(server_id, 'os-start', **kwargs)
431
432 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800433 """Attaches a volume to a server instance.
434
Dong Mad12c2332016-10-19 01:36:27 -0700435 For a full list of available parameters, please refer to the official
436 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200437 https://docs.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800438 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500439 post_body = json.dumps({'volumeAttachment': kwargs})
440 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
441 post_body)
442 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500443 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500444 self.validate_response(schema.attach_volume, resp, body)
445 return rest_client.ResponseBody(resp, body)
446
447 def update_attached_volume(self, server_id, attachment_id, **kwargs):
zhuflaa605d52019-08-21 15:17:02 +0800448 """Swaps a volume attached to an instance for another volume
449
450 For a full list of available parameters, please refer to the official
451 API reference:
452 https://docs.openstack.org/api-ref/compute/#update-a-volume-attachment
453 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500454 post_body = json.dumps({'volumeAttachment': kwargs})
455 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
456 (server_id, attachment_id),
457 post_body)
458 self.validate_response(schema.update_attached_volume, resp, body)
459 return rest_client.ResponseBody(resp, body)
460
461 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800462 """Detaches a volume from a server instance.
463
Dong Mad12c2332016-10-19 01:36:27 -0700464 For a full list of available parameters, please refer to the official
465 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200466 https://docs.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800467 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500468 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
469 (server_id, volume_id))
470 self.validate_response(schema.detach_volume, resp, body)
471 return rest_client.ResponseBody(resp, body)
472
473 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800474 """Return details about the given volume attachment.
475
Dong Mad12c2332016-10-19 01:36:27 -0700476 For a full list of available parameters, please refer to the official
477 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200478 https://docs.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800479 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500480 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
481 server_id, volume_id))
482 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500483 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500484 self.validate_response(schema.show_volume_attachment, resp, body)
485 return rest_client.ResponseBody(resp, body)
486
487 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800488 """Returns the list of volume attachments for a given instance.
489
Dong Mad12c2332016-10-19 01:36:27 -0700490 For a full list of available parameters, please refer to the official
491 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200492 https://docs.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800493 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500494 resp, body = self.get('servers/%s/os-volume_attachments' % (
495 server_id))
496 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500497 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500498 self.validate_response(schema.list_volume_attachments, resp, body)
499 return rest_client.ResponseBody(resp, body)
500
501 def add_security_group(self, server_id, **kwargs):
502 """Add a security group to the 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200506 https://docs.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500507 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500508 return self.action(server_id, 'addSecurityGroup', **kwargs)
509
510 def remove_security_group(self, server_id, **kwargs):
511 """Remove a security group from the 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200515 https://docs.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500516 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500517 return self.action(server_id, 'removeSecurityGroup', **kwargs)
518
519 def live_migrate_server(self, server_id, **kwargs):
520 """This should be called with administrator privileges.
521
Dong Mad12c2332016-10-19 01:36:27 -0700522 For a full list of available parameters, please refer to the official
523 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200524 https://docs.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500525 """
526 return self.action(server_id, 'os-migrateLive', **kwargs)
527
528 def migrate_server(self, server_id, **kwargs):
529 """Migrate a server to a new host.
530
Dong Mad12c2332016-10-19 01:36:27 -0700531 For a full list of available parameters, please refer to the official
532 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200533 https://docs.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500534 """
535 return self.action(server_id, 'migrate', **kwargs)
536
537 def lock_server(self, server_id, **kwargs):
538 """Lock the given 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200542 https://docs.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500543 """
544 return self.action(server_id, 'lock', **kwargs)
545
546 def unlock_server(self, server_id, **kwargs):
547 """UNlock the given 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200551 https://docs.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500552 """
553 return self.action(server_id, 'unlock', **kwargs)
554
555 def suspend_server(self, server_id, **kwargs):
556 """Suspend the provided server.
557
Dong Mad12c2332016-10-19 01:36:27 -0700558 For a full list of available parameters, please refer to the official
559 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200560 https://docs.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500561 """
562 return self.action(server_id, 'suspend', **kwargs)
563
564 def resume_server(self, server_id, **kwargs):
565 """Un-suspend 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200569 https://docs.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500570 """
571 return self.action(server_id, 'resume', **kwargs)
572
573 def pause_server(self, server_id, **kwargs):
574 """Pause 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200578 https://docs.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500579 """
580 return self.action(server_id, 'pause', **kwargs)
581
582 def unpause_server(self, server_id, **kwargs):
583 """Un-pause 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200587 https://docs.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500588 """
589 return self.action(server_id, 'unpause', **kwargs)
590
591 def reset_state(self, server_id, **kwargs):
592 """Reset the state of a server to active/error.
593
Dong Mad12c2332016-10-19 01:36:27 -0700594 For a full list of available parameters, please refer to the official
595 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200596 https://docs.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500597 """
598 return self.action(server_id, 'os-resetState', **kwargs)
599
600 def shelve_server(self, server_id, **kwargs):
601 """Shelve the provided server.
602
Dong Mad12c2332016-10-19 01:36:27 -0700603 For a full list of available parameters, please refer to the official
604 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200605 https://docs.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500606 """
607 return self.action(server_id, 'shelve', **kwargs)
608
609 def unshelve_server(self, server_id, **kwargs):
610 """Un-shelve 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:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200614 https://docs.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500615 """
Ghanshyamcbf480f2019-07-11 11:53:57 +0000616 # NOTE(gmann): pass None as request body if nothing is requested.
617 # Nova started the request body check since 2.77 microversion and only
618 # accept AZ or None as valid req body and reject the empty dict {}.
619 # Before 2.77 microverison anything is valid body as Nova does not
620 # check the request body but as per api-ref None is valid request
621 # body to pass so we do not need to check the requested microversion
622 # here and always default req body to None.
623 if not kwargs:
624 kwargs['body'] = {'unshelve': None}
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500625 return self.action(server_id, 'unshelve', **kwargs)
626
627 def shelve_offload_server(self, server_id, **kwargs):
628 """Shelve-offload the provided server.
629
Dong Mad12c2332016-10-19 01:36:27 -0700630 For a full list of available parameters, please refer to the official
631 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200632 https://docs.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500633 """
634 return self.action(server_id, 'shelveOffload', **kwargs)
635
636 def get_console_output(self, server_id, **kwargs):
637 """Get console output.
638
Dong Mad12c2332016-10-19 01:36:27 -0700639 For a full list of available parameters, please refer to the official
640 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200641 https://docs.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500642 """
643 return self.action(server_id, 'os-getConsoleOutput',
644 schema.get_console_output, **kwargs)
645
Markus Zoeller69d58b82017-02-17 10:09:22 +0100646 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
647 """Get a remote console.
648
649 For a full list of available parameters, please refer to the official
650 API reference:
zhufl35c2c122020-10-28 17:07:16 +0800651 https://docs.openstack.org/api-ref/compute/#create-console
Markus Zoeller69d58b82017-02-17 10:09:22 +0100652 """
653 param = {
654 'remote_console': {
655 'type': console_type,
656 'protocol': protocol,
657 }
658 }
659 post_body = json.dumps(param)
660 resp, body = self.post("servers/%s/remote-consoles" % server_id,
661 post_body)
662 body = json.loads(body)
663 schema = self.get_schema(self.schema_versions_info)
664 self.validate_response(schema.get_remote_consoles, resp, body)
665 return rest_client.ResponseBody(resp, body)
666
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500667 def list_virtual_interfaces(self, server_id):
668 """List the virtual interfaces used in an instance."""
669 resp, body = self.get('/'.join(['servers', server_id,
afazekas40fcb9b2019-03-08 11:25:11 +0100670 'os-virtual-interfaces']))
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500671 body = json.loads(body)
672 self.validate_response(schema.list_virtual_interfaces, resp, body)
673 return rest_client.ResponseBody(resp, body)
674
675 def rescue_server(self, server_id, **kwargs):
676 """Rescue the provided server.
677
Dong Mad12c2332016-10-19 01:36:27 -0700678 For a full list of available parameters, please refer to the official
679 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200680 https://docs.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500681 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100682 if self.enable_instance_password:
683 rescue_schema = schema.rescue_server_with_admin_pass
684 else:
685 rescue_schema = schema.rescue_server
686 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500687
688 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800689 """Unrescue the provided server.
690
Dong Mad12c2332016-10-19 01:36:27 -0700691 For a full list of available parameters, please refer to the official
692 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200693 https://docs.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800694 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500695 return self.action(server_id, 'unrescue')
696
697 def show_server_diagnostics(self, server_id):
698 """Get the usage data for a server."""
699 resp, body = self.get("servers/%s/diagnostics" % server_id)
Sergey Nikitin0cb4f222017-02-03 13:16:33 +0400700 body = json.loads(body)
701 schema = self.get_schema(self.schema_versions_info)
702 self.validate_response(schema.show_server_diagnostics, resp, body)
703 return rest_client.ResponseBody(resp, body)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500704
705 def list_instance_actions(self, server_id):
706 """List the provided server action."""
707 resp, body = self.get("servers/%s/os-instance-actions" %
708 server_id)
709 body = json.loads(body)
710 self.validate_response(schema.list_instance_actions, resp, body)
711 return rest_client.ResponseBody(resp, body)
712
713 def show_instance_action(self, server_id, request_id):
714 """Returns the action details of the provided server."""
715 resp, body = self.get("servers/%s/os-instance-actions/%s" %
716 (server_id, request_id))
717 body = json.loads(body)
718 self.validate_response(schema.show_instance_action, resp, body)
719 return rest_client.ResponseBody(resp, body)
720
721 def force_delete_server(self, server_id, **kwargs):
722 """Force delete a server.
723
Dong Mad12c2332016-10-19 01:36:27 -0700724 For a full list of available parameters, please refer to the official
725 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200726 https://docs.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500727 """
728 return self.action(server_id, 'forceDelete', **kwargs)
729
730 def restore_soft_deleted_server(self, server_id, **kwargs):
731 """Restore a soft-deleted server.
732
Dong Mad12c2332016-10-19 01:36:27 -0700733 For a full list of available parameters, please refer to the official
734 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200735 https://docs.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500736 """
737 return self.action(server_id, 'restore', **kwargs)
738
739 def reset_network(self, server_id, **kwargs):
740 """Reset the Network of a server.
741
Dong Mad12c2332016-10-19 01:36:27 -0700742 For a full list of available parameters, please refer to the official
743 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200744 https://docs.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500745 """
746 return self.action(server_id, 'resetNetwork', **kwargs)
747
748 def inject_network_info(self, server_id, **kwargs):
749 """Inject the Network Info into server.
750
Dong Mad12c2332016-10-19 01:36:27 -0700751 For a full list of available parameters, please refer to the official
752 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200753 https://docs.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500754 """
755 return self.action(server_id, 'injectNetworkInfo', **kwargs)
756
757 def get_vnc_console(self, server_id, **kwargs):
758 """Get URL of VNC console.
759
Dong Mad12c2332016-10-19 01:36:27 -0700760 For a full list of available parameters, please refer to the official
761 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200762 https://docs.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500763 """
764 return self.action(server_id, "os-getVNCConsole",
765 schema.get_vnc_console, **kwargs)
766
767 def add_fixed_ip(self, server_id, **kwargs):
768 """Add a fixed IP to server instance.
769
Dong Mad12c2332016-10-19 01:36:27 -0700770 For a full list of available parameters, please refer to the official
771 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200772 https://docs.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500773 """
774 return self.action(server_id, 'addFixedIp', **kwargs)
775
776 def remove_fixed_ip(self, server_id, **kwargs):
777 """Remove input fixed IP from input server instance.
778
Dong Mad12c2332016-10-19 01:36:27 -0700779 For a full list of available parameters, please refer to the official
780 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200781 https://docs.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500782 """
783 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800784
785 def list_security_groups_by_server(self, server_id):
786 """Lists security groups for a server.
787
788 For a full list of available parameters, please refer to the official
789 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200790 https://docs.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800791 """
792 resp, body = self.get("servers/%s/os-security-groups" % server_id)
793 body = json.loads(body)
794 self.validate_response(security_groups_schema.list_security_groups,
795 resp, body)
796 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500797
798 def list_tags(self, server_id):
799 """Lists all tags for a server.
800
801 For a full list of available parameters, please refer to the official
802 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200803 https://docs.openstack.org/api-ref/compute/#list-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500804 """
805 url = 'servers/%s/tags' % server_id
806 resp, body = self.get(url)
807 body = json.loads(body)
808 schema = self.get_schema(self.schema_versions_info)
809 self.validate_response(schema.list_tags, resp, body)
810 return rest_client.ResponseBody(resp, body)
811
812 def update_all_tags(self, server_id, tags):
813 """Replaces all tags on specified server with the new set of tags.
814
815 For a full list of available parameters, please refer to the official
816 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200817 https://docs.openstack.org/api-ref/compute/#replace-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500818
819 :param tags: List of tags to replace current server tags with.
820 """
821 url = 'servers/%s/tags' % server_id
822 put_body = {'tags': tags}
823 resp, body = self.put(url, json.dumps(put_body))
824 body = json.loads(body)
825 schema = self.get_schema(self.schema_versions_info)
826 self.validate_response(schema.update_all_tags, resp, body)
827 return rest_client.ResponseBody(resp, body)
828
829 def delete_all_tags(self, server_id):
830 """Deletes all tags from the specified server.
831
832 For a full list of available parameters, please refer to the official
833 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200834 https://docs.openstack.org/api-ref/compute/#delete-all-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500835 """
836 url = 'servers/%s/tags' % server_id
837 resp, body = self.delete(url)
838 schema = self.get_schema(self.schema_versions_info)
839 self.validate_response(schema.delete_all_tags, resp, body)
840 return rest_client.ResponseBody(resp, body)
841
842 def check_tag_existence(self, server_id, tag):
843 """Checks tag existence on the server.
844
845 For a full list of available parameters, please refer to the official
846 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200847 https://docs.openstack.org/api-ref/compute/#check-tag-existence
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500848
849 :param tag: Check for existence of tag on specified server.
850 """
851 url = 'servers/%s/tags/%s' % (server_id, tag)
852 resp, body = self.get(url)
853 schema = self.get_schema(self.schema_versions_info)
854 self.validate_response(schema.check_tag_existence, resp, body)
855 return rest_client.ResponseBody(resp, body)
856
857 def update_tag(self, server_id, tag):
858 """Adds a single tag to the server if server has no specified tag.
859
860 For a full list of available parameters, please refer to the official
861 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200862 https://docs.openstack.org/api-ref/compute/#add-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500863
864 :param tag: Tag to be added to the specified server.
865 """
866 url = 'servers/%s/tags/%s' % (server_id, tag)
867 resp, body = self.put(url, None)
868 schema = self.get_schema(self.schema_versions_info)
869 self.validate_response(schema.update_tag, resp, body)
870 return rest_client.ResponseBody(resp, body)
871
872 def delete_tag(self, server_id, tag):
873 """Deletes a single tag from the specified server.
874
875 For a full list of available parameters, please refer to the official
876 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200877 https://docs.openstack.org/api-ref/compute/#delete-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500878
879 :param tag: Tag to be removed from the specified server.
880 """
881 url = 'servers/%s/tags/%s' % (server_id, tag)
882 resp, body = self.delete(url)
883 schema = self.get_schema(self.schema_versions_info)
884 self.validate_response(schema.delete_tag, resp, body)
885 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530886
887 def evacuate_server(self, server_id, **kwargs):
888 """Evacuate the given server.
889
890 For a full list of available parameters, please refer to the official
891 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200892 https://docs.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
raiesmh0814158c92017-03-21 14:23:15 +0530893 """
894 if self.enable_instance_password:
895 evacuate_schema = schema.evacuate_server_with_admin_pass
896 else:
897 evacuate_schema = schema.evacuate_server
898
899 return self.action(server_id, 'evacuate',
900 evacuate_schema,
901 **kwargs)