blob: cbf7a8c18e6eb9a000e13b30abb3bdd3e9907136 [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
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
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040039from tempest.lib.api_schema.response.compute.v2_8 import servers as schemav28
lanoux2746ba02016-03-16 17:41:01 +090040from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050041from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090042from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050043
44
Ghanshyamee9af302016-02-25 06:12:43 +090045class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080046 """Service client for the resource /servers"""
47
lanoux2746ba02016-03-16 17:41:01 +090048 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080049 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010050 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040051 {'min': '2.6', 'max': '2.7', 'schema': schemav26},
52 {'min': '2.8', 'max': '2.8', 'schema': schemav28},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080053 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
54 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040055 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
Sergey Nikitin8654e5b2017-06-04 22:09:56 +040056 {'min': '2.26', 'max': '2.46', 'schema': schemav226},
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040057 {'min': '2.47', 'max': '2.47', 'schema': schemav247},
ghanshyam85a4b0a2018-04-24 11:09:25 +030058 {'min': '2.48', 'max': '2.53', 'schema': schemav248},
Ghanshyamd5394652018-04-26 07:59:32 +000059 {'min': '2.54', 'max': '2.56', 'schema': schemav254},
Jackie Truong1fa44642017-10-25 16:42:08 -040060 {'min': '2.57', 'max': '2.62', 'schema': schemav257},
Matt Riedemannb9b6e372019-03-02 12:23:14 -050061 {'min': '2.63', 'max': '2.69', 'schema': schemav263},
Matt Riedemann0b14b1e2019-03-02 12:38:10 -050062 {'min': '2.70', 'max': '2.70', 'schema': schemav270},
Lee Yarwood803b4a72020-01-07 17:10:29 +000063 {'min': '2.71', 'max': '2.72', 'schema': schemav271},
64 {'min': '2.73', 'max': None, 'schema': schemav273}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050065
66 def __init__(self, auth_provider, service, region,
67 enable_instance_password=True, **kwargs):
68 super(ServersClient, self).__init__(
69 auth_provider, service, region, **kwargs)
70 self.enable_instance_password = enable_instance_password
71
72 def create_server(self, **kwargs):
73 """Create server.
74
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070075 For a full list of available parameters, please refer to the official
76 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +020077 https://docs.openstack.org/api-ref/compute/#create-server
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070078
79 :param name: Server name
80 :param imageRef: Image reference (UUID)
81 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050082
83 Most parameters except the following are passed to the API without
84 any changes.
85 :param disk_config: The name is changed to OS-DCF:diskConfig
86 :param scheduler_hints: The name is changed to os:scheduler_hints and
87 the parameter is set in the same level as the parameter 'server'.
88 """
89 body = copy.deepcopy(kwargs)
90 if body.get('disk_config'):
91 body['OS-DCF:diskConfig'] = body.pop('disk_config')
92
93 hints = None
94 if body.get('scheduler_hints'):
95 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
96
97 post_body = {'server': body}
98
99 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +0200100 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500101
102 post_body = json.dumps(post_body)
103 resp, body = self.post('servers', post_body)
104
105 body = json.loads(body)
106 # NOTE(maurosr): this deals with the case of multiple server create
107 # with return reservation id set True
108 if 'reservation_id' in body:
109 return rest_client.ResponseBody(resp, body)
110 if self.enable_instance_password:
111 create_schema = schema.create_server_with_admin_pass
112 else:
113 create_schema = schema.create_server
114 self.validate_response(create_schema, resp, body)
115 return rest_client.ResponseBody(resp, body)
116
117 def update_server(self, server_id, **kwargs):
118 """Update server.
119
Dong Mad12c2332016-10-19 01:36:27 -0700120 For a full list of available parameters, please refer to the official
121 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200122 https://docs.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500123
124 Most parameters except the following are passed to the API without
125 any changes.
126 :param disk_config: The name is changed to OS-DCF:diskConfig
127 """
ghanshyam910022e2016-12-21 13:32:57 +0900128 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500129 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
130
131 post_body = json.dumps({'server': kwargs})
132 resp, body = self.put("servers/%s" % server_id, post_body)
133 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900134 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500135 self.validate_response(schema.update_server, resp, body)
136 return rest_client.ResponseBody(resp, body)
137
138 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800139 """Get server details.
140
Dong Mad12c2332016-10-19 01:36:27 -0700141 For a full list of available parameters, please refer to the official
142 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200143 https://docs.openstack.org/api-ref/compute/#show-server-details
Lv Fumei7e326332016-07-08 15:18:03 +0800144 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500145 resp, body = self.get("servers/%s" % server_id)
146 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900147 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500148 self.validate_response(schema.get_server, resp, body)
149 return rest_client.ResponseBody(resp, body)
150
151 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800152 """Delete server.
153
Dong Mad12c2332016-10-19 01:36:27 -0700154 For a full list of available parameters, please refer to the official
155 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200156 https://docs.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800157 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500158 resp, body = self.delete("servers/%s" % server_id)
159 self.validate_response(schema.delete_server, resp, body)
160 return rest_client.ResponseBody(resp, body)
161
162 def list_servers(self, detail=False, **params):
163 """List servers.
164
Dong Mad12c2332016-10-19 01:36:27 -0700165 For a full list of available parameters, please refer to the official
166 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200167 https://docs.openstack.org/api-ref/compute/#list-servers
168 https://docs.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500169 """
170
171 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900172 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500173 if detail:
174 url += '/detail'
175 _schema = schema.list_servers_detail
ghanshyama8ace722018-04-20 08:45:10 +0000176 else:
177 _schema = schema.list_servers
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500178 if params:
179 url += '?%s' % urllib.urlencode(params)
180
181 resp, body = self.get(url)
182 body = json.loads(body)
183 self.validate_response(_schema, resp, body)
184 return rest_client.ResponseBody(resp, body)
185
186 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800187 """Lists all addresses for a server.
188
Dong Mad12c2332016-10-19 01:36:27 -0700189 For a full list of available parameters, please refer to the official
190 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200191 https://docs.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800192 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500193 resp, body = self.get("servers/%s/ips" % server_id)
194 body = json.loads(body)
195 self.validate_response(schema.list_addresses, resp, body)
196 return rest_client.ResponseBody(resp, body)
197
198 def list_addresses_by_network(self, server_id, network_id):
199 """Lists all addresses of a specific network type for a server."""
200 resp, body = self.get("servers/%s/ips/%s" %
201 (server_id, network_id))
202 body = json.loads(body)
203 self.validate_response(schema.list_addresses_by_network, resp, body)
204 return rest_client.ResponseBody(resp, body)
205
206 def action(self, server_id, action_name,
207 schema=schema.server_actions_common_schema,
208 **kwargs):
209 post_body = json.dumps({action_name: kwargs})
210 resp, body = self.post('servers/%s/action' % server_id,
211 post_body)
212 if body:
213 body = json.loads(body)
214 self.validate_response(schema, resp, body)
215 return rest_client.ResponseBody(resp, body)
216
217 def create_backup(self, server_id, **kwargs):
218 """Backup a server instance.
219
Dong Mad12c2332016-10-19 01:36:27 -0700220 For a full list of available parameters, please refer to the official
221 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200222 https://docs.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500223 """
224 return self.action(server_id, "createBackup", **kwargs)
225
226 def change_password(self, server_id, **kwargs):
227 """Change the root password for the server.
228
Dong Mad12c2332016-10-19 01:36:27 -0700229 For a full list of available parameters, please refer to the official
230 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200231 https://docs.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500232 """
233 return self.action(server_id, 'changePassword', **kwargs)
234
235 def show_password(self, server_id):
236 resp, body = self.get("servers/%s/os-server-password" %
237 server_id)
238 body = json.loads(body)
239 self.validate_response(schema.show_password, resp, body)
240 return rest_client.ResponseBody(resp, body)
241
242 def delete_password(self, server_id):
243 """Removes the encrypted server password from the metadata server
244
245 Note that this does not actually change the instance server
246 password.
247 """
248 resp, body = self.delete("servers/%s/os-server-password" %
249 server_id)
250 self.validate_response(schema.server_actions_delete_password,
251 resp, body)
252 return rest_client.ResponseBody(resp, body)
253
254 def reboot_server(self, server_id, **kwargs):
255 """Reboot a server.
256
Dong Mad12c2332016-10-19 01:36:27 -0700257 For a full list of available parameters, please refer to the official
258 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200259 https://docs.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500260 """
261 return self.action(server_id, 'reboot', **kwargs)
262
263 def rebuild_server(self, server_id, image_ref, **kwargs):
264 """Rebuild a server with a new image.
265
Dong Mad12c2332016-10-19 01:36:27 -0700266 For a full list of available parameters, please refer to the official
267 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200268 https://docs.openstack.org/api-ref/compute/#rebuild-server-rebuild-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500269
270 Most parameters except the following are passed to the API without
271 any changes.
272 :param disk_config: The name is changed to OS-DCF:diskConfig
273 """
274 kwargs['imageRef'] = image_ref
275 if 'disk_config' in kwargs:
276 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900277 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500278 if self.enable_instance_password:
279 rebuild_schema = schema.rebuild_server_with_admin_pass
280 else:
281 rebuild_schema = schema.rebuild_server
282 return self.action(server_id, 'rebuild',
283 rebuild_schema, **kwargs)
284
285 def resize_server(self, server_id, flavor_ref, **kwargs):
286 """Change the flavor of a server.
287
Dong Mad12c2332016-10-19 01:36:27 -0700288 For a full list of available parameters, please refer to the official
289 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200290 https://docs.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500291
292 Most parameters except the following are passed to the API without
293 any changes.
294 :param disk_config: The name is changed to OS-DCF:diskConfig
295 """
296 kwargs['flavorRef'] = flavor_ref
297 if 'disk_config' in kwargs:
298 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
299 return self.action(server_id, 'resize', **kwargs)
300
301 def confirm_resize_server(self, server_id, **kwargs):
302 """Confirm the flavor change for a server.
303
Dong Mad12c2332016-10-19 01:36:27 -0700304 For a full list of available parameters, please refer to the official
305 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200306 https://docs.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500307 """
308 return self.action(server_id, 'confirmResize',
309 schema.server_actions_confirm_resize,
310 **kwargs)
311
312 def revert_resize_server(self, server_id, **kwargs):
313 """Revert a server back to its original flavor.
314
Dong Mad12c2332016-10-19 01:36:27 -0700315 For a full list of available parameters, please refer to the official
316 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200317 https://docs.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500318 """
319 return self.action(server_id, 'revertResize', **kwargs)
320
321 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800322 """Lists all metadata for a server.
323
Dong Mad12c2332016-10-19 01:36:27 -0700324 For a full list of available parameters, please refer to the official
325 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200326 https://docs.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800327 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500328 resp, body = self.get("servers/%s/metadata" % server_id)
329 body = json.loads(body)
330 self.validate_response(schema.list_server_metadata, resp, body)
331 return rest_client.ResponseBody(resp, body)
332
333 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800334 """Sets one or more metadata items for a server.
335
Dong Mad12c2332016-10-19 01:36:27 -0700336 For a full list of available parameters, please refer to the official
337 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200338 https://docs.openstack.org/api-ref/compute/#replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800339 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500340 if no_metadata_field:
341 post_body = ""
342 else:
343 post_body = json.dumps({'metadata': meta})
344 resp, body = self.put('servers/%s/metadata' % server_id,
345 post_body)
346 body = json.loads(body)
347 self.validate_response(schema.set_server_metadata, resp, body)
348 return rest_client.ResponseBody(resp, body)
349
350 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800351 """Updates one or more metadata items for a server.
352
Dong Mad12c2332016-10-19 01:36:27 -0700353 For a full list of available parameters, please refer to the official
354 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200355 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800356 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500357 post_body = json.dumps({'metadata': meta})
358 resp, body = self.post('servers/%s/metadata' % server_id,
359 post_body)
360 body = json.loads(body)
361 self.validate_response(schema.update_server_metadata,
362 resp, body)
363 return rest_client.ResponseBody(resp, body)
364
365 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800366 """Shows details for a metadata item, by key, for a server.
367
Dong Mad12c2332016-10-19 01:36:27 -0700368 For a full list of available parameters, please refer to the official
369 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200370 https://docs.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800371 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500372 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
373 body = json.loads(body)
374 self.validate_response(schema.set_show_server_metadata_item,
375 resp, body)
376 return rest_client.ResponseBody(resp, body)
377
378 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800379 """Sets a metadata item, by key, for a server.
380
Dong Mad12c2332016-10-19 01:36:27 -0700381 For a full list of available parameters, please refer to the official
382 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200383 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800384 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500385 post_body = json.dumps({'meta': meta})
386 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
387 post_body)
388 body = json.loads(body)
389 self.validate_response(schema.set_show_server_metadata_item,
390 resp, body)
391 return rest_client.ResponseBody(resp, body)
392
393 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800394 """Deletes a metadata item, by key, from a server.
395
Dong Mad12c2332016-10-19 01:36:27 -0700396 For a full list of available parameters, please refer to the official
397 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200398 https://docs.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800399 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500400 resp, body = self.delete("servers/%s/metadata/%s" %
401 (server_id, key))
402 self.validate_response(schema.delete_server_metadata_item,
403 resp, body)
404 return rest_client.ResponseBody(resp, body)
405
406 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800407 """Stops a running server and changes its status to SHUTOFF.
408
Dong Mad12c2332016-10-19 01:36:27 -0700409 For a full list of available parameters, please refer to the official
410 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200411 https://docs.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800412 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500413 return self.action(server_id, 'os-stop', **kwargs)
414
415 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800416 """Starts a stopped server and changes its status to ACTIVE.
417
Dong Mad12c2332016-10-19 01:36:27 -0700418 For a full list of available parameters, please refer to the official
419 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200420 https://docs.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800421 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500422 return self.action(server_id, 'os-start', **kwargs)
423
424 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800425 """Attaches a volume to a server instance.
426
Dong Mad12c2332016-10-19 01:36:27 -0700427 For a full list of available parameters, please refer to the official
428 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200429 https://docs.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800430 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500431 post_body = json.dumps({'volumeAttachment': kwargs})
432 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
433 post_body)
434 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500435 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500436 self.validate_response(schema.attach_volume, resp, body)
437 return rest_client.ResponseBody(resp, body)
438
439 def update_attached_volume(self, server_id, attachment_id, **kwargs):
zhuflaa605d52019-08-21 15:17:02 +0800440 """Swaps a volume attached to an instance for another volume
441
442 For a full list of available parameters, please refer to the official
443 API reference:
444 https://docs.openstack.org/api-ref/compute/#update-a-volume-attachment
445 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500446 post_body = json.dumps({'volumeAttachment': kwargs})
447 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
448 (server_id, attachment_id),
449 post_body)
450 self.validate_response(schema.update_attached_volume, resp, body)
451 return rest_client.ResponseBody(resp, body)
452
453 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800454 """Detaches a volume from a server instance.
455
Dong Mad12c2332016-10-19 01:36:27 -0700456 For a full list of available parameters, please refer to the official
457 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200458 https://docs.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800459 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500460 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
461 (server_id, volume_id))
462 self.validate_response(schema.detach_volume, resp, body)
463 return rest_client.ResponseBody(resp, body)
464
465 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800466 """Return details about the given volume attachment.
467
Dong Mad12c2332016-10-19 01:36:27 -0700468 For a full list of available parameters, please refer to the official
469 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200470 https://docs.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800471 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500472 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
473 server_id, volume_id))
474 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500475 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500476 self.validate_response(schema.show_volume_attachment, resp, body)
477 return rest_client.ResponseBody(resp, body)
478
479 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800480 """Returns the list of volume attachments for a given instance.
481
Dong Mad12c2332016-10-19 01:36:27 -0700482 For a full list of available parameters, please refer to the official
483 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200484 https://docs.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800485 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500486 resp, body = self.get('servers/%s/os-volume_attachments' % (
487 server_id))
488 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500489 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500490 self.validate_response(schema.list_volume_attachments, resp, body)
491 return rest_client.ResponseBody(resp, body)
492
493 def add_security_group(self, server_id, **kwargs):
494 """Add a security group to the server.
495
Dong Mad12c2332016-10-19 01:36:27 -0700496 For a full list of available parameters, please refer to the official
497 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200498 https://docs.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500499 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500500 return self.action(server_id, 'addSecurityGroup', **kwargs)
501
502 def remove_security_group(self, server_id, **kwargs):
503 """Remove a security group from the server.
504
Dong Mad12c2332016-10-19 01:36:27 -0700505 For a full list of available parameters, please refer to the official
506 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200507 https://docs.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500508 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500509 return self.action(server_id, 'removeSecurityGroup', **kwargs)
510
511 def live_migrate_server(self, server_id, **kwargs):
512 """This should be called with administrator privileges.
513
Dong Mad12c2332016-10-19 01:36:27 -0700514 For a full list of available parameters, please refer to the official
515 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200516 https://docs.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500517 """
518 return self.action(server_id, 'os-migrateLive', **kwargs)
519
520 def migrate_server(self, server_id, **kwargs):
521 """Migrate a server to a new host.
522
Dong Mad12c2332016-10-19 01:36:27 -0700523 For a full list of available parameters, please refer to the official
524 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200525 https://docs.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500526 """
527 return self.action(server_id, 'migrate', **kwargs)
528
529 def lock_server(self, server_id, **kwargs):
530 """Lock the given server.
531
Dong Mad12c2332016-10-19 01:36:27 -0700532 For a full list of available parameters, please refer to the official
533 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200534 https://docs.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500535 """
536 return self.action(server_id, 'lock', **kwargs)
537
538 def unlock_server(self, server_id, **kwargs):
539 """UNlock the given server.
540
Dong Mad12c2332016-10-19 01:36:27 -0700541 For a full list of available parameters, please refer to the official
542 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200543 https://docs.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500544 """
545 return self.action(server_id, 'unlock', **kwargs)
546
547 def suspend_server(self, server_id, **kwargs):
548 """Suspend the provided server.
549
Dong Mad12c2332016-10-19 01:36:27 -0700550 For a full list of available parameters, please refer to the official
551 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200552 https://docs.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500553 """
554 return self.action(server_id, 'suspend', **kwargs)
555
556 def resume_server(self, server_id, **kwargs):
557 """Un-suspend the provided server.
558
Dong Mad12c2332016-10-19 01:36:27 -0700559 For a full list of available parameters, please refer to the official
560 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200561 https://docs.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500562 """
563 return self.action(server_id, 'resume', **kwargs)
564
565 def pause_server(self, server_id, **kwargs):
566 """Pause the provided server.
567
Dong Mad12c2332016-10-19 01:36:27 -0700568 For a full list of available parameters, please refer to the official
569 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200570 https://docs.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500571 """
572 return self.action(server_id, 'pause', **kwargs)
573
574 def unpause_server(self, server_id, **kwargs):
575 """Un-pause the provided server.
576
Dong Mad12c2332016-10-19 01:36:27 -0700577 For a full list of available parameters, please refer to the official
578 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200579 https://docs.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500580 """
581 return self.action(server_id, 'unpause', **kwargs)
582
583 def reset_state(self, server_id, **kwargs):
584 """Reset the state of a server to active/error.
585
Dong Mad12c2332016-10-19 01:36:27 -0700586 For a full list of available parameters, please refer to the official
587 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200588 https://docs.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500589 """
590 return self.action(server_id, 'os-resetState', **kwargs)
591
592 def shelve_server(self, server_id, **kwargs):
593 """Shelve the provided server.
594
Dong Mad12c2332016-10-19 01:36:27 -0700595 For a full list of available parameters, please refer to the official
596 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200597 https://docs.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500598 """
599 return self.action(server_id, 'shelve', **kwargs)
600
601 def unshelve_server(self, server_id, **kwargs):
602 """Un-shelve the provided server.
603
Dong Mad12c2332016-10-19 01:36:27 -0700604 For a full list of available parameters, please refer to the official
605 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200606 https://docs.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500607 """
608 return self.action(server_id, 'unshelve', **kwargs)
609
610 def shelve_offload_server(self, server_id, **kwargs):
611 """Shelve-offload the provided server.
612
Dong Mad12c2332016-10-19 01:36:27 -0700613 For a full list of available parameters, please refer to the official
614 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200615 https://docs.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500616 """
617 return self.action(server_id, 'shelveOffload', **kwargs)
618
619 def get_console_output(self, server_id, **kwargs):
620 """Get console output.
621
Dong Mad12c2332016-10-19 01:36:27 -0700622 For a full list of available parameters, please refer to the official
623 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200624 https://docs.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500625 """
626 return self.action(server_id, 'os-getConsoleOutput',
627 schema.get_console_output, **kwargs)
628
Markus Zoeller69d58b82017-02-17 10:09:22 +0100629 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
630 """Get a remote console.
631
632 For a full list of available parameters, please refer to the official
633 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200634 https://docs.openstack.org/api-ref/compute/#create-remote-console
Markus Zoeller69d58b82017-02-17 10:09:22 +0100635 """
636 param = {
637 'remote_console': {
638 'type': console_type,
639 'protocol': protocol,
640 }
641 }
642 post_body = json.dumps(param)
643 resp, body = self.post("servers/%s/remote-consoles" % server_id,
644 post_body)
645 body = json.loads(body)
646 schema = self.get_schema(self.schema_versions_info)
647 self.validate_response(schema.get_remote_consoles, resp, body)
648 return rest_client.ResponseBody(resp, body)
649
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500650 def list_virtual_interfaces(self, server_id):
651 """List the virtual interfaces used in an instance."""
652 resp, body = self.get('/'.join(['servers', server_id,
afazekas40fcb9b2019-03-08 11:25:11 +0100653 'os-virtual-interfaces']))
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500654 body = json.loads(body)
655 self.validate_response(schema.list_virtual_interfaces, resp, body)
656 return rest_client.ResponseBody(resp, body)
657
658 def rescue_server(self, server_id, **kwargs):
659 """Rescue the provided server.
660
Dong Mad12c2332016-10-19 01:36:27 -0700661 For a full list of available parameters, please refer to the official
662 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200663 https://docs.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500664 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100665 if self.enable_instance_password:
666 rescue_schema = schema.rescue_server_with_admin_pass
667 else:
668 rescue_schema = schema.rescue_server
669 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500670
671 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800672 """Unrescue the provided server.
673
Dong Mad12c2332016-10-19 01:36:27 -0700674 For a full list of available parameters, please refer to the official
675 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200676 https://docs.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800677 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500678 return self.action(server_id, 'unrescue')
679
680 def show_server_diagnostics(self, server_id):
681 """Get the usage data for a server."""
682 resp, body = self.get("servers/%s/diagnostics" % server_id)
Sergey Nikitin0cb4f222017-02-03 13:16:33 +0400683 body = json.loads(body)
684 schema = self.get_schema(self.schema_versions_info)
685 self.validate_response(schema.show_server_diagnostics, resp, body)
686 return rest_client.ResponseBody(resp, body)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500687
688 def list_instance_actions(self, server_id):
689 """List the provided server action."""
690 resp, body = self.get("servers/%s/os-instance-actions" %
691 server_id)
692 body = json.loads(body)
693 self.validate_response(schema.list_instance_actions, resp, body)
694 return rest_client.ResponseBody(resp, body)
695
696 def show_instance_action(self, server_id, request_id):
697 """Returns the action details of the provided server."""
698 resp, body = self.get("servers/%s/os-instance-actions/%s" %
699 (server_id, request_id))
700 body = json.loads(body)
701 self.validate_response(schema.show_instance_action, resp, body)
702 return rest_client.ResponseBody(resp, body)
703
704 def force_delete_server(self, server_id, **kwargs):
705 """Force delete a server.
706
Dong Mad12c2332016-10-19 01:36:27 -0700707 For a full list of available parameters, please refer to the official
708 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200709 https://docs.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500710 """
711 return self.action(server_id, 'forceDelete', **kwargs)
712
713 def restore_soft_deleted_server(self, server_id, **kwargs):
714 """Restore a soft-deleted server.
715
Dong Mad12c2332016-10-19 01:36:27 -0700716 For a full list of available parameters, please refer to the official
717 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200718 https://docs.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500719 """
720 return self.action(server_id, 'restore', **kwargs)
721
722 def reset_network(self, server_id, **kwargs):
723 """Reset the Network of a server.
724
Dong Mad12c2332016-10-19 01:36:27 -0700725 For a full list of available parameters, please refer to the official
726 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200727 https://docs.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500728 """
729 return self.action(server_id, 'resetNetwork', **kwargs)
730
731 def inject_network_info(self, server_id, **kwargs):
732 """Inject the Network Info into server.
733
Dong Mad12c2332016-10-19 01:36:27 -0700734 For a full list of available parameters, please refer to the official
735 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200736 https://docs.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500737 """
738 return self.action(server_id, 'injectNetworkInfo', **kwargs)
739
740 def get_vnc_console(self, server_id, **kwargs):
741 """Get URL of VNC console.
742
Dong Mad12c2332016-10-19 01:36:27 -0700743 For a full list of available parameters, please refer to the official
744 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200745 https://docs.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500746 """
747 return self.action(server_id, "os-getVNCConsole",
748 schema.get_vnc_console, **kwargs)
749
750 def add_fixed_ip(self, server_id, **kwargs):
751 """Add a fixed IP to server instance.
752
Dong Mad12c2332016-10-19 01:36:27 -0700753 For a full list of available parameters, please refer to the official
754 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200755 https://docs.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500756 """
757 return self.action(server_id, 'addFixedIp', **kwargs)
758
759 def remove_fixed_ip(self, server_id, **kwargs):
760 """Remove input fixed IP from input server instance.
761
Dong Mad12c2332016-10-19 01:36:27 -0700762 For a full list of available parameters, please refer to the official
763 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200764 https://docs.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500765 """
766 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800767
768 def list_security_groups_by_server(self, server_id):
769 """Lists security groups for a server.
770
771 For a full list of available parameters, please refer to the official
772 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200773 https://docs.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800774 """
775 resp, body = self.get("servers/%s/os-security-groups" % server_id)
776 body = json.loads(body)
777 self.validate_response(security_groups_schema.list_security_groups,
778 resp, body)
779 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500780
781 def list_tags(self, server_id):
782 """Lists all tags for a server.
783
784 For a full list of available parameters, please refer to the official
785 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200786 https://docs.openstack.org/api-ref/compute/#list-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500787 """
788 url = 'servers/%s/tags' % server_id
789 resp, body = self.get(url)
790 body = json.loads(body)
791 schema = self.get_schema(self.schema_versions_info)
792 self.validate_response(schema.list_tags, resp, body)
793 return rest_client.ResponseBody(resp, body)
794
795 def update_all_tags(self, server_id, tags):
796 """Replaces all tags on specified server with the new set of tags.
797
798 For a full list of available parameters, please refer to the official
799 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200800 https://docs.openstack.org/api-ref/compute/#replace-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500801
802 :param tags: List of tags to replace current server tags with.
803 """
804 url = 'servers/%s/tags' % server_id
805 put_body = {'tags': tags}
806 resp, body = self.put(url, json.dumps(put_body))
807 body = json.loads(body)
808 schema = self.get_schema(self.schema_versions_info)
809 self.validate_response(schema.update_all_tags, resp, body)
810 return rest_client.ResponseBody(resp, body)
811
812 def delete_all_tags(self, server_id):
813 """Deletes all tags from the specified server.
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/#delete-all-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500818 """
819 url = 'servers/%s/tags' % server_id
820 resp, body = self.delete(url)
821 schema = self.get_schema(self.schema_versions_info)
822 self.validate_response(schema.delete_all_tags, resp, body)
823 return rest_client.ResponseBody(resp, body)
824
825 def check_tag_existence(self, server_id, tag):
826 """Checks tag existence on the server.
827
828 For a full list of available parameters, please refer to the official
829 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200830 https://docs.openstack.org/api-ref/compute/#check-tag-existence
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500831
832 :param tag: Check for existence of tag on specified server.
833 """
834 url = 'servers/%s/tags/%s' % (server_id, tag)
835 resp, body = self.get(url)
836 schema = self.get_schema(self.schema_versions_info)
837 self.validate_response(schema.check_tag_existence, resp, body)
838 return rest_client.ResponseBody(resp, body)
839
840 def update_tag(self, server_id, tag):
841 """Adds a single tag to the server if server has no specified tag.
842
843 For a full list of available parameters, please refer to the official
844 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200845 https://docs.openstack.org/api-ref/compute/#add-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500846
847 :param tag: Tag to be added to the specified server.
848 """
849 url = 'servers/%s/tags/%s' % (server_id, tag)
850 resp, body = self.put(url, None)
851 schema = self.get_schema(self.schema_versions_info)
852 self.validate_response(schema.update_tag, resp, body)
853 return rest_client.ResponseBody(resp, body)
854
855 def delete_tag(self, server_id, tag):
856 """Deletes a single tag from the specified server.
857
858 For a full list of available parameters, please refer to the official
859 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200860 https://docs.openstack.org/api-ref/compute/#delete-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500861
862 :param tag: Tag to be removed from the specified server.
863 """
864 url = 'servers/%s/tags/%s' % (server_id, tag)
865 resp, body = self.delete(url)
866 schema = self.get_schema(self.schema_versions_info)
867 self.validate_response(schema.delete_tag, resp, body)
868 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530869
870 def evacuate_server(self, server_id, **kwargs):
871 """Evacuate the given server.
872
873 For a full list of available parameters, please refer to the official
874 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200875 https://docs.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
raiesmh0814158c92017-03-21 14:23:15 +0530876 """
877 if self.enable_instance_password:
878 evacuate_schema = schema.evacuate_server_with_admin_pass
879 else:
880 evacuate_schema = schema.evacuate_server
881
882 return self.action(server_id, 'evacuate',
883 evacuate_schema,
884 **kwargs)