added: enable/disable/modify redshift snapshot copy methods
This commit is contained in:
parent
4520cd930f
commit
d8b124fbf4
4 changed files with 191 additions and 2 deletions
|
|
@ -93,3 +93,22 @@ class ResourceNotFoundFaultError(RedshiftClientError):
|
|||
msg = message
|
||||
super(ResourceNotFoundFaultError, self).__init__(
|
||||
'ResourceNotFoundFault', msg)
|
||||
|
||||
|
||||
class SnapshotCopyDisabledFaultError(RedshiftClientError):
|
||||
def __init__(self, cluster_identifier):
|
||||
super(SnapshotCopyDisabledFaultError, self).__init__(
|
||||
'SnapshotCopyDisabledFault',
|
||||
"Cannot modify retention period because snapshot copy is disabled on Cluster {0}.".format(cluster_identifier))
|
||||
|
||||
class SnapshotCopyAlreadyDisabledFaultError(RedshiftClientError):
|
||||
def __init__(self, cluster_identifier):
|
||||
super(SnapshotCopyAlreadyDisabledFaultError, self).__init__(
|
||||
'SnapshotCopyAlreadyDisabledFault',
|
||||
"Snapshot Copy is already disabled on Cluster {0}.".format(cluster_identifier))
|
||||
|
||||
class SnapshotCopyAlreadyEnabledFaultError(RedshiftClientError):
|
||||
def __init__(self, cluster_identifier):
|
||||
super(SnapshotCopyAlreadyEnabledFaultError, self).__init__(
|
||||
'SnapshotCopyAlreadyEnabledFault',
|
||||
"Snapshot Copy is already enabled on Cluster {0}.".format(cluster_identifier))
|
||||
|
|
|
|||
|
|
@ -17,7 +17,10 @@ from .exceptions import (
|
|||
ClusterSubnetGroupNotFoundError,
|
||||
InvalidParameterValueError,
|
||||
InvalidSubnetError,
|
||||
ResourceNotFoundFaultError
|
||||
ResourceNotFoundFaultError,
|
||||
SnapshotCopyDisabledFaultError,
|
||||
SnapshotCopyAlreadyDisabledFaultError,
|
||||
SnapshotCopyAlreadyEnabledFaultError,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -80,6 +83,7 @@ class Cluster(TaggableResourceMixin, BaseModel):
|
|||
self.cluster_subnet_group_name = cluster_subnet_group_name
|
||||
self.publicly_accessible = publicly_accessible
|
||||
self.encrypted = encrypted
|
||||
self.cluster_snapshot_copy_status = {}
|
||||
|
||||
self.allow_version_upgrade = allow_version_upgrade if allow_version_upgrade is not None else True
|
||||
self.cluster_version = cluster_version if cluster_version else "1.0"
|
||||
|
|
@ -194,7 +198,7 @@ class Cluster(TaggableResourceMixin, BaseModel):
|
|||
return self.cluster_identifier
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
json_response = {
|
||||
"MasterUsername": self.master_username,
|
||||
"MasterUserPassword": "****",
|
||||
"ClusterVersion": self.cluster_version,
|
||||
|
|
@ -223,6 +227,7 @@ class Cluster(TaggableResourceMixin, BaseModel):
|
|||
"NodeType": self.node_type,
|
||||
"ClusterIdentifier": self.cluster_identifier,
|
||||
"AllowVersionUpgrade": self.allow_version_upgrade,
|
||||
|
||||
"Endpoint": {
|
||||
"Address": self.endpoint,
|
||||
"Port": self.port
|
||||
|
|
@ -231,6 +236,10 @@ class Cluster(TaggableResourceMixin, BaseModel):
|
|||
"Tags": self.tags
|
||||
}
|
||||
|
||||
if self.cluster_snapshot_copy_status:
|
||||
json_response['ClusterSnapshotCopyStatus'] = self.cluster_snapshot_copy_status
|
||||
return json_response
|
||||
|
||||
|
||||
class SubnetGroup(TaggableResourceMixin, BaseModel):
|
||||
|
||||
|
|
@ -417,6 +426,40 @@ class RedshiftBackend(BaseBackend):
|
|||
self.__dict__ = {}
|
||||
self.__init__(ec2_backend, region_name)
|
||||
|
||||
def enable_snapshot_copy(self, **kwargs):
|
||||
cluster_identifier = kwargs['cluster_identifier']
|
||||
cluster = self.clusters[cluster_identifier]
|
||||
if not cluster.cluster_snapshot_copy_status:
|
||||
status = {
|
||||
'DestinationRegion': kwargs['destination_region'],
|
||||
'RetentionPeriod': kwargs['retention_period'],
|
||||
'SnapshotCopyGrantName': kwargs['snapshot_copy_grant_name'],
|
||||
}
|
||||
cluster.cluster_snapshot_copy_status = status
|
||||
return cluster
|
||||
|
||||
else:
|
||||
raise SnapshotCopyAlreadyEnabledFaultError(cluster_identifier)
|
||||
|
||||
|
||||
def disable_snapshot_copy(self, **kwargs):
|
||||
cluster_identifier = kwargs['cluster_identifier']
|
||||
cluster = self.clusters[cluster_identifier]
|
||||
if cluster.cluster_snapshot_copy_status:
|
||||
cluster.cluster_snapshot_copy_status = {}
|
||||
else:
|
||||
raise SnapshotCopyAlreadyDisabledFaultError(cluster_identifier)
|
||||
return cluster
|
||||
|
||||
|
||||
def modify_snapshot_copy_retention_period(self, cluster_identifier, retention_period):
|
||||
cluster = self.clusters[cluster_identifier]
|
||||
if cluster.cluster_snapshot_copy_status:
|
||||
cluster.cluster_snapshot_copy_status['RetentionPeriod'] = retention_period
|
||||
else:
|
||||
raise SnapshotCopyDisabledFaultError(cluster_identifier)
|
||||
return cluster
|
||||
|
||||
def create_cluster(self, **cluster_kwargs):
|
||||
cluster_identifier = cluster_kwargs['cluster_identifier']
|
||||
cluster = Cluster(self, **cluster_kwargs)
|
||||
|
|
|
|||
|
|
@ -501,3 +501,58 @@ class RedshiftResponse(BaseResponse):
|
|||
}
|
||||
}
|
||||
})
|
||||
|
||||
def enable_snapshot_copy(self):
|
||||
snapshot_copy_kwargs = {
|
||||
'cluster_identifier': self._get_param('ClusterIdentifier'),
|
||||
'destination_region': self._get_param('DestinationRegion'),
|
||||
'retention_period': self._get_param('RetentionPeriod'),
|
||||
'snapshot_copy_grant_name': self._get_param('SnapshotCopyGrantName'),
|
||||
}
|
||||
cluster = self.redshift_backend.enable_snapshot_copy(**snapshot_copy_kwargs)
|
||||
|
||||
return self.get_response({
|
||||
"EnableSnapshotCopyResponse": {
|
||||
"EnableSnapshotCopyResult": {
|
||||
"Cluster": cluster.to_json()
|
||||
},
|
||||
"ResponseMetadata": {
|
||||
"RequestId": "384ac68d-3775-11df-8963-01868b7c937a",
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
def disable_snapshot_copy(self):
|
||||
snapshot_copy_kwargs = {
|
||||
'cluster_identifier': self._get_param('ClusterIdentifier'),
|
||||
}
|
||||
cluster = self.redshift_backend.disable_snapshot_copy(**snapshot_copy_kwargs)
|
||||
|
||||
return self.get_response({
|
||||
"DisableSnapshotCopyResponse": {
|
||||
"DisableSnapshotCopyResult": {
|
||||
"Cluster": cluster.to_json()
|
||||
},
|
||||
"ResponseMetadata": {
|
||||
"RequestId": "384ac68d-3775-11df-8963-01868b7c937a",
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
def modify_snapshot_copy_retention_period(self):
|
||||
snapshot_copy_kwargs = {
|
||||
'cluster_identifier': self._get_param('ClusterIdentifier'),
|
||||
'retention_period': self._get_param('RetentionPeriod'),
|
||||
}
|
||||
cluster = self.redshift_backend.modify_snapshot_copy_retention_period(**snapshot_copy_kwargs)
|
||||
|
||||
return self.get_response({
|
||||
"ModifySnapshotCopyRetentionPeriodResponse": {
|
||||
"ModifySnapshotCopyRetentionPeriodResult": {
|
||||
"Clusters": [cluster.to_json()]
|
||||
},
|
||||
"ResponseMetadata": {
|
||||
"RequestId": "384ac68d-3775-11df-8963-01868b7c937a",
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue