2b54bbc8bb
This change adds the optional parameters: disk bus and device type to the volume-attach command for the V3 API. DocImpact Closes-Bug: #1303875 Change-Id: I4fd07726887d08e5b669139b559bdb2c2d21826e
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
# Copyright 2013 IBM Corp.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
"""
|
|
Volume interface
|
|
"""
|
|
|
|
from novaclient import base
|
|
|
|
|
|
class VolumeManager(base.Manager):
|
|
"""
|
|
Manage :class:`Volume` resources.
|
|
"""
|
|
|
|
def attach_server_volume(self, server, volume_id, device,
|
|
disk_bus=None, device_type=None):
|
|
"""
|
|
Attach a volume identified by the volume ID to the given server ID
|
|
|
|
:param server: The server (or it's ID)
|
|
:param volume_id: The ID of the volume to attach.
|
|
:param device: The device name
|
|
:param disk_bus: The disk bus of the volume
|
|
:param device_type: The device type of the volume
|
|
:rtype: :class:`Volume`
|
|
"""
|
|
body = {'volume_id': volume_id, 'device': device}
|
|
if disk_bus:
|
|
body['disk_bus'] = disk_bus
|
|
if device_type:
|
|
body['device_type'] = device_type
|
|
return self._action('attach', server, body)
|
|
|
|
def update_server_volume(self, server, old_volume_id, new_volume_id):
|
|
"""
|
|
Update the volume identified by the attachment ID, that is attached to
|
|
the given server ID
|
|
|
|
:param server_id: The server (or it's ID)
|
|
:param old_volume_id: The ID of the attachment
|
|
:param new_volume_id: The ID of the new volume to attach
|
|
:rtype: :class:`Volume`
|
|
"""
|
|
body = {'new_volume_id': new_volume_id, 'old_volume_id': old_volume_id}
|
|
return self._action('swap_volume_attachment', server, body)
|
|
|
|
def delete_server_volume(self, server, volume_id):
|
|
"""
|
|
Detach a volume identified by the attachment ID from the given server
|
|
|
|
:param server_id: The ID of the server
|
|
:param volume_id: The ID of the attachment
|
|
"""
|
|
return self._action('detach', server, {'volume_id': volume_id})
|
|
|
|
def _action(self, action, server, info=None, **kwargs):
|
|
"""
|
|
Perform a server "action" -- reboot/rebuild/resize/etc.
|
|
"""
|
|
body = {action: info}
|
|
self.run_hooks('modify_body_for_action', body, **kwargs)
|
|
url = '/servers/%s/action' % base.getid(server)
|
|
return self.api.client.post(url, body=body)
|