blob: d2bdb6ed65b43a5bcf08d0ddb38c008f69331b45 [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
lanoux2746ba02016-03-16 17:41:01 +090046from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
Matthew Treinish9e26ca82016-02-23 11:43:20 -050047from tempest.lib.common import rest_client
Ghanshyamee9af302016-02-25 06:12:43 +090048from tempest.lib.services.compute import base_compute_client
Matthew Treinish9e26ca82016-02-23 11:43:20 -050049
50
Ghanshyamee9af302016-02-25 06:12:43 +090051class ServersClient(base_compute_client.BaseComputeClient):
Ken'ichi Ohmichiaca816d2017-01-27 15:12:17 -080052 """Service client for the resource /servers"""
53
lanoux2746ba02016-03-16 17:41:01 +090054 schema_versions_info = [
Eli Qiaoe07eacc2016-03-03 13:49:37 +080055 {'min': None, 'max': '2.2', 'schema': schema},
Markus Zoeller69d58b82017-02-17 10:09:22 +010056 {'min': '2.3', 'max': '2.5', 'schema': schemav23},
Felipe Monteiro00b3bd52018-08-03 02:18:13 -040057 {'min': '2.6', 'max': '2.7', 'schema': schemav26},
58 {'min': '2.8', 'max': '2.8', 'schema': schemav28},
Eli Qiaoe07eacc2016-03-03 13:49:37 +080059 {'min': '2.9', 'max': '2.15', 'schema': schemav29},
60 {'min': '2.16', 'max': '2.18', 'schema': schemav216},
Matt Riedemann3e4a46a2016-07-27 14:41:32 -040061 {'min': '2.19', 'max': '2.25', 'schema': schemav219},
Ghanshyam Mann3ee9f212021-12-16 16:55:14 -060062 {'min': '2.26', 'max': '2.44', 'schema': schemav226},
63 {'min': '2.45', 'max': '2.46', 'schema': schemav245},
Sergey Nikitin0cb4f222017-02-03 13:16:33 +040064 {'min': '2.47', 'max': '2.47', 'schema': schemav247},
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020065 {'min': '2.48', 'max': '2.50', 'schema': schemav248},
66 {'min': '2.51', 'max': '2.53', 'schema': schemav251},
Ghanshyamd5394652018-04-26 07:59:32 +000067 {'min': '2.54', 'max': '2.56', 'schema': schemav254},
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +020068 {'min': '2.57', 'max': '2.57', 'schema': schemav257},
69 {'min': '2.58', 'max': '2.61', 'schema': schemav258},
70 {'min': '2.62', 'max': '2.62', 'schema': schemav262},
Matt Riedemannb9b6e372019-03-02 12:23:14 -050071 {'min': '2.63', 'max': '2.69', 'schema': schemav263},
Matt Riedemann0b14b1e2019-03-02 12:38:10 -050072 {'min': '2.70', 'max': '2.70', 'schema': schemav270},
Lee Yarwood803b4a72020-01-07 17:10:29 +000073 {'min': '2.71', 'max': '2.72', 'schema': schemav271},
Ghanshyam Mann1a65c4f2022-03-03 22:03:26 -060074 {'min': '2.73', 'max': '2.74', 'schema': schemav273},
75 {'min': '2.75', 'max': '2.78', 'schema': schemav275},
zhufle9ed6092020-06-16 16:36:59 +080076 {'min': '2.79', 'max': None, 'schema': schemav279}]
Matthew Treinish9e26ca82016-02-23 11:43:20 -050077
78 def __init__(self, auth_provider, service, region,
79 enable_instance_password=True, **kwargs):
80 super(ServersClient, self).__init__(
81 auth_provider, service, region, **kwargs)
82 self.enable_instance_password = enable_instance_password
83
84 def create_server(self, **kwargs):
85 """Create server.
86
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070087 For a full list of available parameters, please refer to the official
88 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +020089 https://docs.openstack.org/api-ref/compute/#create-server
Ken'ichi Ohmichid9bafc02016-09-09 09:35:21 -070090
91 :param name: Server name
92 :param imageRef: Image reference (UUID)
93 :param flavorRef: Flavor reference (UUID or full URL)
Matthew Treinish9e26ca82016-02-23 11:43:20 -050094
95 Most parameters except the following are passed to the API without
96 any changes.
97 :param disk_config: The name is changed to OS-DCF:diskConfig
98 :param scheduler_hints: The name is changed to os:scheduler_hints and
99 the parameter is set in the same level as the parameter 'server'.
100 """
101 body = copy.deepcopy(kwargs)
102 if body.get('disk_config'):
103 body['OS-DCF:diskConfig'] = body.pop('disk_config')
104
105 hints = None
106 if body.get('scheduler_hints'):
107 hints = {'os:scheduler_hints': body.pop('scheduler_hints')}
108
109 post_body = {'server': body}
110
111 if hints:
Jordan Pittier81c427d2016-04-25 17:02:58 +0200112 post_body.update(hints)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500113
114 post_body = json.dumps(post_body)
115 resp, body = self.post('servers', post_body)
116
117 body = json.loads(body)
118 # NOTE(maurosr): this deals with the case of multiple server create
119 # with return reservation id set True
120 if 'reservation_id' in body:
121 return rest_client.ResponseBody(resp, body)
122 if self.enable_instance_password:
123 create_schema = schema.create_server_with_admin_pass
124 else:
125 create_schema = schema.create_server
126 self.validate_response(create_schema, resp, body)
127 return rest_client.ResponseBody(resp, body)
128
129 def update_server(self, server_id, **kwargs):
130 """Update server.
131
Dong Mad12c2332016-10-19 01:36:27 -0700132 For a full list of available parameters, please refer to the official
133 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200134 https://docs.openstack.org/api-ref/compute/#update-server
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500135
136 Most parameters except the following are passed to the API without
137 any changes.
138 :param disk_config: The name is changed to OS-DCF:diskConfig
139 """
ghanshyam910022e2016-12-21 13:32:57 +0900140 if 'disk_config' in kwargs:
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500141 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
142
143 post_body = json.dumps({'server': kwargs})
144 resp, body = self.put("servers/%s" % server_id, post_body)
145 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900146 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500147 self.validate_response(schema.update_server, resp, body)
148 return rest_client.ResponseBody(resp, body)
149
150 def show_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800151 """Get server details.
152
Dong Mad12c2332016-10-19 01:36:27 -0700153 For a full list of available parameters, please refer to the official
154 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200155 https://docs.openstack.org/api-ref/compute/#show-server-details
Lv Fumei7e326332016-07-08 15:18:03 +0800156 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500157 resp, body = self.get("servers/%s" % server_id)
158 body = json.loads(body)
lanoux2746ba02016-03-16 17:41:01 +0900159 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500160 self.validate_response(schema.get_server, resp, body)
161 return rest_client.ResponseBody(resp, body)
162
163 def delete_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800164 """Delete server.
165
Dong Mad12c2332016-10-19 01:36:27 -0700166 For a full list of available parameters, please refer to the official
167 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200168 https://docs.openstack.org/api-ref/compute/#delete-server
Lv Fumei7e326332016-07-08 15:18:03 +0800169 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500170 resp, body = self.delete("servers/%s" % server_id)
171 self.validate_response(schema.delete_server, resp, body)
172 return rest_client.ResponseBody(resp, body)
173
174 def list_servers(self, detail=False, **params):
175 """List servers.
176
Dong Mad12c2332016-10-19 01:36:27 -0700177 For a full list of available parameters, please refer to the official
178 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200179 https://docs.openstack.org/api-ref/compute/#list-servers
180 https://docs.openstack.org/api-ref/compute/#list-servers-detailed
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500181 """
182
183 url = 'servers'
lanoux2746ba02016-03-16 17:41:01 +0900184 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500185 if detail:
186 url += '/detail'
187 _schema = schema.list_servers_detail
ghanshyama8ace722018-04-20 08:45:10 +0000188 else:
189 _schema = schema.list_servers
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500190 if params:
191 url += '?%s' % urllib.urlencode(params)
192
193 resp, body = self.get(url)
194 body = json.loads(body)
195 self.validate_response(_schema, resp, body)
196 return rest_client.ResponseBody(resp, body)
197
198 def list_addresses(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800199 """Lists all addresses for a server.
200
Dong Mad12c2332016-10-19 01:36:27 -0700201 For a full list of available parameters, please refer to the official
202 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200203 https://docs.openstack.org/api-ref/compute/#list-ips
Lv Fumei7e326332016-07-08 15:18:03 +0800204 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500205 resp, body = self.get("servers/%s/ips" % server_id)
206 body = json.loads(body)
207 self.validate_response(schema.list_addresses, resp, body)
208 return rest_client.ResponseBody(resp, body)
209
210 def list_addresses_by_network(self, server_id, network_id):
211 """Lists all addresses of a specific network type for a server."""
212 resp, body = self.get("servers/%s/ips/%s" %
213 (server_id, network_id))
214 body = json.loads(body)
215 self.validate_response(schema.list_addresses_by_network, resp, body)
216 return rest_client.ResponseBody(resp, body)
217
218 def action(self, server_id, action_name,
219 schema=schema.server_actions_common_schema,
220 **kwargs):
Ghanshyamcbf480f2019-07-11 11:53:57 +0000221 if 'body' in kwargs:
222 post_body = json.dumps(kwargs['body'])
223 else:
224 post_body = json.dumps({action_name: kwargs})
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500225 resp, body = self.post('servers/%s/action' % server_id,
226 post_body)
227 if body:
228 body = json.loads(body)
zhuflbe86aec2020-02-25 16:56:51 +0800229 else:
230 if isinstance(body, bytes):
231 body = body.decode('utf-8')
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500232 self.validate_response(schema, resp, body)
233 return rest_client.ResponseBody(resp, body)
234
235 def create_backup(self, server_id, **kwargs):
236 """Backup a server instance.
237
Dong Mad12c2332016-10-19 01:36:27 -0700238 For a full list of available parameters, please refer to the official
239 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200240 https://docs.openstack.org/api-ref/compute/#create-server-back-up-createbackup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500241 """
Ghanshyam Mann3ee9f212021-12-16 16:55:14 -0600242 schema = self.get_schema(self.schema_versions_info)
243 return self.action(server_id, "createBackup",
244 schema.create_backup, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500245
246 def change_password(self, server_id, **kwargs):
247 """Change the root password for the server.
248
Dong Mad12c2332016-10-19 01:36:27 -0700249 For a full list of available parameters, please refer to the official
250 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200251 https://docs.openstack.org/api-ref/compute/#change-administrative-password-changepassword-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500252 """
253 return self.action(server_id, 'changePassword', **kwargs)
254
255 def show_password(self, server_id):
256 resp, body = self.get("servers/%s/os-server-password" %
257 server_id)
258 body = json.loads(body)
259 self.validate_response(schema.show_password, resp, body)
260 return rest_client.ResponseBody(resp, body)
261
262 def delete_password(self, server_id):
263 """Removes the encrypted server password from the metadata server
264
265 Note that this does not actually change the instance server
266 password.
267 """
268 resp, body = self.delete("servers/%s/os-server-password" %
269 server_id)
270 self.validate_response(schema.server_actions_delete_password,
271 resp, body)
272 return rest_client.ResponseBody(resp, body)
273
274 def reboot_server(self, server_id, **kwargs):
275 """Reboot a server.
276
Dong Mad12c2332016-10-19 01:36:27 -0700277 For a full list of available parameters, please refer to the official
278 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200279 https://docs.openstack.org/api-ref/compute/#reboot-server-reboot-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500280 """
281 return self.action(server_id, 'reboot', **kwargs)
282
283 def rebuild_server(self, server_id, image_ref, **kwargs):
284 """Rebuild a server with a new image.
285
Dong Mad12c2332016-10-19 01:36:27 -0700286 For a full list of available parameters, please refer to the official
287 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200288 https://docs.openstack.org/api-ref/compute/#rebuild-server-rebuild-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500289
290 Most parameters except the following are passed to the API without
291 any changes.
292 :param disk_config: The name is changed to OS-DCF:diskConfig
293 """
294 kwargs['imageRef'] = image_ref
295 if 'disk_config' in kwargs:
296 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
lanoux2746ba02016-03-16 17:41:01 +0900297 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500298 if self.enable_instance_password:
299 rebuild_schema = schema.rebuild_server_with_admin_pass
300 else:
301 rebuild_schema = schema.rebuild_server
302 return self.action(server_id, 'rebuild',
303 rebuild_schema, **kwargs)
304
305 def resize_server(self, server_id, flavor_ref, **kwargs):
306 """Change the flavor of a server.
307
Dong Mad12c2332016-10-19 01:36:27 -0700308 For a full list of available parameters, please refer to the official
309 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200310 https://docs.openstack.org/api-ref/compute/#resize-server-resize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500311
312 Most parameters except the following are passed to the API without
313 any changes.
314 :param disk_config: The name is changed to OS-DCF:diskConfig
315 """
316 kwargs['flavorRef'] = flavor_ref
317 if 'disk_config' in kwargs:
318 kwargs['OS-DCF:diskConfig'] = kwargs.pop('disk_config')
319 return self.action(server_id, 'resize', **kwargs)
320
321 def confirm_resize_server(self, server_id, **kwargs):
322 """Confirm the flavor change for a server.
323
Dong Mad12c2332016-10-19 01:36:27 -0700324 For a full list of available parameters, please refer to the official
325 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200326 https://docs.openstack.org/api-ref/compute/#confirm-resized-server-confirmresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500327 """
328 return self.action(server_id, 'confirmResize',
329 schema.server_actions_confirm_resize,
330 **kwargs)
331
332 def revert_resize_server(self, server_id, **kwargs):
333 """Revert a server back to its original flavor.
334
Dong Mad12c2332016-10-19 01:36:27 -0700335 For a full list of available parameters, please refer to the official
336 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200337 https://docs.openstack.org/api-ref/compute/#revert-resized-server-revertresize-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500338 """
339 return self.action(server_id, 'revertResize', **kwargs)
340
341 def list_server_metadata(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800342 """Lists all metadata for a server.
343
Dong Mad12c2332016-10-19 01:36:27 -0700344 For a full list of available parameters, please refer to the official
345 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200346 https://docs.openstack.org/api-ref/compute/#list-all-metadata
Lv Fumei7e326332016-07-08 15:18:03 +0800347 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500348 resp, body = self.get("servers/%s/metadata" % server_id)
349 body = json.loads(body)
350 self.validate_response(schema.list_server_metadata, resp, body)
351 return rest_client.ResponseBody(resp, body)
352
353 def set_server_metadata(self, server_id, meta, no_metadata_field=False):
Lv Fumei7e326332016-07-08 15:18:03 +0800354 """Sets one or more metadata items for a server.
355
Dong Mad12c2332016-10-19 01:36:27 -0700356 For a full list of available parameters, please refer to the official
357 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200358 https://docs.openstack.org/api-ref/compute/#replace-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800359 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500360 if no_metadata_field:
361 post_body = ""
362 else:
363 post_body = json.dumps({'metadata': meta})
364 resp, body = self.put('servers/%s/metadata' % server_id,
365 post_body)
366 body = json.loads(body)
367 self.validate_response(schema.set_server_metadata, resp, body)
368 return rest_client.ResponseBody(resp, body)
369
370 def update_server_metadata(self, server_id, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800371 """Updates one or more metadata items for a server.
372
Dong Mad12c2332016-10-19 01:36:27 -0700373 For a full list of available parameters, please refer to the official
374 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200375 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-items
Lv Fumei7e326332016-07-08 15:18:03 +0800376 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500377 post_body = json.dumps({'metadata': meta})
378 resp, body = self.post('servers/%s/metadata' % server_id,
379 post_body)
380 body = json.loads(body)
381 self.validate_response(schema.update_server_metadata,
382 resp, body)
383 return rest_client.ResponseBody(resp, body)
384
385 def show_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800386 """Shows details for a metadata item, by key, for a server.
387
Dong Mad12c2332016-10-19 01:36:27 -0700388 For a full list of available parameters, please refer to the official
389 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200390 https://docs.openstack.org/api-ref/compute/#show-metadata-item-details
Lv Fumei7e326332016-07-08 15:18:03 +0800391 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500392 resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
393 body = json.loads(body)
394 self.validate_response(schema.set_show_server_metadata_item,
395 resp, body)
396 return rest_client.ResponseBody(resp, body)
397
398 def set_server_metadata_item(self, server_id, key, meta):
Lv Fumei7e326332016-07-08 15:18:03 +0800399 """Sets a metadata item, by key, for a server.
400
Dong Mad12c2332016-10-19 01:36:27 -0700401 For a full list of available parameters, please refer to the official
402 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200403 https://docs.openstack.org/api-ref/compute/#create-or-update-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800404 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500405 post_body = json.dumps({'meta': meta})
406 resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
407 post_body)
408 body = json.loads(body)
409 self.validate_response(schema.set_show_server_metadata_item,
410 resp, body)
411 return rest_client.ResponseBody(resp, body)
412
413 def delete_server_metadata_item(self, server_id, key):
Lv Fumei7e326332016-07-08 15:18:03 +0800414 """Deletes a metadata item, by key, from a server.
415
Dong Mad12c2332016-10-19 01:36:27 -0700416 For a full list of available parameters, please refer to the official
417 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200418 https://docs.openstack.org/api-ref/compute/#delete-metadata-item
Lv Fumei7e326332016-07-08 15:18:03 +0800419 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500420 resp, body = self.delete("servers/%s/metadata/%s" %
421 (server_id, key))
422 self.validate_response(schema.delete_server_metadata_item,
423 resp, body)
424 return rest_client.ResponseBody(resp, body)
425
426 def stop_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800427 """Stops a running server and changes its status to SHUTOFF.
428
Dong Mad12c2332016-10-19 01:36:27 -0700429 For a full list of available parameters, please refer to the official
430 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200431 https://docs.openstack.org/api-ref/compute/#stop-server-os-stop-action
Lv Fumei7e326332016-07-08 15:18:03 +0800432 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500433 return self.action(server_id, 'os-stop', **kwargs)
434
435 def start_server(self, server_id, **kwargs):
Lv Fumei7e326332016-07-08 15:18:03 +0800436 """Starts a stopped server and changes its status to ACTIVE.
437
Dong Mad12c2332016-10-19 01:36:27 -0700438 For a full list of available parameters, please refer to the official
439 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200440 https://docs.openstack.org/api-ref/compute/#start-server-os-start-action
Lv Fumei7e326332016-07-08 15:18:03 +0800441 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500442 return self.action(server_id, 'os-start', **kwargs)
443
444 def attach_volume(self, server_id, **kwargs):
zhuflff6d0da2016-06-12 17:27:12 +0800445 """Attaches a volume to a server instance.
446
Dong Mad12c2332016-10-19 01:36:27 -0700447 For a full list of available parameters, please refer to the official
448 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200449 https://docs.openstack.org/api-ref/compute/#attach-a-volume-to-an-instance
zhuflff6d0da2016-06-12 17:27:12 +0800450 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500451 post_body = json.dumps({'volumeAttachment': kwargs})
452 resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
453 post_body)
454 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500455 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500456 self.validate_response(schema.attach_volume, resp, body)
457 return rest_client.ResponseBody(resp, body)
458
459 def update_attached_volume(self, server_id, attachment_id, **kwargs):
zhuflaa605d52019-08-21 15:17:02 +0800460 """Swaps a volume attached to an instance for another volume
461
462 For a full list of available parameters, please refer to the official
463 API reference:
464 https://docs.openstack.org/api-ref/compute/#update-a-volume-attachment
465 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500466 post_body = json.dumps({'volumeAttachment': kwargs})
467 resp, body = self.put('servers/%s/os-volume_attachments/%s' %
468 (server_id, attachment_id),
469 post_body)
470 self.validate_response(schema.update_attached_volume, resp, body)
471 return rest_client.ResponseBody(resp, body)
472
473 def detach_volume(self, server_id, volume_id): # noqa
Lv Fumei7e326332016-07-08 15:18:03 +0800474 """Detaches a volume from a server instance.
475
Dong Mad12c2332016-10-19 01:36:27 -0700476 For a full list of available parameters, please refer to the official
477 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200478 https://docs.openstack.org/api-ref/compute/#detach-a-volume-from-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800479 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500480 resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
481 (server_id, volume_id))
482 self.validate_response(schema.detach_volume, resp, body)
483 return rest_client.ResponseBody(resp, body)
484
485 def show_volume_attachment(self, server_id, volume_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800486 """Return details about the given volume attachment.
487
Dong Mad12c2332016-10-19 01:36:27 -0700488 For a full list of available parameters, please refer to the official
489 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200490 https://docs.openstack.org/api-ref/compute/#show-a-detail-of-a-volume-attachment
Lv Fumei7e326332016-07-08 15:18:03 +0800491 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500492 resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
493 server_id, volume_id))
494 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500495 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500496 self.validate_response(schema.show_volume_attachment, resp, body)
497 return rest_client.ResponseBody(resp, body)
498
499 def list_volume_attachments(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800500 """Returns the list of volume attachments for a given instance.
501
Dong Mad12c2332016-10-19 01:36:27 -0700502 For a full list of available parameters, please refer to the official
503 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200504 https://docs.openstack.org/api-ref/compute/#list-volume-attachments-for-an-instance
Lv Fumei7e326332016-07-08 15:18:03 +0800505 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500506 resp, body = self.get('servers/%s/os-volume_attachments' % (
507 server_id))
508 body = json.loads(body)
Matt Riedemannb9b6e372019-03-02 12:23:14 -0500509 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500510 self.validate_response(schema.list_volume_attachments, resp, body)
511 return rest_client.ResponseBody(resp, body)
512
513 def add_security_group(self, server_id, **kwargs):
514 """Add a security group to the server.
515
Dong Mad12c2332016-10-19 01:36:27 -0700516 For a full list of available parameters, please refer to the official
517 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200518 https://docs.openstack.org/api-ref/compute/#add-security-group-to-a-server-addsecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500519 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500520 return self.action(server_id, 'addSecurityGroup', **kwargs)
521
522 def remove_security_group(self, server_id, **kwargs):
523 """Remove a security group from the server.
524
Dong Mad12c2332016-10-19 01:36:27 -0700525 For a full list of available parameters, please refer to the official
526 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200527 https://docs.openstack.org/api-ref/compute/#remove-security-group-from-a-server-removesecuritygroup-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500528 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500529 return self.action(server_id, 'removeSecurityGroup', **kwargs)
530
531 def live_migrate_server(self, server_id, **kwargs):
532 """This should be called with administrator privileges.
533
Dong Mad12c2332016-10-19 01:36:27 -0700534 For a full list of available parameters, please refer to the official
535 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200536 https://docs.openstack.org/api-ref/compute/#live-migrate-server-os-migratelive-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500537 """
538 return self.action(server_id, 'os-migrateLive', **kwargs)
539
540 def migrate_server(self, server_id, **kwargs):
541 """Migrate a server to a new host.
542
Dong Mad12c2332016-10-19 01:36:27 -0700543 For a full list of available parameters, please refer to the official
544 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200545 https://docs.openstack.org/api-ref/compute/#migrate-server-migrate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500546 """
547 return self.action(server_id, 'migrate', **kwargs)
548
549 def lock_server(self, server_id, **kwargs):
550 """Lock the given server.
551
Dong Mad12c2332016-10-19 01:36:27 -0700552 For a full list of available parameters, please refer to the official
553 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200554 https://docs.openstack.org/api-ref/compute/#lock-server-lock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500555 """
556 return self.action(server_id, 'lock', **kwargs)
557
558 def unlock_server(self, server_id, **kwargs):
559 """UNlock the given server.
560
Dong Mad12c2332016-10-19 01:36:27 -0700561 For a full list of available parameters, please refer to the official
562 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200563 https://docs.openstack.org/api-ref/compute/#unlock-server-unlock-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500564 """
565 return self.action(server_id, 'unlock', **kwargs)
566
567 def suspend_server(self, server_id, **kwargs):
568 """Suspend the provided server.
569
Dong Mad12c2332016-10-19 01:36:27 -0700570 For a full list of available parameters, please refer to the official
571 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200572 https://docs.openstack.org/api-ref/compute/#suspend-server-suspend-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500573 """
574 return self.action(server_id, 'suspend', **kwargs)
575
576 def resume_server(self, server_id, **kwargs):
577 """Un-suspend the provided server.
578
Dong Mad12c2332016-10-19 01:36:27 -0700579 For a full list of available parameters, please refer to the official
580 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200581 https://docs.openstack.org/api-ref/compute/#resume-suspended-server-resume-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500582 """
583 return self.action(server_id, 'resume', **kwargs)
584
585 def pause_server(self, server_id, **kwargs):
586 """Pause the provided server.
587
Dong Mad12c2332016-10-19 01:36:27 -0700588 For a full list of available parameters, please refer to the official
589 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200590 https://docs.openstack.org/api-ref/compute/#pause-server-pause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500591 """
592 return self.action(server_id, 'pause', **kwargs)
593
594 def unpause_server(self, server_id, **kwargs):
595 """Un-pause the provided server.
596
Dong Mad12c2332016-10-19 01:36:27 -0700597 For a full list of available parameters, please refer to the official
598 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200599 https://docs.openstack.org/api-ref/compute/#unpause-server-unpause-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500600 """
601 return self.action(server_id, 'unpause', **kwargs)
602
603 def reset_state(self, server_id, **kwargs):
604 """Reset the state of a server to active/error.
605
Dong Mad12c2332016-10-19 01:36:27 -0700606 For a full list of available parameters, please refer to the official
607 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200608 https://docs.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500609 """
610 return self.action(server_id, 'os-resetState', **kwargs)
611
612 def shelve_server(self, server_id, **kwargs):
613 """Shelve the provided server.
614
Dong Mad12c2332016-10-19 01:36:27 -0700615 For a full list of available parameters, please refer to the official
616 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200617 https://docs.openstack.org/api-ref/compute/#shelve-server-shelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500618 """
619 return self.action(server_id, 'shelve', **kwargs)
620
621 def unshelve_server(self, server_id, **kwargs):
622 """Un-shelve the provided server.
623
Dong Mad12c2332016-10-19 01:36:27 -0700624 For a full list of available parameters, please refer to the official
625 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200626 https://docs.openstack.org/api-ref/compute/#unshelve-restore-shelved-server-unshelve-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500627 """
Ghanshyamcbf480f2019-07-11 11:53:57 +0000628 # NOTE(gmann): pass None as request body if nothing is requested.
629 # Nova started the request body check since 2.77 microversion and only
630 # accept AZ or None as valid req body and reject the empty dict {}.
631 # Before 2.77 microverison anything is valid body as Nova does not
632 # check the request body but as per api-ref None is valid request
633 # body to pass so we do not need to check the requested microversion
634 # here and always default req body to None.
635 if not kwargs:
636 kwargs['body'] = {'unshelve': None}
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500637 return self.action(server_id, 'unshelve', **kwargs)
638
639 def shelve_offload_server(self, server_id, **kwargs):
640 """Shelve-offload the provided server.
641
Dong Mad12c2332016-10-19 01:36:27 -0700642 For a full list of available parameters, please refer to the official
643 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200644 https://docs.openstack.org/api-ref/compute/#shelf-offload-remove-server-shelveoffload-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500645 """
646 return self.action(server_id, 'shelveOffload', **kwargs)
647
648 def get_console_output(self, server_id, **kwargs):
649 """Get console output.
650
Dong Mad12c2332016-10-19 01:36:27 -0700651 For a full list of available parameters, please refer to the official
652 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200653 https://docs.openstack.org/api-ref/compute/#show-console-output-os-getconsoleoutput-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500654 """
655 return self.action(server_id, 'os-getConsoleOutput',
656 schema.get_console_output, **kwargs)
657
Markus Zoeller69d58b82017-02-17 10:09:22 +0100658 def get_remote_console(self, server_id, console_type, protocol, **kwargs):
659 """Get a remote console.
660
661 For a full list of available parameters, please refer to the official
662 API reference:
zhufl35c2c122020-10-28 17:07:16 +0800663 https://docs.openstack.org/api-ref/compute/#create-console
Markus Zoeller69d58b82017-02-17 10:09:22 +0100664 """
665 param = {
666 'remote_console': {
667 'type': console_type,
668 'protocol': protocol,
669 }
670 }
671 post_body = json.dumps(param)
672 resp, body = self.post("servers/%s/remote-consoles" % server_id,
673 post_body)
674 body = json.loads(body)
675 schema = self.get_schema(self.schema_versions_info)
676 self.validate_response(schema.get_remote_consoles, resp, body)
677 return rest_client.ResponseBody(resp, body)
678
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500679 def list_virtual_interfaces(self, server_id):
680 """List the virtual interfaces used in an instance."""
681 resp, body = self.get('/'.join(['servers', server_id,
afazekas40fcb9b2019-03-08 11:25:11 +0100682 'os-virtual-interfaces']))
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500683 body = json.loads(body)
684 self.validate_response(schema.list_virtual_interfaces, resp, body)
685 return rest_client.ResponseBody(resp, body)
686
687 def rescue_server(self, server_id, **kwargs):
688 """Rescue the provided server.
689
Dong Mad12c2332016-10-19 01:36:27 -0700690 For a full list of available parameters, please refer to the official
691 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200692 https://docs.openstack.org/api-ref/compute/#rescue-server-rescue-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500693 """
Nolwenn Cauchois1eef2602017-01-18 10:04:24 +0100694 if self.enable_instance_password:
695 rescue_schema = schema.rescue_server_with_admin_pass
696 else:
697 rescue_schema = schema.rescue_server
698 return self.action(server_id, 'rescue', rescue_schema, **kwargs)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500699
700 def unrescue_server(self, server_id):
Lv Fumei7e326332016-07-08 15:18:03 +0800701 """Unrescue the provided server.
702
Dong Mad12c2332016-10-19 01:36:27 -0700703 For a full list of available parameters, please refer to the official
704 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200705 https://docs.openstack.org/api-ref/compute/#unrescue-server-unrescue-action
Lv Fumei7e326332016-07-08 15:18:03 +0800706 """
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500707 return self.action(server_id, 'unrescue')
708
709 def show_server_diagnostics(self, server_id):
710 """Get the usage data for a server."""
711 resp, body = self.get("servers/%s/diagnostics" % server_id)
Sergey Nikitin0cb4f222017-02-03 13:16:33 +0400712 body = json.loads(body)
713 schema = self.get_schema(self.schema_versions_info)
714 self.validate_response(schema.show_server_diagnostics, resp, body)
715 return rest_client.ResponseBody(resp, body)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500716
717 def list_instance_actions(self, server_id):
718 """List the provided server action."""
719 resp, body = self.get("servers/%s/os-instance-actions" %
720 server_id)
721 body = json.loads(body)
722 self.validate_response(schema.list_instance_actions, resp, body)
723 return rest_client.ResponseBody(resp, body)
724
725 def show_instance_action(self, server_id, request_id):
726 """Returns the action details of the provided server."""
727 resp, body = self.get("servers/%s/os-instance-actions/%s" %
728 (server_id, request_id))
729 body = json.loads(body)
Balazs Gibizerf46bcdf2021-10-05 11:19:05 +0200730 schema = self.get_schema(self.schema_versions_info)
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500731 self.validate_response(schema.show_instance_action, resp, body)
732 return rest_client.ResponseBody(resp, body)
733
734 def force_delete_server(self, server_id, **kwargs):
735 """Force delete a server.
736
Dong Mad12c2332016-10-19 01:36:27 -0700737 For a full list of available parameters, please refer to the official
738 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200739 https://docs.openstack.org/api-ref/compute/#force-delete-server-forcedelete-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500740 """
741 return self.action(server_id, 'forceDelete', **kwargs)
742
743 def restore_soft_deleted_server(self, server_id, **kwargs):
744 """Restore a soft-deleted server.
745
Dong Mad12c2332016-10-19 01:36:27 -0700746 For a full list of available parameters, please refer to the official
747 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200748 https://docs.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500749 """
750 return self.action(server_id, 'restore', **kwargs)
751
752 def reset_network(self, server_id, **kwargs):
753 """Reset the Network of a server.
754
Dong Mad12c2332016-10-19 01:36:27 -0700755 For a full list of available parameters, please refer to the official
756 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200757 https://docs.openstack.org/api-ref/compute/#reset-networking-on-a-server-resetnetwork-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500758 """
759 return self.action(server_id, 'resetNetwork', **kwargs)
760
761 def inject_network_info(self, server_id, **kwargs):
762 """Inject the Network Info into server.
763
Dong Mad12c2332016-10-19 01:36:27 -0700764 For a full list of available parameters, please refer to the official
765 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200766 https://docs.openstack.org/api-ref/compute/#inject-network-information-injectnetworkinfo-action
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500767 """
768 return self.action(server_id, 'injectNetworkInfo', **kwargs)
769
770 def get_vnc_console(self, server_id, **kwargs):
771 """Get URL of VNC console.
772
Dong Mad12c2332016-10-19 01:36:27 -0700773 For a full list of available parameters, please refer to the official
774 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200775 https://docs.openstack.org/api-ref/compute/#get-vnc-console-os-getvncconsole-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500776 """
777 return self.action(server_id, "os-getVNCConsole",
778 schema.get_vnc_console, **kwargs)
779
780 def add_fixed_ip(self, server_id, **kwargs):
781 """Add a fixed IP to server instance.
782
Dong Mad12c2332016-10-19 01:36:27 -0700783 For a full list of available parameters, please refer to the official
784 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200785 https://docs.openstack.org/api-ref/compute/#add-associate-fixed-ip-addfixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500786 """
787 return self.action(server_id, 'addFixedIp', **kwargs)
788
789 def remove_fixed_ip(self, server_id, **kwargs):
790 """Remove input fixed IP from input server instance.
791
Dong Mad12c2332016-10-19 01:36:27 -0700792 For a full list of available parameters, please refer to the official
793 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200794 https://docs.openstack.org/api-ref/compute/#remove-disassociate-fixed-ip-removefixedip-action-deprecated
Matthew Treinish9e26ca82016-02-23 11:43:20 -0500795 """
796 return self.action(server_id, 'removeFixedIp', **kwargs)
zwhe3beb6cf2017-02-09 16:59:41 +0800797
798 def list_security_groups_by_server(self, server_id):
799 """Lists security groups for a server.
800
801 For a full list of available parameters, please refer to the official
802 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200803 https://docs.openstack.org/api-ref/compute/#list-security-groups-by-server
zwhe3beb6cf2017-02-09 16:59:41 +0800804 """
805 resp, body = self.get("servers/%s/os-security-groups" % server_id)
806 body = json.loads(body)
807 self.validate_response(security_groups_schema.list_security_groups,
808 resp, body)
809 return rest_client.ResponseBody(resp, body)
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500810
811 def list_tags(self, server_id):
812 """Lists all tags for a server.
813
814 For a full list of available parameters, please refer to the official
815 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200816 https://docs.openstack.org/api-ref/compute/#list-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500817 """
818 url = 'servers/%s/tags' % server_id
819 resp, body = self.get(url)
820 body = json.loads(body)
821 schema = self.get_schema(self.schema_versions_info)
822 self.validate_response(schema.list_tags, resp, body)
823 return rest_client.ResponseBody(resp, body)
824
825 def update_all_tags(self, server_id, tags):
826 """Replaces all tags on specified server with the new set of tags.
827
828 For a full list of available parameters, please refer to the official
829 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200830 https://docs.openstack.org/api-ref/compute/#replace-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500831
832 :param tags: List of tags to replace current server tags with.
833 """
834 url = 'servers/%s/tags' % server_id
835 put_body = {'tags': tags}
836 resp, body = self.put(url, json.dumps(put_body))
837 body = json.loads(body)
838 schema = self.get_schema(self.schema_versions_info)
839 self.validate_response(schema.update_all_tags, resp, body)
840 return rest_client.ResponseBody(resp, body)
841
842 def delete_all_tags(self, server_id):
843 """Deletes all tags from the specified server.
844
845 For a full list of available parameters, please refer to the official
846 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200847 https://docs.openstack.org/api-ref/compute/#delete-all-tags
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500848 """
849 url = 'servers/%s/tags' % server_id
850 resp, body = self.delete(url)
851 schema = self.get_schema(self.schema_versions_info)
852 self.validate_response(schema.delete_all_tags, resp, body)
853 return rest_client.ResponseBody(resp, body)
854
855 def check_tag_existence(self, server_id, tag):
856 """Checks tag existence on the server.
857
858 For a full list of available parameters, please refer to the official
859 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200860 https://docs.openstack.org/api-ref/compute/#check-tag-existence
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500861
862 :param tag: Check for existence of tag on specified server.
863 """
864 url = 'servers/%s/tags/%s' % (server_id, tag)
865 resp, body = self.get(url)
866 schema = self.get_schema(self.schema_versions_info)
867 self.validate_response(schema.check_tag_existence, resp, body)
868 return rest_client.ResponseBody(resp, body)
869
870 def update_tag(self, server_id, tag):
871 """Adds a single tag to the server if server has no specified tag.
872
873 For a full list of available parameters, please refer to the official
874 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200875 https://docs.openstack.org/api-ref/compute/#add-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500876
877 :param tag: Tag to be added to the specified server.
878 """
879 url = 'servers/%s/tags/%s' % (server_id, tag)
880 resp, body = self.put(url, None)
881 schema = self.get_schema(self.schema_versions_info)
882 self.validate_response(schema.update_tag, resp, body)
883 return rest_client.ResponseBody(resp, body)
884
885 def delete_tag(self, server_id, tag):
886 """Deletes a single tag from the specified server.
887
888 For a full list of available parameters, please refer to the official
889 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200890 https://docs.openstack.org/api-ref/compute/#delete-a-single-tag
Felipe Monteiro7c95bef2017-02-17 18:49:02 -0500891
892 :param tag: Tag to be removed from the specified server.
893 """
894 url = 'servers/%s/tags/%s' % (server_id, tag)
895 resp, body = self.delete(url)
896 schema = self.get_schema(self.schema_versions_info)
897 self.validate_response(schema.delete_tag, resp, body)
898 return rest_client.ResponseBody(resp, body)
raiesmh0814158c92017-03-21 14:23:15 +0530899
900 def evacuate_server(self, server_id, **kwargs):
901 """Evacuate the given server.
902
903 For a full list of available parameters, please refer to the official
904 API reference:
Andreas Jaegerbf30ae72019-07-22 19:22:57 +0200905 https://docs.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
raiesmh0814158c92017-03-21 14:23:15 +0530906 """
907 if self.enable_instance_password:
908 evacuate_schema = schema.evacuate_server_with_admin_pass
909 else:
910 evacuate_schema = schema.evacuate_server
911
912 return self.action(server_id, 'evacuate',
913 evacuate_schema,
914 **kwargs)