Add replication v2.1 (cheesecake) calls

Cheesecake introduces a host based replication use case.
This change includes the changes needed to support those
implementations in the Cinder API.

Implements: blueprint replication-update

Change-Id: I74dc1a00fb4a2c05510c6159253036ac19706959
This commit is contained in:
John Griffith
2016-02-18 01:21:32 +00:00
parent 8c8cdabde3
commit 88934c2708
2 changed files with 46 additions and 0 deletions

View File

@@ -62,3 +62,18 @@ class ServiceManager(base.ManagerWithFind):
body = {"host": host, "binary": binary, "disabled_reason": reason}
result = self._update("/os-services/disable-log-reason", body)
return self.resource_class(self, result, resp=result.request_ids)
def freeze_host(self, host):
"""Freeze the service specified by hostname."""
body = {"host": host}
return self._update("/os-services/freeze", body)
def thaw_host(self, host):
"""Thaw the service specified by hostname."""
body = {"host": host}
return self._update("/os-services/thaw", body)
def failover_host(self, host, backend_id):
"""Failover a replicated backend by hostname."""
body = {"host": host, "backend_id": backend_id}
return self._update("/os-services/failover_host", body)

View File

@@ -1682,11 +1682,21 @@ def do_extend(cs, args):
help='Host name. Default=None.')
@utils.arg('--binary', metavar='<binary>', default=None,
help='Service binary. Default=None.')
@utils.arg('--withreplication',
metavar='<True|False>',
const=True,
nargs='?',
default=False,
help='Enables or disables display of '
'Replication info for c-vol services. Default=False.')
@utils.service_type('volumev2')
def do_service_list(cs, args):
"""Lists all services. Filter by host and service binary."""
replication = strutils.bool_from_string(args.withreplication)
result = cs.services.list(host=args.host, binary=args.binary)
columns = ["Binary", "Host", "Zone", "Status", "State", "Updated_at"]
if replication:
columns.extend(["Replication Status", "Active Backend ID", "Frozen"])
# NOTE(jay-lau-513): we check if the response has disabled_reason
# so as not to add the column when the extended ext is not enabled.
if result and hasattr(result[0], 'disabled_reason'):
@@ -2641,3 +2651,24 @@ def do_snapshot_unmanage(cs, args):
"""Stop managing a snapshot."""
snapshot = _find_volume_snapshot(cs, args.snapshot)
cs.volume_snapshots.unmanage(snapshot.id)
@utils.arg('host', metavar='<hostname>', help='Host name.')
@utils.service_type('volumev2')
def do_freeze_host(cs, args):
cs.services.freeze_host(args.host)
@utils.arg('host', metavar='<hostname>', help='Host name.')
@utils.service_type('volumev2')
def do_thaw_host(cs, args):
cs.services.thaw_host(args.host)
@utils.arg('host', metavar='<hostname>', help='Host name.')
@utils.arg('--backend_id',
metavar='<backend-id>',
help='ID of backend to failover to (Default=None)')
@utils.service_type('volumev2')
def do_failover_host(cs, args):
cs.services.failover_host(args.host, args.backend_id)