blob: 603fa8ab97f3ff0eff5a89db66b08374d37db762 [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
zhufle9ed6092020-06-16 16:36:59 +080043from tempest.lib.api_schema.response.compute.v2_79 import servers as schemav279
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040044from tempest.lib.api_schema.response.compute.v2_8 import servers as schemav28
lanoux2746ba02016-03-16 17:41:01 +090045from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050046from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090047from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050048
49
Ghanshyamee9af302016-02-25 06:12:43 +090050class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080051 """Service client for the resource /servers"""
52
lanoux2746ba02016-03-16 17:41:01 +090053 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080054 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010055 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040056 {'min': '2.6', 'max': '2.7', 'schema': schemav26},
57 {'min': '2.8', 'max': '2.8', 'schema': schemav28},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080058 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
59 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040060 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
Ghanshyam Mann3ee9f212021-12-16 16:55:14 -060061 {'min': '2.26', 'max': '2.44', 'schema': schemav226},
62 {'min': '2.45', 'max': '2.46', 'schema': schemav245},
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040063 {'min': '2.47', 'max': '2.47', 'schema': schemav247},
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020064 {'min': '2.48', 'max': '2.50', 'schema': schemav248},
65 {'min': '2.51', 'max': '2.53', 'schema': schemav251},
Ghanshyamd5394652018-04-26 07:59:32 +000066 {'min': '2.54', 'max': '2.56', 'schema': schemav254},
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020067 {'min': '2.57', 'max': '2.57', 'schema': schemav257},
68 {'min': '2.58', 'max': '2.61', 'schema': schemav258},
69 {'min': '2.62', 'max': '2.62', 'schema': schemav262},
Matt Riedemannb9b6e372019-03-02 12:23:14 -050070 {'min': '2.63', 'max': '2.69', 'schema': schemav263},
Matt Riedemann0b14b1e2019-03-02 12:38:10 -050071 {'min': '2.70', 'max': '2.70', 'schema': schemav270},
Lee Yarwood803b4a72020-01-07 17:10:29 +000072 {'min': '2.71', 'max': '2.72', 'schema': schemav271},
zhufle9ed6092020-06-16 16:36:59 +080073 {'min': '2.73', 'max': '2.78', 'schema': schemav273},
74 {'min': '2.79', 'max': None, 'schema': schemav279}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050075
76 def __init__(self, auth_provider, service, region,
77 enable_instance_password=True, **kwargs):
78 super(ServersClient, self).__init__(
79 auth_provider, service, region, **kwargs)
80 self.enable_instance_password = enable_instance_password
81
82 def create_server(self, **kwargs):
83 """Create server.
84
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070085 For a full list of available parameters, please refer to the official
86 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +020087 https://docs.openstack.org/api-ref/compute/#create-server
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070088
89 :param name: Server name
90 :param imageRef: Image reference (UUID)
91 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050092
93 Most parameters except the following are passed to the API without
94 any changes.
95 :param disk_config: The name is changed to OS-DCF:diskConfig
96 :param scheduler_hints: The name is changed to os:scheduler_hints and
97 the parameter is set in the same level as the parameter 'server'.
98 """
99 body = copy.deepcopy(kwargs)
100 if body.get('disk_config'):
101 body['OS-DCF:diskConfig'] = body.pop('disk_config')
102
103 hints = None
104 if body.get('scheduler_hints'):
105 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
106
107 post_body = {'server': body}
108
109 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +0200110 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500111
112 post_body = json.dumps(post_body)
113 resp, body = self.post('servers', post_body)
114
115 body = json.loads(body)
116 # NOTE(maurosr): this deals with the case of multiple server create
117 # with return reservation id set True
118 if 'reservation_id' in body:
119 return rest_client.ResponseBody(resp, body)
120 if self.enable_instance_password:
121 create_schema = schema.create_server_with_admin_pass
122 else:
123 create_schema = schema.create_server
124 self.validate_response(create_schema, resp, body)
125 return rest_client.ResponseBody(resp, body)
126
127 def update_server(self, server_id, **kwargs):
128 """Update server.
129
Dong Mad12c2332016-10-19 01:36:27 -0700130 For a full list of available parameters, please refer to the official
131 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200132 https://docs.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500133
134 Most parameters except the following are passed to the API without
135 any changes.
136 :param disk_config: The name is changed to OS-DCF:diskConfig
137 """
ghanshyam910022e2016-12-21 13:32:57 +0900138 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500139 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
140
141 post_body = json.dumps({'server': kwargs})
142 resp, body = self.put("servers/%s" % server_id, post_body)
143 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900144 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500145 self.validate_response(schema.update_server, resp, body)
146 return rest_client.ResponseBody(resp, body)
147
148 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800149 """Get server details.
150
Dong Mad12c2332016-10-19 01:36:27 -0700151 For a full list of available parameters, please refer to the official
152 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200153 https://docs.openstack.org/api-ref/compute/#show-server-details
Lv Fumei7e326332016-07-08 15:18:03 +0800154 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500155 resp, body = self.get("servers/%s" % server_id)
156 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900157 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500158 self.validate_response(schema.get_server, resp, body)
159 return rest_client.ResponseBody(resp, body)
160
161 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800162 """Delete server.
163
Dong Mad12c2332016-10-19 01:36:27 -0700164 For a full list of available parameters, please refer to the official
165 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200166 https://docs.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800167 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500168 resp, body = self.delete("servers/%s" % server_id)
169 self.validate_response(schema.delete_server, resp, body)
170 return rest_client.ResponseBody(resp, body)
171
172 def list_servers(self, detail=False, **params):
173 """List servers.
174
Dong Mad12c2332016-10-19 01:36:27 -0700175 For a full list of available parameters, please refer to the official
176 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200177 https://docs.openstack.org/api-ref/compute/#list-servers
178 https://docs.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500179 """
180
181 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900182 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500183 if detail:
184 url += '/detail'
185 _schema = schema.list_servers_detail
ghanshyama8ace722018-04-20 08:45:10 +0000186 else:
187 _schema = schema.list_servers
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500188 if params:
189 url += '?%s' % urllib.urlencode(params)
190
191 resp, body = self.get(url)
192 body = json.loads(body)
193 self.validate_response(_schema, resp, body)
194 return rest_client.ResponseBody(resp, body)
195
196 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800197 """Lists all addresses for a server.
198
Dong Mad12c2332016-10-19 01:36:27 -0700199 For a full list of available parameters, please refer to the official
200 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200201 https://docs.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800202 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500203 resp, body = self.get("servers/%s/ips" % server_id)
204 body = json.loads(body)
205 self.validate_response(schema.list_addresses, resp, body)
206 return rest_client.ResponseBody(resp, body)
207
208 def list_addresses_by_network(self, server_id, network_id):
209 """Lists all addresses of a specific network type for a server."""
210 resp, body = self.get("servers/%s/ips/%s" %
211 (server_id, network_id))
212 body = json.loads(body)
213 self.validate_response(schema.list_addresses_by_network, resp, body)
214 return rest_client.ResponseBody(resp, body)
215
216 def action(self, server_id, action_name,
217 schema=schema.server_actions_common_schema,
218 **kwargs):
Ghanshyamcbf480f2019-07-11 11:53:57 +0000219 if 'body' in kwargs:
220 post_body = json.dumps(kwargs['body'])
221 else:
222 post_body = json.dumps({action_name: kwargs})
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500223 resp, body = self.post('servers/%s/action' % server_id,
224 post_body)
225 if body:
226 body = json.loads(body)
zhuflbe86aec2020-02-25 16:56:51 +0800227 else:
228 if isinstance(body, bytes):
229 body = body.decode('utf-8')
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500230 self.validate_response(schema, resp, body)
231 return rest_client.ResponseBody(resp, body)
232
233 def create_backup(self, server_id, **kwargs):
234 """Backup a server instance.
235
Dong Mad12c2332016-10-19 01:36:27 -0700236 For a full list of available parameters, please refer to the official
237 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200238 https://docs.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500239 """
Ghanshyam Mann3ee9f212021-12-16 16:55:14 -0600240 schema = self.get_schema(self.schema_versions_info)
241 return self.action(server_id, "createBackup",
242 schema.create_backup, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500243
244 def change_password(self, server_id, **kwargs):
245 """Change the root password for the server.
246
Dong Mad12c2332016-10-19 01:36:27 -0700247 For a full list of available parameters, please refer to the official
248 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200249 https://docs.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500250 """
251 return self.action(server_id, 'changePassword', **kwargs)
252
253 def show_password(self, server_id):
254 resp, body = self.get("servers/%s/os-server-password" %
255 server_id)
256 body = json.loads(body)
257 self.validate_response(schema.show_password, resp, body)
258 return rest_client.ResponseBody(resp, body)
259
260 def delete_password(self, server_id):
261 """Removes the encrypted server password from the metadata server
262
263 Note that this does not actually change the instance server
264 password.
265 """
266 resp, body = self.delete("servers/%s/os-server-password" %
267 server_id)
268 self.validate_response(schema.server_actions_delete_password,
269 resp, body)
270 return rest_client.ResponseBody(resp, body)
271
272 def reboot_server(self, server_id, **kwargs):
273 """Reboot a server.
274
Dong Mad12c2332016-10-19 01:36:27 -0700275 For a full list of available parameters, please refer to the official
276 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200277 https://docs.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500278 """
279 return self.action(server_id, 'reboot', **kwargs)
280
281 def rebuild_server(self, server_id, image_ref, **kwargs):
282 """Rebuild a server with a new image.
283
Dong Mad12c2332016-10-19 01:36:27 -0700284 For a full list of available parameters, please refer to the official
285 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200286 https://docs.openstack.org/api-ref/compute/#rebuild-server-rebuild-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500287
288 Most parameters except the following are passed to the API without
289 any changes.
290 :param disk_config: The name is changed to OS-DCF:diskConfig
291 """
292 kwargs['imageRef'] = image_ref
293 if 'disk_config' in kwargs:
294 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900295 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500296 if self.enable_instance_password:
297 rebuild_schema = schema.rebuild_server_with_admin_pass
298 else:
299 rebuild_schema = schema.rebuild_server
300 return self.action(server_id, 'rebuild',
301 rebuild_schema, **kwargs)
302
303 def resize_server(self, server_id, flavor_ref, **kwargs):
304 """Change the flavor of a server.
305
Dong Mad12c2332016-10-19 01:36:27 -0700306 For a full list of available parameters, please refer to the official
307 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200308 https://docs.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500309
310 Most parameters except the following are passed to the API without
311 any changes.
312 :param disk_config: The name is changed to OS-DCF:diskConfig
313 """
314 kwargs['flavorRef'] = flavor_ref
315 if 'disk_config' in kwargs:
316 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
317 return self.action(server_id, 'resize', **kwargs)
318
319 def confirm_resize_server(self, server_id, **kwargs):
320 """Confirm the flavor change for a server.
321
Dong Mad12c2332016-10-19 01:36:27 -0700322 For a full list of available parameters, please refer to the official
323 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200324 https://docs.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500325 """
326 return self.action(server_id, 'confirmResize',
327 schema.server_actions_confirm_resize,
328 **kwargs)
329
330 def revert_resize_server(self, server_id, **kwargs):
331 """Revert a server back to its original flavor.
332
Dong Mad12c2332016-10-19 01:36:27 -0700333 For a full list of available parameters, please refer to the official
334 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200335 https://docs.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500336 """
337 return self.action(server_id, 'revertResize', **kwargs)
338
339 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800340 """Lists all metadata for a server.
341
Dong Mad12c2332016-10-19 01:36:27 -0700342 For a full list of available parameters, please refer to the official
343 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200344 https://docs.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800345 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500346 resp, body = self.get("servers/%s/metadata" % server_id)
347 body = json.loads(body)
348 self.validate_response(schema.list_server_metadata, resp, body)
349 return rest_client.ResponseBody(resp, body)
350
351 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800352 """Sets one or more metadata items for a server.
353
Dong Mad12c2332016-10-19 01:36:27 -0700354 For a full list of available parameters, please refer to the official
355 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200356 https://docs.openstack.org/api-ref/compute/#replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800357 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500358 if no_metadata_field:
359 post_body = ""
360 else:
361 post_body = json.dumps({'metadata': meta})
362 resp, body = self.put('servers/%s/metadata' % server_id,
363 post_body)
364 body = json.loads(body)
365 self.validate_response(schema.set_server_metadata, resp, body)
366 return rest_client.ResponseBody(resp, body)
367
368 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800369 """Updates one or more metadata items for a server.
370
Dong Mad12c2332016-10-19 01:36:27 -0700371 For a full list of available parameters, please refer to the official
372 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200373 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800374 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500375 post_body = json.dumps({'metadata': meta})
376 resp, body = self.post('servers/%s/metadata' % server_id,
377 post_body)
378 body = json.loads(body)
379 self.validate_response(schema.update_server_metadata,
380 resp, body)
381 return rest_client.ResponseBody(resp, body)
382
383 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800384 """Shows details for a metadata item, by key, for a server.
385
Dong Mad12c2332016-10-19 01:36:27 -0700386 For a full list of available parameters, please refer to the official
387 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200388 https://docs.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800389 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500390 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
391 body = json.loads(body)
392 self.validate_response(schema.set_show_server_metadata_item,
393 resp, body)
394 return rest_client.ResponseBody(resp, body)
395
396 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800397 """Sets a metadata item, by key, for a server.
398
Dong Mad12c2332016-10-19 01:36:27 -0700399 For a full list of available parameters, please refer to the official
400 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200401 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800402 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500403 post_body = json.dumps({'meta': meta})
404 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
405 post_body)
406 body = json.loads(body)
407 self.validate_response(schema.set_show_server_metadata_item,
408 resp, body)
409 return rest_client.ResponseBody(resp, body)
410
411 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800412 """Deletes a metadata item, by key, from a server.
413
Dong Mad12c2332016-10-19 01:36:27 -0700414 For a full list of available parameters, please refer to the official
415 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200416 https://docs.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800417 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500418 resp, body = self.delete("servers/%s/metadata/%s" %
419 (server_id, key))
420 self.validate_response(schema.delete_server_metadata_item,
421 resp, body)
422 return rest_client.ResponseBody(resp, body)
423
424 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800425 """Stops a running server and changes its status to SHUTOFF.
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/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800430 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500431 return self.action(server_id, 'os-stop', **kwargs)
432
433 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800434 """Starts a stopped server and changes its status to ACTIVE.
435
Dong Mad12c2332016-10-19 01:36:27 -0700436 For a full list of available parameters, please refer to the official
437 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200438 https://docs.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800439 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500440 return self.action(server_id, 'os-start', **kwargs)
441
442 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800443 """Attaches a volume to a server instance.
444
Dong Mad12c2332016-10-19 01:36:27 -0700445 For a full list of available parameters, please refer to the official
446 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200447 https://docs.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800448 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500449 post_body = json.dumps({'volumeAttachment': kwargs})
450 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
451 post_body)
452 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500453 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500454 self.validate_response(schema.attach_volume, resp, body)
455 return rest_client.ResponseBody(resp, body)
456
457 def update_attached_volume(self, server_id, attachment_id, **kwargs):
zhuflaa605d52019-08-21 15:17:02 +0800458 """Swaps a volume attached to an instance for another volume
459
460 For a full list of available parameters, please refer to the official
461 API reference:
462 https://docs.openstack.org/api-ref/compute/#update-a-volume-attachment
463 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500464 post_body = json.dumps({'volumeAttachment': kwargs})
465 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
466 (server_id, attachment_id),
467 post_body)
468 self.validate_response(schema.update_attached_volume, resp, body)
469 return rest_client.ResponseBody(resp, body)
470
471 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800472 """Detaches a volume from a server instance.
473
Dong Mad12c2332016-10-19 01:36:27 -0700474 For a full list of available parameters, please refer to the official
475 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200476 https://docs.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800477 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500478 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
479 (server_id, volume_id))
480 self.validate_response(schema.detach_volume, resp, body)
481 return rest_client.ResponseBody(resp, body)
482
483 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800484 """Return details about the given volume attachment.
485
Dong Mad12c2332016-10-19 01:36:27 -0700486 For a full list of available parameters, please refer to the official
487 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200488 https://docs.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800489 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500490 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
491 server_id, volume_id))
492 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500493 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500494 self.validate_response(schema.show_volume_attachment, resp, body)
495 return rest_client.ResponseBody(resp, body)
496
497 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800498 """Returns the list of volume attachments for a given instance.
499
Dong Mad12c2332016-10-19 01:36:27 -0700500 For a full list of available parameters, please refer to the official
501 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200502 https://docs.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800503 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500504 resp, body = self.get('servers/%s/os-volume_attachments' % (
505 server_id))
506 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500507 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500508 self.validate_response(schema.list_volume_attachments, resp, body)
509 return rest_client.ResponseBody(resp, body)
510
511 def add_security_group(self, server_id, **kwargs):
512 """Add a security group to the server.
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/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500517 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500518 return self.action(server_id, 'addSecurityGroup', **kwargs)
519
520 def remove_security_group(self, server_id, **kwargs):
521 """Remove a security group from the server.
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/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500526 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500527 return self.action(server_id, 'removeSecurityGroup', **kwargs)
528
529 def live_migrate_server(self, server_id, **kwargs):
530 """This should be called with administrator privileges.
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/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500535 """
536 return self.action(server_id, 'os-migrateLive', **kwargs)
537
538 def migrate_server(self, server_id, **kwargs):
539 """Migrate a server to a new host.
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/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500544 """
545 return self.action(server_id, 'migrate', **kwargs)
546
547 def lock_server(self, server_id, **kwargs):
548 """Lock the given 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/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500553 """
554 return self.action(server_id, 'lock', **kwargs)
555
556 def unlock_server(self, server_id, **kwargs):
557 """UNlock the given 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/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500562 """
563 return self.action(server_id, 'unlock', **kwargs)
564
565 def suspend_server(self, server_id, **kwargs):
566 """Suspend 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/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500571 """
572 return self.action(server_id, 'suspend', **kwargs)
573
574 def resume_server(self, server_id, **kwargs):
575 """Un-suspend 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/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500580 """
581 return self.action(server_id, 'resume', **kwargs)
582
583 def pause_server(self, server_id, **kwargs):
584 """Pause the provided server.
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/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500589 """
590 return self.action(server_id, 'pause', **kwargs)
591
592 def unpause_server(self, server_id, **kwargs):
593 """Un-pause 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/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500598 """
599 return self.action(server_id, 'unpause', **kwargs)
600
601 def reset_state(self, server_id, **kwargs):
602 """Reset the state of a server to active/error.
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/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500607 """
608 return self.action(server_id, 'os-resetState', **kwargs)
609
610 def shelve_server(self, server_id, **kwargs):
611 """Shelve 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/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500616 """
617 return self.action(server_id, 'shelve', **kwargs)
618
619 def unshelve_server(self, server_id, **kwargs):
620 """Un-shelve the provided server.
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/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500625 """
Ghanshyamcbf480f2019-07-11 11:53:57 +0000626 # NOTE(gmann): pass None as request body if nothing is requested.
627 # Nova started the request body check since 2.77 microversion and only
628 # accept AZ or None as valid req body and reject the empty dict {}.
629 # Before 2.77 microverison anything is valid body as Nova does not
630 # check the request body but as per api-ref None is valid request
631 # body to pass so we do not need to check the requested microversion
632 # here and always default req body to None.
633 if not kwargs:
634 kwargs['body'] = {'unshelve': None}
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500635 return self.action(server_id, 'unshelve', **kwargs)
636
637 def shelve_offload_server(self, server_id, **kwargs):
638 """Shelve-offload the provided server.
639
Dong Mad12c2332016-10-19 01:36:27 -0700640 For a full list of available parameters, please refer to the official
641 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200642 https://docs.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500643 """
644 return self.action(server_id, 'shelveOffload', **kwargs)
645
646 def get_console_output(self, server_id, **kwargs):
647 """Get console output.
648
Dong Mad12c2332016-10-19 01:36:27 -0700649 For a full list of available parameters, please refer to the official
650 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200651 https://docs.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500652 """
653 return self.action(server_id, 'os-getConsoleOutput',
654 schema.get_console_output, **kwargs)
655
Markus Zoeller69d58b82017-02-17 10:09:22 +0100656 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
657 """Get a remote console.
658
659 For a full list of available parameters, please refer to the official
660 API reference:
zhufl35c2c122020-10-28 17:07:16 +0800661 https://docs.openstack.org/api-ref/compute/#create-console
Markus Zoeller69d58b82017-02-17 10:09:22 +0100662 """
663 param = {
664 'remote_console': {
665 'type': console_type,
666 'protocol': protocol,
667 }
668 }
669 post_body = json.dumps(param)
670 resp, body = self.post("servers/%s/remote-consoles" % server_id,
671 post_body)
672 body = json.loads(body)
673 schema = self.get_schema(self.schema_versions_info)
674 self.validate_response(schema.get_remote_consoles, resp, body)
675 return rest_client.ResponseBody(resp, body)
676
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500677 def list_virtual_interfaces(self, server_id):
678 """List the virtual interfaces used in an instance."""
679 resp, body = self.get('/'.join(['servers', server_id,
afazekas40fcb9b2019-03-08 11:25:11 +0100680 'os-virtual-interfaces']))
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500681 body = json.loads(body)
682 self.validate_response(schema.list_virtual_interfaces, resp, body)
683 return rest_client.ResponseBody(resp, body)
684
685 def rescue_server(self, server_id, **kwargs):
686 """Rescue the provided server.
687
Dong Mad12c2332016-10-19 01:36:27 -0700688 For a full list of available parameters, please refer to the official
689 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200690 https://docs.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500691 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100692 if self.enable_instance_password:
693 rescue_schema = schema.rescue_server_with_admin_pass
694 else:
695 rescue_schema = schema.rescue_server
696 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500697
698 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800699 """Unrescue the provided server.
700
Dong Mad12c2332016-10-19 01:36:27 -0700701 For a full list of available parameters, please refer to the official
702 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200703 https://docs.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800704 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500705 return self.action(server_id, 'unrescue')
706
707 def show_server_diagnostics(self, server_id):
708 """Get the usage data for a server."""
709 resp, body = self.get("servers/%s/diagnostics" % server_id)
Sergey Nikitin0cb4f222017-02-03 13:16:33 +0400710 body = json.loads(body)
711 schema = self.get_schema(self.schema_versions_info)
712 self.validate_response(schema.show_server_diagnostics, resp, body)
713 return rest_client.ResponseBody(resp, body)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500714
715 def list_instance_actions(self, server_id):
716 """List the provided server action."""
717 resp, body = self.get("servers/%s/os-instance-actions" %
718 server_id)
719 body = json.loads(body)
720 self.validate_response(schema.list_instance_actions, resp, body)
721 return rest_client.ResponseBody(resp, body)
722
723 def show_instance_action(self, server_id, request_id):
724 """Returns the action details of the provided server."""
725 resp, body = self.get("servers/%s/os-instance-actions/%s" %
726 (server_id, request_id))
727 body = json.loads(body)
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +0200728 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500729 self.validate_response(schema.show_instance_action, resp, body)
730 return rest_client.ResponseBody(resp, body)
731
732 def force_delete_server(self, server_id, **kwargs):
733 """Force delete a server.
734
Dong Mad12c2332016-10-19 01:36:27 -0700735 For a full list of available parameters, please refer to the official
736 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200737 https://docs.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500738 """
739 return self.action(server_id, 'forceDelete', **kwargs)
740
741 def restore_soft_deleted_server(self, server_id, **kwargs):
742 """Restore a soft-deleted server.
743
Dong Mad12c2332016-10-19 01:36:27 -0700744 For a full list of available parameters, please refer to the official
745 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200746 https://docs.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500747 """
748 return self.action(server_id, 'restore', **kwargs)
749
750 def reset_network(self, server_id, **kwargs):
751 """Reset the Network of a server.
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/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500756 """
757 return self.action(server_id, 'resetNetwork', **kwargs)
758
759 def inject_network_info(self, server_id, **kwargs):
760 """Inject the Network Info into server.
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/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500765 """
766 return self.action(server_id, 'injectNetworkInfo', **kwargs)
767
768 def get_vnc_console(self, server_id, **kwargs):
769 """Get URL of VNC console.
770
Dong Mad12c2332016-10-19 01:36:27 -0700771 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/#get-vnc-console-os-getvncconsole-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500774 """
775 return self.action(server_id, "os-getVNCConsole",
776 schema.get_vnc_console, **kwargs)
777
778 def add_fixed_ip(self, server_id, **kwargs):
779 """Add a fixed IP to server instance.
780
Dong Mad12c2332016-10-19 01:36:27 -0700781 For a full list of available parameters, please refer to the official
782 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200783 https://docs.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500784 """
785 return self.action(server_id, 'addFixedIp', **kwargs)
786
787 def remove_fixed_ip(self, server_id, **kwargs):
788 """Remove input fixed IP from input server instance.
789
Dong Mad12c2332016-10-19 01:36:27 -0700790 For a full list of available parameters, please refer to the official
791 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200792 https://docs.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500793 """
794 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800795
796 def list_security_groups_by_server(self, server_id):
797 """Lists security groups for a server.
798
799 For a full list of available parameters, please refer to the official
800 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200801 https://docs.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800802 """
803 resp, body = self.get("servers/%s/os-security-groups" % server_id)
804 body = json.loads(body)
805 self.validate_response(security_groups_schema.list_security_groups,
806 resp, body)
807 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500808
809 def list_tags(self, server_id):
810 """Lists all tags for a server.
811
812 For a full list of available parameters, please refer to the official
813 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200814 https://docs.openstack.org/api-ref/compute/#list-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500815 """
816 url = 'servers/%s/tags' % server_id
817 resp, body = self.get(url)
818 body = json.loads(body)
819 schema = self.get_schema(self.schema_versions_info)
820 self.validate_response(schema.list_tags, resp, body)
821 return rest_client.ResponseBody(resp, body)
822
823 def update_all_tags(self, server_id, tags):
824 """Replaces all tags on specified server with the new set of tags.
825
826 For a full list of available parameters, please refer to the official
827 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200828 https://docs.openstack.org/api-ref/compute/#replace-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500829
830 :param tags: List of tags to replace current server tags with.
831 """
832 url = 'servers/%s/tags' % server_id
833 put_body = {'tags': tags}
834 resp, body = self.put(url, json.dumps(put_body))
835 body = json.loads(body)
836 schema = self.get_schema(self.schema_versions_info)
837 self.validate_response(schema.update_all_tags, resp, body)
838 return rest_client.ResponseBody(resp, body)
839
840 def delete_all_tags(self, server_id):
841 """Deletes all tags from the specified server.
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/#delete-all-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500846 """
847 url = 'servers/%s/tags' % server_id
848 resp, body = self.delete(url)
849 schema = self.get_schema(self.schema_versions_info)
850 self.validate_response(schema.delete_all_tags, resp, body)
851 return rest_client.ResponseBody(resp, body)
852
853 def check_tag_existence(self, server_id, tag):
854 """Checks tag existence on the server.
855
856 For a full list of available parameters, please refer to the official
857 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200858 https://docs.openstack.org/api-ref/compute/#check-tag-existence
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500859
860 :param tag: Check for existence of tag on specified server.
861 """
862 url = 'servers/%s/tags/%s' % (server_id, tag)
863 resp, body = self.get(url)
864 schema = self.get_schema(self.schema_versions_info)
865 self.validate_response(schema.check_tag_existence, resp, body)
866 return rest_client.ResponseBody(resp, body)
867
868 def update_tag(self, server_id, tag):
869 """Adds a single tag to the server if server has no specified tag.
870
871 For a full list of available parameters, please refer to the official
872 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200873 https://docs.openstack.org/api-ref/compute/#add-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500874
875 :param tag: Tag to be added to the specified server.
876 """
877 url = 'servers/%s/tags/%s' % (server_id, tag)
878 resp, body = self.put(url, None)
879 schema = self.get_schema(self.schema_versions_info)
880 self.validate_response(schema.update_tag, resp, body)
881 return rest_client.ResponseBody(resp, body)
882
883 def delete_tag(self, server_id, tag):
884 """Deletes a single tag from the specified server.
885
886 For a full list of available parameters, please refer to the official
887 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200888 https://docs.openstack.org/api-ref/compute/#delete-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500889
890 :param tag: Tag to be removed from the specified server.
891 """
892 url = 'servers/%s/tags/%s' % (server_id, tag)
893 resp, body = self.delete(url)
894 schema = self.get_schema(self.schema_versions_info)
895 self.validate_response(schema.delete_tag, resp, body)
896 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530897
898 def evacuate_server(self, server_id, **kwargs):
899 """Evacuate the given server.
900
901 For a full list of available parameters, please refer to the official
902 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200903 https://docs.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
raiesmh0814158c92017-03-21 14:23:15 +0530904 """
905 if self.enable_instance_password:
906 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)