blob: 1b93f91abfe041943eb7737003ad139e8a87b6c1 [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
Ghanshyam Mann3ee9f212021-12-16 16:55:14 -060030from tempest.lib.api_schema.response.compute.v2_45 import servers as schemav245
Sergey Nikitin8654e5b2017-06-04 22:09:56 +040031from tempest.lib.api_schema.response.compute.v2_47 import servers as schemav247
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040032from tempest.lib.api_schema.response.compute.v2_48 import servers as schemav248
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020033from tempest.lib.api_schema.response.compute.v2_51 import servers as schemav251
ghanshyam85a4b0a2018-04-24 11:09:25 +030034from tempest.lib.api_schema.response.compute.v2_54 import servers as schemav254
Ghanshyamd5394652018-04-26 07:59:32 +000035from tempest.lib.api_schema.response.compute.v2_57 import servers as schemav257
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020036from tempest.lib.api_schema.response.compute.v2_58 import servers as schemav258
Markus Zoeller69d58b82017-02-17 10:09:22 +010037from tempest.lib.api_schema.response.compute.v2_6 import servers as schemav26
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020038from tempest.lib.api_schema.response.compute.v2_62 import servers as schemav262
Jackie Truong1fa44642017-10-25 16:42:08 -040039from tempest.lib.api_schema.response.compute.v2_63 import servers as schemav263
Matt Riedemannb9b6e372019-03-02 12:23:14 -050040from tempest.lib.api_schema.response.compute.v2_70 import servers as schemav270
Matt Riedemann0b14b1e2019-03-02 12:38:10 -050041from tempest.lib.api_schema.response.compute.v2_71 import servers as schemav271
Lee Yarwood803b4a72020-01-07 17:10:29 +000042from tempest.lib.api_schema.response.compute.v2_73 import servers as schemav273
Ghanshyam Mann1a65c4f2022-03-03 22:03:26 -060043from tempest.lib.api_schema.response.compute.v2_75 import servers as schemav275
zhufle9ed6092020-06-16 16:36:59 +080044from tempest.lib.api_schema.response.compute.v2_79 import servers as schemav279
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040045from tempest.lib.api_schema.response.compute.v2_8 import servers as schemav28
Amit Uniyal43cc3132024-05-17 02:04:34 -040046from tempest.lib.api_schema.response.compute.v2_89 import servers as schemav289
lanoux2746ba02016-03-16 17:41:01 +090047from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050048from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090049from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050050
51
Ghanshyamee9af302016-02-25 06:12:43 +090052class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080053 """Service client for the resource /servers"""
54
lanoux2746ba02016-03-16 17:41:01 +090055 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080056 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010057 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040058 {'min': '2.6', 'max': '2.7', 'schema': schemav26},
59 {'min': '2.8', 'max': '2.8', 'schema': schemav28},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080060 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
61 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040062 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
Ghanshyam Mann3ee9f212021-12-16 16:55:14 -060063 {'min': '2.26', 'max': '2.44', 'schema': schemav226},
64 {'min': '2.45', 'max': '2.46', 'schema': schemav245},
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040065 {'min': '2.47', 'max': '2.47', 'schema': schemav247},
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020066 {'min': '2.48', 'max': '2.50', 'schema': schemav248},
67 {'min': '2.51', 'max': '2.53', 'schema': schemav251},
Ghanshyamd5394652018-04-26 07:59:32 +000068 {'min': '2.54', 'max': '2.56', 'schema': schemav254},
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020069 {'min': '2.57', 'max': '2.57', 'schema': schemav257},
70 {'min': '2.58', 'max': '2.61', 'schema': schemav258},
71 {'min': '2.62', 'max': '2.62', 'schema': schemav262},
Matt Riedemannb9b6e372019-03-02 12:23:14 -050072 {'min': '2.63', 'max': '2.69', 'schema': schemav263},
Matt Riedemann0b14b1e2019-03-02 12:38:10 -050073 {'min': '2.70', 'max': '2.70', 'schema': schemav270},
Lee Yarwood803b4a72020-01-07 17:10:29 +000074 {'min': '2.71', 'max': '2.72', 'schema': schemav271},
Ghanshyam Mann1a65c4f2022-03-03 22:03:26 -060075 {'min': '2.73', 'max': '2.74', 'schema': schemav273},
76 {'min': '2.75', 'max': '2.78', 'schema': schemav275},
Amit Uniyal43cc3132024-05-17 02:04:34 -040077 {'min': '2.79', 'max': '2.88', 'schema': schemav279},
78 {'min': '2.89', 'max': None, 'schema': schemav289}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050079
80 def __init__(self, auth_provider, service, region,
81 enable_instance_password=True, **kwargs):
82 super(ServersClient, self).__init__(
83 auth_provider, service, region, **kwargs)
84 self.enable_instance_password = enable_instance_password
85
86 def create_server(self, **kwargs):
87 """Create server.
88
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070089 For a full list of available parameters, please refer to the official
90 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +020091 https://docs.openstack.org/api-ref/compute/#create-server
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070092
93 :param name: Server name
94 :param imageRef: Image reference (UUID)
95 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050096
97 Most parameters except the following are passed to the API without
98 any changes.
99 :param disk_config: The name is changed to OS-DCF:diskConfig
100 :param scheduler_hints: The name is changed to os:scheduler_hints and
101 the parameter is set in the same level as the parameter 'server'.
102 """
103 body = copy.deepcopy(kwargs)
104 if body.get('disk_config'):
105 body['OS-DCF:diskConfig'] = body.pop('disk_config')
106
107 hints = None
108 if body.get('scheduler_hints'):
109 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
110
111 post_body = {'server': body}
112
113 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +0200114 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500115
116 post_body = json.dumps(post_body)
117 resp, body = self.post('servers', post_body)
118
119 body = json.loads(body)
120 # NOTE(maurosr): this deals with the case of multiple server create
121 # with return reservation id set True
122 if 'reservation_id' in body:
123 return rest_client.ResponseBody(resp, body)
124 if self.enable_instance_password:
125 create_schema = schema.create_server_with_admin_pass
126 else:
127 create_schema = schema.create_server
128 self.validate_response(create_schema, resp, body)
129 return rest_client.ResponseBody(resp, body)
130
131 def update_server(self, server_id, **kwargs):
132 """Update server.
133
Dong Mad12c2332016-10-19 01:36:27 -0700134 For a full list of available parameters, please refer to the official
135 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200136 https://docs.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500137
138 Most parameters except the following are passed to the API without
139 any changes.
140 :param disk_config: The name is changed to OS-DCF:diskConfig
141 """
ghanshyam910022e2016-12-21 13:32:57 +0900142 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500143 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
144
145 post_body = json.dumps({'server': kwargs})
146 resp, body = self.put("servers/%s" % server_id, post_body)
147 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900148 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500149 self.validate_response(schema.update_server, resp, body)
150 return rest_client.ResponseBody(resp, body)
151
152 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800153 """Get server details.
154
Dong Mad12c2332016-10-19 01:36:27 -0700155 For a full list of available parameters, please refer to the official
156 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200157 https://docs.openstack.org/api-ref/compute/#show-server-details
Lv Fumei7e326332016-07-08 15:18:03 +0800158 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500159 resp, body = self.get("servers/%s" % server_id)
160 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900161 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500162 self.validate_response(schema.get_server, resp, body)
163 return rest_client.ResponseBody(resp, body)
164
165 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800166 """Delete server.
167
Dong Mad12c2332016-10-19 01:36:27 -0700168 For a full list of available parameters, please refer to the official
169 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200170 https://docs.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800171 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500172 resp, body = self.delete("servers/%s" % server_id)
173 self.validate_response(schema.delete_server, resp, body)
174 return rest_client.ResponseBody(resp, body)
175
176 def list_servers(self, detail=False, **params):
177 """List servers.
178
Dong Mad12c2332016-10-19 01:36:27 -0700179 For a full list of available parameters, please refer to the official
180 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200181 https://docs.openstack.org/api-ref/compute/#list-servers
182 https://docs.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500183 """
184
185 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900186 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500187 if detail:
188 url += '/detail'
189 _schema = schema.list_servers_detail
ghanshyama8ace722018-04-20 08:45:10 +0000190 else:
191 _schema = schema.list_servers
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500192 if params:
193 url += '?%s' % urllib.urlencode(params)
194
195 resp, body = self.get(url)
196 body = json.loads(body)
197 self.validate_response(_schema, resp, body)
198 return rest_client.ResponseBody(resp, body)
199
200 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800201 """Lists all addresses for a server.
202
Dong Mad12c2332016-10-19 01:36:27 -0700203 For a full list of available parameters, please refer to the official
204 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200205 https://docs.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800206 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500207 resp, body = self.get("servers/%s/ips" % server_id)
208 body = json.loads(body)
209 self.validate_response(schema.list_addresses, resp, body)
210 return rest_client.ResponseBody(resp, body)
211
212 def list_addresses_by_network(self, server_id, network_id):
213 """Lists all addresses of a specific network type for a server."""
214 resp, body = self.get("servers/%s/ips/%s" %
215 (server_id, network_id))
216 body = json.loads(body)
217 self.validate_response(schema.list_addresses_by_network, resp, body)
218 return rest_client.ResponseBody(resp, body)
219
220 def action(self, server_id, action_name,
221 schema=schema.server_actions_common_schema,
222 **kwargs):
Ghanshyamcbf480f2019-07-11 11:53:57 +0000223 if 'body' in kwargs:
224 post_body = json.dumps(kwargs['body'])
225 else:
226 post_body = json.dumps({action_name: kwargs})
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500227 resp, body = self.post('servers/%s/action' % server_id,
228 post_body)
229 if body:
230 body = json.loads(body)
zhuflbe86aec2020-02-25 16:56:51 +0800231 else:
232 if isinstance(body, bytes):
233 body = body.decode('utf-8')
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500234 self.validate_response(schema, resp, body)
235 return rest_client.ResponseBody(resp, body)
236
237 def create_backup(self, server_id, **kwargs):
238 """Backup a server instance.
239
Dong Mad12c2332016-10-19 01:36:27 -0700240 For a full list of available parameters, please refer to the official
241 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200242 https://docs.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500243 """
Ghanshyam Mann3ee9f212021-12-16 16:55:14 -0600244 schema = self.get_schema(self.schema_versions_info)
245 return self.action(server_id, "createBackup",
246 schema.create_backup, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500247
248 def change_password(self, server_id, **kwargs):
249 """Change the root password for the server.
250
Dong Mad12c2332016-10-19 01:36:27 -0700251 For a full list of available parameters, please refer to the official
252 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200253 https://docs.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500254 """
255 return self.action(server_id, 'changePassword', **kwargs)
256
257 def show_password(self, server_id):
258 resp, body = self.get("servers/%s/os-server-password" %
259 server_id)
260 body = json.loads(body)
261 self.validate_response(schema.show_password, resp, body)
262 return rest_client.ResponseBody(resp, body)
263
264 def delete_password(self, server_id):
265 """Removes the encrypted server password from the metadata server
266
267 Note that this does not actually change the instance server
268 password.
269 """
270 resp, body = self.delete("servers/%s/os-server-password" %
271 server_id)
272 self.validate_response(schema.server_actions_delete_password,
273 resp, body)
274 return rest_client.ResponseBody(resp, body)
275
276 def reboot_server(self, server_id, **kwargs):
277 """Reboot a server.
278
Dong Mad12c2332016-10-19 01:36:27 -0700279 For a full list of available parameters, please refer to the official
280 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200281 https://docs.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500282 """
283 return self.action(server_id, 'reboot', **kwargs)
284
285 def rebuild_server(self, server_id, image_ref, **kwargs):
286 """Rebuild a server with a new image.
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/#rebuild-server-rebuild-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['imageRef'] = image_ref
297 if 'disk_config' in kwargs:
298 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900299 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500300 if self.enable_instance_password:
301 rebuild_schema = schema.rebuild_server_with_admin_pass
302 else:
303 rebuild_schema = schema.rebuild_server
304 return self.action(server_id, 'rebuild',
305 rebuild_schema, **kwargs)
306
307 def resize_server(self, server_id, flavor_ref, **kwargs):
308 """Change the flavor of a server.
309
Dong Mad12c2332016-10-19 01:36:27 -0700310 For a full list of available parameters, please refer to the official
311 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200312 https://docs.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500313
314 Most parameters except the following are passed to the API without
315 any changes.
316 :param disk_config: The name is changed to OS-DCF:diskConfig
317 """
318 kwargs['flavorRef'] = flavor_ref
319 if 'disk_config' in kwargs:
320 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
321 return self.action(server_id, 'resize', **kwargs)
322
323 def confirm_resize_server(self, server_id, **kwargs):
324 """Confirm the flavor change for a server.
325
Dong Mad12c2332016-10-19 01:36:27 -0700326 For a full list of available parameters, please refer to the official
327 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200328 https://docs.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500329 """
330 return self.action(server_id, 'confirmResize',
331 schema.server_actions_confirm_resize,
332 **kwargs)
333
334 def revert_resize_server(self, server_id, **kwargs):
335 """Revert a server back to its original flavor.
336
Dong Mad12c2332016-10-19 01:36:27 -0700337 For a full list of available parameters, please refer to the official
338 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200339 https://docs.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500340 """
341 return self.action(server_id, 'revertResize', **kwargs)
342
343 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800344 """Lists all metadata for a server.
345
Dong Mad12c2332016-10-19 01:36:27 -0700346 For a full list of available parameters, please refer to the official
347 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200348 https://docs.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800349 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500350 resp, body = self.get("servers/%s/metadata" % server_id)
351 body = json.loads(body)
352 self.validate_response(schema.list_server_metadata, resp, body)
353 return rest_client.ResponseBody(resp, body)
354
355 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800356 """Sets one or more metadata items for a server.
357
Dong Mad12c2332016-10-19 01:36:27 -0700358 For a full list of available parameters, please refer to the official
359 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200360 https://docs.openstack.org/api-ref/compute/#replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800361 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500362 if no_metadata_field:
363 post_body = ""
364 else:
365 post_body = json.dumps({'metadata': meta})
366 resp, body = self.put('servers/%s/metadata' % server_id,
367 post_body)
368 body = json.loads(body)
369 self.validate_response(schema.set_server_metadata, resp, body)
370 return rest_client.ResponseBody(resp, body)
371
372 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800373 """Updates one or more metadata items for a server.
374
Dong Mad12c2332016-10-19 01:36:27 -0700375 For a full list of available parameters, please refer to the official
376 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200377 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800378 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500379 post_body = json.dumps({'metadata': meta})
380 resp, body = self.post('servers/%s/metadata' % server_id,
381 post_body)
382 body = json.loads(body)
383 self.validate_response(schema.update_server_metadata,
384 resp, body)
385 return rest_client.ResponseBody(resp, body)
386
387 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800388 """Shows details for a metadata item, by key, for a server.
389
Dong Mad12c2332016-10-19 01:36:27 -0700390 For a full list of available parameters, please refer to the official
391 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200392 https://docs.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800393 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500394 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
395 body = json.loads(body)
396 self.validate_response(schema.set_show_server_metadata_item,
397 resp, body)
398 return rest_client.ResponseBody(resp, body)
399
400 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800401 """Sets a metadata item, by key, for a server.
402
Dong Mad12c2332016-10-19 01:36:27 -0700403 For a full list of available parameters, please refer to the official
404 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200405 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800406 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500407 post_body = json.dumps({'meta': meta})
408 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
409 post_body)
410 body = json.loads(body)
411 self.validate_response(schema.set_show_server_metadata_item,
412 resp, body)
413 return rest_client.ResponseBody(resp, body)
414
415 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800416 """Deletes a metadata item, by key, from a server.
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/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800421 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500422 resp, body = self.delete("servers/%s/metadata/%s" %
423 (server_id, key))
424 self.validate_response(schema.delete_server_metadata_item,
425 resp, body)
426 return rest_client.ResponseBody(resp, body)
427
428 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800429 """Stops a running server and changes its status to SHUTOFF.
430
Dong Mad12c2332016-10-19 01:36:27 -0700431 For a full list of available parameters, please refer to the official
432 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200433 https://docs.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800434 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500435 return self.action(server_id, 'os-stop', **kwargs)
436
437 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800438 """Starts a stopped server and changes its status to ACTIVE.
439
Dong Mad12c2332016-10-19 01:36:27 -0700440 For a full list of available parameters, please refer to the official
441 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200442 https://docs.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800443 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500444 return self.action(server_id, 'os-start', **kwargs)
445
446 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800447 """Attaches a volume to a server instance.
448
Dong Mad12c2332016-10-19 01:36:27 -0700449 For a full list of available parameters, please refer to the official
450 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200451 https://docs.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800452 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500453 post_body = json.dumps({'volumeAttachment': kwargs})
454 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
455 post_body)
456 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500457 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500458 self.validate_response(schema.attach_volume, resp, body)
459 return rest_client.ResponseBody(resp, body)
460
461 def update_attached_volume(self, server_id, attachment_id, **kwargs):
zhuflaa605d52019-08-21 15:17:02 +0800462 """Swaps a volume attached to an instance for another volume
463
464 For a full list of available parameters, please refer to the official
465 API reference:
466 https://docs.openstack.org/api-ref/compute/#update-a-volume-attachment
467 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500468 post_body = json.dumps({'volumeAttachment': kwargs})
469 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
470 (server_id, attachment_id),
471 post_body)
472 self.validate_response(schema.update_attached_volume, resp, body)
473 return rest_client.ResponseBody(resp, body)
474
475 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800476 """Detaches a volume from a server instance.
477
Dong Mad12c2332016-10-19 01:36:27 -0700478 For a full list of available parameters, please refer to the official
479 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200480 https://docs.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800481 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500482 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
483 (server_id, volume_id))
484 self.validate_response(schema.detach_volume, resp, body)
485 return rest_client.ResponseBody(resp, body)
486
487 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800488 """Return details about the given volume attachment.
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/#show-a-detail-of-a-volume-attachment
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/%s' % (
495 server_id, volume_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.show_volume_attachment, resp, body)
499 return rest_client.ResponseBody(resp, body)
500
501 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800502 """Returns the list of volume attachments for a given instance.
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/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800507 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500508 resp, body = self.get('servers/%s/os-volume_attachments' % (
509 server_id))
510 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500511 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500512 self.validate_response(schema.list_volume_attachments, resp, body)
513 return rest_client.ResponseBody(resp, body)
514
515 def add_security_group(self, server_id, **kwargs):
516 """Add a security group to the server.
517
Dong Mad12c2332016-10-19 01:36:27 -0700518 For a full list of available parameters, please refer to the official
519 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200520 https://docs.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500521 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500522 return self.action(server_id, 'addSecurityGroup', **kwargs)
523
524 def remove_security_group(self, server_id, **kwargs):
525 """Remove a security group from the server.
526
Dong Mad12c2332016-10-19 01:36:27 -0700527 For a full list of available parameters, please refer to the official
528 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200529 https://docs.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500530 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500531 return self.action(server_id, 'removeSecurityGroup', **kwargs)
532
533 def live_migrate_server(self, server_id, **kwargs):
534 """This should be called with administrator privileges.
535
Dong Mad12c2332016-10-19 01:36:27 -0700536 For a full list of available parameters, please refer to the official
537 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200538 https://docs.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500539 """
540 return self.action(server_id, 'os-migrateLive', **kwargs)
541
542 def migrate_server(self, server_id, **kwargs):
543 """Migrate a server to a new host.
544
Dong Mad12c2332016-10-19 01:36:27 -0700545 For a full list of available parameters, please refer to the official
546 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200547 https://docs.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500548 """
549 return self.action(server_id, 'migrate', **kwargs)
550
551 def lock_server(self, server_id, **kwargs):
552 """Lock the given server.
553
Dong Mad12c2332016-10-19 01:36:27 -0700554 For a full list of available parameters, please refer to the official
555 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200556 https://docs.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500557 """
558 return self.action(server_id, 'lock', **kwargs)
559
560 def unlock_server(self, server_id, **kwargs):
561 """UNlock the given server.
562
Dong Mad12c2332016-10-19 01:36:27 -0700563 For a full list of available parameters, please refer to the official
564 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200565 https://docs.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500566 """
567 return self.action(server_id, 'unlock', **kwargs)
568
569 def suspend_server(self, server_id, **kwargs):
570 """Suspend the provided server.
571
Dong Mad12c2332016-10-19 01:36:27 -0700572 For a full list of available parameters, please refer to the official
573 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200574 https://docs.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500575 """
576 return self.action(server_id, 'suspend', **kwargs)
577
578 def resume_server(self, server_id, **kwargs):
579 """Un-suspend the provided server.
580
Dong Mad12c2332016-10-19 01:36:27 -0700581 For a full list of available parameters, please refer to the official
582 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200583 https://docs.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500584 """
585 return self.action(server_id, 'resume', **kwargs)
586
587 def pause_server(self, server_id, **kwargs):
588 """Pause the provided server.
589
Dong Mad12c2332016-10-19 01:36:27 -0700590 For a full list of available parameters, please refer to the official
591 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200592 https://docs.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500593 """
594 return self.action(server_id, 'pause', **kwargs)
595
596 def unpause_server(self, server_id, **kwargs):
597 """Un-pause the provided server.
598
Dong Mad12c2332016-10-19 01:36:27 -0700599 For a full list of available parameters, please refer to the official
600 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200601 https://docs.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500602 """
603 return self.action(server_id, 'unpause', **kwargs)
604
605 def reset_state(self, server_id, **kwargs):
606 """Reset the state of a server to active/error.
607
Dong Mad12c2332016-10-19 01:36:27 -0700608 For a full list of available parameters, please refer to the official
609 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200610 https://docs.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500611 """
612 return self.action(server_id, 'os-resetState', **kwargs)
613
614 def shelve_server(self, server_id, **kwargs):
615 """Shelve the provided server.
616
Dong Mad12c2332016-10-19 01:36:27 -0700617 For a full list of available parameters, please refer to the official
618 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200619 https://docs.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500620 """
621 return self.action(server_id, 'shelve', **kwargs)
622
623 def unshelve_server(self, server_id, **kwargs):
624 """Un-shelve the provided server.
625
Dong Mad12c2332016-10-19 01:36:27 -0700626 For a full list of available parameters, please refer to the official
627 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200628 https://docs.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500629 """
Ghanshyamcbf480f2019-07-11 11:53:57 +0000630 # NOTE(gmann): pass None as request body if nothing is requested.
631 # Nova started the request body check since 2.77 microversion and only
632 # accept AZ or None as valid req body and reject the empty dict {}.
633 # Before 2.77 microverison anything is valid body as Nova does not
634 # check the request body but as per api-ref None is valid request
635 # body to pass so we do not need to check the requested microversion
636 # here and always default req body to None.
637 if not kwargs:
638 kwargs['body'] = {'unshelve': None}
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500639 return self.action(server_id, 'unshelve', **kwargs)
640
641 def shelve_offload_server(self, server_id, **kwargs):
642 """Shelve-offload the provided server.
643
Dong Mad12c2332016-10-19 01:36:27 -0700644 For a full list of available parameters, please refer to the official
645 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200646 https://docs.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500647 """
648 return self.action(server_id, 'shelveOffload', **kwargs)
649
650 def get_console_output(self, server_id, **kwargs):
651 """Get console output.
652
Dong Mad12c2332016-10-19 01:36:27 -0700653 For a full list of available parameters, please refer to the official
654 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200655 https://docs.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500656 """
657 return self.action(server_id, 'os-getConsoleOutput',
658 schema.get_console_output, **kwargs)
659
Markus Zoeller69d58b82017-02-17 10:09:22 +0100660 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
661 """Get a remote console.
662
663 For a full list of available parameters, please refer to the official
664 API reference:
zhufl35c2c122020-10-28 17:07:16 +0800665 https://docs.openstack.org/api-ref/compute/#create-console
Markus Zoeller69d58b82017-02-17 10:09:22 +0100666 """
667 param = {
668 'remote_console': {
669 'type': console_type,
670 'protocol': protocol,
671 }
672 }
673 post_body = json.dumps(param)
674 resp, body = self.post("servers/%s/remote-consoles" % server_id,
675 post_body)
676 body = json.loads(body)
677 schema = self.get_schema(self.schema_versions_info)
678 self.validate_response(schema.get_remote_consoles, resp, body)
679 return rest_client.ResponseBody(resp, body)
680
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500681 def rescue_server(self, server_id, **kwargs):
682 """Rescue the provided server.
683
Dong Mad12c2332016-10-19 01:36:27 -0700684 For a full list of available parameters, please refer to the official
685 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200686 https://docs.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500687 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100688 if self.enable_instance_password:
689 rescue_schema = schema.rescue_server_with_admin_pass
690 else:
691 rescue_schema = schema.rescue_server
692 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500693
694 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800695 """Unrescue the provided server.
696
Dong Mad12c2332016-10-19 01:36:27 -0700697 For a full list of available parameters, please refer to the official
698 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200699 https://docs.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800700 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500701 return self.action(server_id, 'unrescue')
702
703 def show_server_diagnostics(self, server_id):
704 """Get the usage data for a server."""
705 resp, body = self.get("servers/%s/diagnostics" % server_id)
Sergey Nikitin0cb4f222017-02-03 13:16:33 +0400706 body = json.loads(body)
707 schema = self.get_schema(self.schema_versions_info)
708 self.validate_response(schema.show_server_diagnostics, resp, body)
709 return rest_client.ResponseBody(resp, body)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500710
711 def list_instance_actions(self, server_id):
712 """List the provided server action."""
713 resp, body = self.get("servers/%s/os-instance-actions" %
714 server_id)
715 body = json.loads(body)
716 self.validate_response(schema.list_instance_actions, resp, body)
717 return rest_client.ResponseBody(resp, body)
718
719 def show_instance_action(self, server_id, request_id):
720 """Returns the action details of the provided server."""
721 resp, body = self.get("servers/%s/os-instance-actions/%s" %
722 (server_id, request_id))
723 body = json.loads(body)
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +0200724 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500725 self.validate_response(schema.show_instance_action, resp, body)
726 return rest_client.ResponseBody(resp, body)
727
728 def force_delete_server(self, server_id, **kwargs):
729 """Force delete a server.
730
Dong Mad12c2332016-10-19 01:36:27 -0700731 For a full list of available parameters, please refer to the official
732 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200733 https://docs.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500734 """
735 return self.action(server_id, 'forceDelete', **kwargs)
736
737 def restore_soft_deleted_server(self, server_id, **kwargs):
738 """Restore a soft-deleted server.
739
Dong Mad12c2332016-10-19 01:36:27 -0700740 For a full list of available parameters, please refer to the official
741 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200742 https://docs.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500743 """
744 return self.action(server_id, 'restore', **kwargs)
745
746 def reset_network(self, server_id, **kwargs):
747 """Reset the Network of a server.
748
Dong Mad12c2332016-10-19 01:36:27 -0700749 For a full list of available parameters, please refer to the official
750 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200751 https://docs.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500752 """
753 return self.action(server_id, 'resetNetwork', **kwargs)
754
755 def inject_network_info(self, server_id, **kwargs):
756 """Inject the Network Info into server.
757
Dong Mad12c2332016-10-19 01:36:27 -0700758 For a full list of available parameters, please refer to the official
759 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200760 https://docs.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500761 """
762 return self.action(server_id, 'injectNetworkInfo', **kwargs)
763
764 def get_vnc_console(self, server_id, **kwargs):
765 """Get URL of VNC console.
766
Dong Mad12c2332016-10-19 01:36:27 -0700767 For a full list of available parameters, please refer to the official
768 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200769 https://docs.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500770 """
771 return self.action(server_id, "os-getVNCConsole",
772 schema.get_vnc_console, **kwargs)
773
774 def add_fixed_ip(self, server_id, **kwargs):
775 """Add a fixed IP to server instance.
776
Dong Mad12c2332016-10-19 01:36:27 -0700777 For a full list of available parameters, please refer to the official
778 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200779 https://docs.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500780 """
781 return self.action(server_id, 'addFixedIp', **kwargs)
782
783 def remove_fixed_ip(self, server_id, **kwargs):
784 """Remove input fixed IP from input server instance.
785
Dong Mad12c2332016-10-19 01:36:27 -0700786 For a full list of available parameters, please refer to the official
787 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200788 https://docs.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500789 """
790 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800791
792 def list_security_groups_by_server(self, server_id):
793 """Lists security groups for a server.
794
795 For a full list of available parameters, please refer to the official
796 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200797 https://docs.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800798 """
799 resp, body = self.get("servers/%s/os-security-groups" % server_id)
800 body = json.loads(body)
801 self.validate_response(security_groups_schema.list_security_groups,
802 resp, body)
803 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500804
805 def list_tags(self, server_id):
806 """Lists all tags for a server.
807
808 For a full list of available parameters, please refer to the official
809 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200810 https://docs.openstack.org/api-ref/compute/#list-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500811 """
812 url = 'servers/%s/tags' % server_id
813 resp, body = self.get(url)
814 body = json.loads(body)
815 schema = self.get_schema(self.schema_versions_info)
816 self.validate_response(schema.list_tags, resp, body)
817 return rest_client.ResponseBody(resp, body)
818
819 def update_all_tags(self, server_id, tags):
820 """Replaces all tags on specified server with the new set of tags.
821
822 For a full list of available parameters, please refer to the official
823 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200824 https://docs.openstack.org/api-ref/compute/#replace-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500825
826 :param tags: List of tags to replace current server tags with.
827 """
828 url = 'servers/%s/tags' % server_id
829 put_body = {'tags': tags}
830 resp, body = self.put(url, json.dumps(put_body))
831 body = json.loads(body)
832 schema = self.get_schema(self.schema_versions_info)
833 self.validate_response(schema.update_all_tags, resp, body)
834 return rest_client.ResponseBody(resp, body)
835
836 def delete_all_tags(self, server_id):
837 """Deletes all tags from the specified server.
838
839 For a full list of available parameters, please refer to the official
840 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200841 https://docs.openstack.org/api-ref/compute/#delete-all-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500842 """
843 url = 'servers/%s/tags' % server_id
844 resp, body = self.delete(url)
845 schema = self.get_schema(self.schema_versions_info)
846 self.validate_response(schema.delete_all_tags, resp, body)
847 return rest_client.ResponseBody(resp, body)
848
849 def check_tag_existence(self, server_id, tag):
850 """Checks tag existence on the server.
851
852 For a full list of available parameters, please refer to the official
853 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200854 https://docs.openstack.org/api-ref/compute/#check-tag-existence
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500855
856 :param tag: Check for existence of tag on specified server.
857 """
858 url = 'servers/%s/tags/%s' % (server_id, tag)
859 resp, body = self.get(url)
860 schema = self.get_schema(self.schema_versions_info)
861 self.validate_response(schema.check_tag_existence, resp, body)
862 return rest_client.ResponseBody(resp, body)
863
864 def update_tag(self, server_id, tag):
865 """Adds a single tag to the server if server has no specified tag.
866
867 For a full list of available parameters, please refer to the official
868 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200869 https://docs.openstack.org/api-ref/compute/#add-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500870
871 :param tag: Tag to be added to the specified server.
872 """
873 url = 'servers/%s/tags/%s' % (server_id, tag)
874 resp, body = self.put(url, None)
875 schema = self.get_schema(self.schema_versions_info)
876 self.validate_response(schema.update_tag, resp, body)
877 return rest_client.ResponseBody(resp, body)
878
879 def delete_tag(self, server_id, tag):
880 """Deletes a single tag from the specified server.
881
882 For a full list of available parameters, please refer to the official
883 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200884 https://docs.openstack.org/api-ref/compute/#delete-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500885
886 :param tag: Tag to be removed from the specified server.
887 """
888 url = 'servers/%s/tags/%s' % (server_id, tag)
889 resp, body = self.delete(url)
890 schema = self.get_schema(self.schema_versions_info)
891 self.validate_response(schema.delete_tag, resp, body)
892 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530893
894 def evacuate_server(self, server_id, **kwargs):
895 """Evacuate the given server.
896
897 For a full list of available parameters, please refer to the official
898 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200899 https://docs.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
raiesmh0814158c92017-03-21 14:23:15 +0530900 """
Amit Uniyal43cc3132024-05-17 02:04:34 -0400901 api_version = self.get_headers().get(self.api_microversion_header_name)
902
903 if not api_version and self.enable_instance_password:
904 evacuate_schema = schema.evacuate_server_with_admin_pass
905 elif api_version < '2.14':
raiesmh0814158c92017-03-21 14:23:15 +0530906 evacuate_schema = schema.evacuate_server_with_admin_pass
907 else:
908 evacuate_schema = schema.evacuate_server
909
910 return self.action(server_id, 'evacuate',
911 evacuate_schema,
912 **kwargs)