diff options
| author | Jenkins <jenkins@review.openstack.org> | 2015-11-30 20:33:11 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2015-11-30 20:33:11 +0000 |
| commit | 7f9a81bb1bd1fe14345f66074272a5cfd86af736 (patch) | |
| tree | fbb8def0c9c2b398b75e256baad610e5c065cac6 /cinderclient/v2 | |
| parent | 37ea6acad71e4d143438facda39db078c6179cb5 (diff) | |
| parent | b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc (diff) | |
| download | python-cinderclient-1.5.0.tar.gz | |
Merge "Adds v2 replication support"1.5.0
Diffstat (limited to 'cinderclient/v2')
| -rw-r--r-- | cinderclient/v2/shell.py | 54 | ||||
| -rw-r--r-- | cinderclient/v2/volumes.py | 56 |
2 files changed, 110 insertions, 0 deletions
diff --git a/cinderclient/v2/shell.py b/cinderclient/v2/shell.py index c9da264..eb489a9 100644 --- a/cinderclient/v2/shell.py +++ b/cinderclient/v2/shell.py @@ -1246,6 +1246,60 @@ def do_migrate(cs, args): six.text_type(e))) +@utils.arg('volume', + metavar='<volume>', + help='ID of volume to enable replication.') +@utils.service_type('volumev2') +def do_replication_enable(cs, args): + """Enables volume replication on a given volume.""" + volume = utils.find_volume(cs, args.volume) + volume.replication_enable(args.volume) + + +@utils.arg('volume', + metavar='<volume>', + help='ID of volume to disable replication.') +@utils.service_type('volumev2') +def do_replication_disable(cs, args): + """Disables volume replication on a given volume.""" + volume = utils.find_volume(cs, args.volume) + volume.replication_disable(args.volume) + + +@utils.arg('volume', + metavar='<volume>', + help='ID of volume to list available replication targets.') +@utils.service_type('volumev2') +def do_replication_list_targets(cs, args): + """List replication targets available for a volume.""" + volume = utils.find_volume(cs, args.volume) + resp, body = volume.replication_list_targets(args.volume) + if body: + targets = body['targets'] + columns = ['target_device_id'] + if targets: + utils.print_list(targets, columns) + else: + print("There are no replication targets found for volume %s." % + args.volume) + else: + print("There is no replication information for volume %s." % + args.volume) + + +@utils.arg('volume', + metavar='<volume>', + help='ID of volume to failover.') +@utils.arg('secondary', + metavar='<secondary>', + help='A unqiue identifier that represents a failover target.') +@utils.service_type('volumev2') +def do_replication_failover(cs, args): + """Failover a volume to a secondary target""" + volume = utils.find_volume(cs, args.volume) + volume.replication_failover(args.volume, args.secondary) + + @utils.arg('volume', metavar='<volume>', help='Name or ID of volume for which to modify type.') @utils.arg('new_type', metavar='<volume-type>', help='New volume type.') diff --git a/cinderclient/v2/volumes.py b/cinderclient/v2/volumes.py index e700649..19bec81 100644 --- a/cinderclient/v2/volumes.py +++ b/cinderclient/v2/volumes.py @@ -144,6 +144,22 @@ class Volume(base.Resource): """Migrate the volume to a new host.""" self.manager.migrate_volume(self, host, force_host_copy, lock_volume) + def replication_enable(self, volume): + """Enables volume replication on a given volume.""" + return self.manager.replication_enable(volume) + + def replication_disable(self, volume): + """Disables volume replication on a given volume.""" + return self.manager.replication_disable(volume) + + def replication_list_targets(self, volume): + """List replication targets available for a volume.""" + return self.manager.replication_list_targets(volume) + + def replication_failover(self, volume, secondary): + """Failover a volume to a secondary target.""" + return self.manager.replication_failover(volume, secondary) + def retype(self, volume_type, policy): """Change a volume's type.""" self.manager.retype(self, volume_type, policy) @@ -512,6 +528,46 @@ class VolumeManager(base.ManagerWithFind): old_volume, {'new_volume': new_volume_id, 'error': error})[1] + def replication_enable(self, volume_id): + """ + Enables volume replication on a given volume. + + :param volume_id: The id of the volume to query + """ + return self._action('os-enable_replication', + volume_id) + + def replication_disable(self, volume_id): + """ + Disables volume replication on a given volume. + + :param volume_id: The id of the volume to query + """ + return self._action('os-disable_replication', + volume_id) + + def replication_list_targets(self, volume_id): + """ + List replication targets available for a volume. + + :param volume_id: The id of the volume to query + :return: a list of available replication targets + """ + return self._action('os-list_replication_targets', + volume_id) + + def replication_failover(self, volume_id, secondary): + """ + Failover a volume to a secondary target. + + :param volume_id: The id of the volume to query + :param secondary: A unqiue identifier that represents a failover + target + """ + return self._action('os-failover_replication', + volume_id, + {"secondary": secondary}) + def update_all_metadata(self, volume, metadata): """Update all metadata of a volume. |
