Mercurial > repos > guerler > springsuite
diff planemo/lib/python3.7/site-packages/boto/redshift/layer1.py @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:18:57 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/planemo/lib/python3.7/site-packages/boto/redshift/layer1.py Fri Jul 31 00:18:57 2020 -0400 @@ -0,0 +1,3097 @@ +# Copyright (c) 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + +import boto +from boto.compat import json +from boto.connection import AWSQueryConnection +from boto.regioninfo import RegionInfo +from boto.exception import JSONResponseError +from boto.redshift import exceptions + + +class RedshiftConnection(AWSQueryConnection): + """ + Amazon Redshift **Overview** + This is an interface reference for Amazon Redshift. It contains + documentation for one of the programming or command line + interfaces you can use to manage Amazon Redshift clusters. Note + that Amazon Redshift is asynchronous, which means that some + interfaces may require techniques, such as polling or asynchronous + callback handlers, to determine when a command has been applied. + In this reference, the parameter descriptions indicate whether a + change is applied immediately, on the next instance reboot, or + during the next maintenance window. For a summary of the Amazon + Redshift cluster management interfaces, go to `Using the Amazon + Redshift Management Interfaces `_. + + Amazon Redshift manages all the work of setting up, operating, and + scaling a data warehouse: provisioning capacity, monitoring and + backing up the cluster, and applying patches and upgrades to the + Amazon Redshift engine. You can focus on using your data to + acquire new insights for your business and customers. + + If you are a first-time user of Amazon Redshift, we recommend that + you begin by reading the The `Amazon Redshift Getting Started + Guide`_ + + If you are a database developer, the `Amazon Redshift Database + Developer Guide`_ explains how to design, build, query, and + maintain the databases that make up your data warehouse. + """ + APIVersion = "2012-12-01" + DefaultRegionName = "us-east-1" + DefaultRegionEndpoint = "redshift.us-east-1.amazonaws.com" + ResponseError = JSONResponseError + + _faults = { + "SnapshotCopyAlreadyDisabled": exceptions.SnapshotCopyAlreadyDisabled, + "ClusterNotFound": exceptions.ClusterNotFound, + "UnknownSnapshotCopyRegion": exceptions.UnknownSnapshotCopyRegion, + "InvalidClusterSubnetState": exceptions.InvalidClusterSubnetState, + "InvalidSubnet": exceptions.InvalidSubnet, + "ReservedNodeQuotaExceeded": exceptions.ReservedNodeQuotaExceeded, + "InvalidClusterState": exceptions.InvalidClusterState, + "HsmClientCertificateQuotaExceeded": exceptions.HsmClientCertificateQuotaExceeded, + "SubscriptionCategoryNotFound": exceptions.SubscriptionCategoryNotFound, + "HsmClientCertificateNotFound": exceptions.HsmClientCertificateNotFound, + "SubscriptionEventIdNotFound": exceptions.SubscriptionEventIdNotFound, + "ClusterSecurityGroupAlreadyExists": exceptions.ClusterSecurityGroupAlreadyExists, + "HsmConfigurationAlreadyExists": exceptions.HsmConfigurationAlreadyExists, + "NumberOfNodesQuotaExceeded": exceptions.NumberOfNodesQuotaExceeded, + "ReservedNodeOfferingNotFound": exceptions.ReservedNodeOfferingNotFound, + "BucketNotFound": exceptions.BucketNotFound, + "InsufficientClusterCapacity": exceptions.InsufficientClusterCapacity, + "InvalidRestore": exceptions.InvalidRestore, + "UnauthorizedOperation": exceptions.UnauthorizedOperation, + "ClusterQuotaExceeded": exceptions.ClusterQuotaExceeded, + "InvalidVPCNetworkState": exceptions.InvalidVPCNetworkState, + "ClusterSnapshotNotFound": exceptions.ClusterSnapshotNotFound, + "AuthorizationQuotaExceeded": exceptions.AuthorizationQuotaExceeded, + "InvalidHsmClientCertificateState": exceptions.InvalidHsmClientCertificateState, + "SNSTopicArnNotFound": exceptions.SNSTopicArnNotFound, + "ResizeNotFound": exceptions.ResizeNotFound, + "ClusterSubnetGroupNotFound": exceptions.ClusterSubnetGroupNotFound, + "SNSNoAuthorization": exceptions.SNSNoAuthorization, + "ClusterSnapshotQuotaExceeded": exceptions.ClusterSnapshotQuotaExceeded, + "AccessToSnapshotDenied": exceptions.AccessToSnapshotDenied, + "InvalidClusterSecurityGroupState": exceptions.InvalidClusterSecurityGroupState, + "NumberOfNodesPerClusterLimitExceeded": exceptions.NumberOfNodesPerClusterLimitExceeded, + "ClusterSubnetQuotaExceeded": exceptions.ClusterSubnetQuotaExceeded, + "SNSInvalidTopic": exceptions.SNSInvalidTopic, + "ClusterSecurityGroupNotFound": exceptions.ClusterSecurityGroupNotFound, + "InvalidElasticIp": exceptions.InvalidElasticIp, + "InvalidClusterParameterGroupState": exceptions.InvalidClusterParameterGroupState, + "InvalidHsmConfigurationState": exceptions.InvalidHsmConfigurationState, + "ClusterAlreadyExists": exceptions.ClusterAlreadyExists, + "HsmConfigurationQuotaExceeded": exceptions.HsmConfigurationQuotaExceeded, + "ClusterSnapshotAlreadyExists": exceptions.ClusterSnapshotAlreadyExists, + "SubscriptionSeverityNotFound": exceptions.SubscriptionSeverityNotFound, + "SourceNotFound": exceptions.SourceNotFound, + "ReservedNodeAlreadyExists": exceptions.ReservedNodeAlreadyExists, + "ClusterSubnetGroupQuotaExceeded": exceptions.ClusterSubnetGroupQuotaExceeded, + "ClusterParameterGroupNotFound": exceptions.ClusterParameterGroupNotFound, + "InvalidS3BucketName": exceptions.InvalidS3BucketName, + "InvalidS3KeyPrefix": exceptions.InvalidS3KeyPrefix, + "SubscriptionAlreadyExist": exceptions.SubscriptionAlreadyExist, + "HsmConfigurationNotFound": exceptions.HsmConfigurationNotFound, + "InvalidSubscriptionState": exceptions.InvalidSubscriptionState, + "AuthorizationNotFound": exceptions.AuthorizationNotFound, + "ClusterSecurityGroupQuotaExceeded": exceptions.ClusterSecurityGroupQuotaExceeded, + "SubnetAlreadyInUse": exceptions.SubnetAlreadyInUse, + "EventSubscriptionQuotaExceeded": exceptions.EventSubscriptionQuotaExceeded, + "AuthorizationAlreadyExists": exceptions.AuthorizationAlreadyExists, + "InvalidClusterSnapshotState": exceptions.InvalidClusterSnapshotState, + "ClusterParameterGroupQuotaExceeded": exceptions.ClusterParameterGroupQuotaExceeded, + "SnapshotCopyDisabled": exceptions.SnapshotCopyDisabled, + "ClusterSubnetGroupAlreadyExists": exceptions.ClusterSubnetGroupAlreadyExists, + "ReservedNodeNotFound": exceptions.ReservedNodeNotFound, + "HsmClientCertificateAlreadyExists": exceptions.HsmClientCertificateAlreadyExists, + "InvalidClusterSubnetGroupState": exceptions.InvalidClusterSubnetGroupState, + "SubscriptionNotFound": exceptions.SubscriptionNotFound, + "InsufficientS3BucketPolicy": exceptions.InsufficientS3BucketPolicy, + "ClusterParameterGroupAlreadyExists": exceptions.ClusterParameterGroupAlreadyExists, + "UnsupportedOption": exceptions.UnsupportedOption, + "CopyToRegionDisabled": exceptions.CopyToRegionDisabled, + "SnapshotCopyAlreadyEnabled": exceptions.SnapshotCopyAlreadyEnabled, + "IncompatibleOrderableOptions": exceptions.IncompatibleOrderableOptions, + } + + + def __init__(self, **kwargs): + region = kwargs.pop('region', None) + if not region: + region = RegionInfo(self, self.DefaultRegionName, + self.DefaultRegionEndpoint) + + if 'host' not in kwargs or kwargs['host'] is None: + kwargs['host'] = region.endpoint + + super(RedshiftConnection, self).__init__(**kwargs) + self.region = region + + def _required_auth_capability(self): + return ['hmac-v4'] + + def authorize_cluster_security_group_ingress(self, + cluster_security_group_name, + cidrip=None, + ec2_security_group_name=None, + ec2_security_group_owner_id=None): + """ + Adds an inbound (ingress) rule to an Amazon Redshift security + group. Depending on whether the application accessing your + cluster is running on the Internet or an EC2 instance, you can + authorize inbound access to either a Classless Interdomain + Routing (CIDR) IP address range or an EC2 security group. You + can add as many as 20 ingress rules to an Amazon Redshift + security group. + + For an overview of CIDR blocks, see the Wikipedia article on + `Classless Inter-Domain Routing`_. + + You must also associate the security group with a cluster so + that clients running on these IP addresses or the EC2 instance + are authorized to connect to the cluster. For information + about managing security groups, go to `Working with Security + Groups`_ in the Amazon Redshift Management Guide . + + :type cluster_security_group_name: string + :param cluster_security_group_name: The name of the security group to + which the ingress rule is added. + + :type cidrip: string + :param cidrip: The IP range to be added the Amazon Redshift security + group. + + :type ec2_security_group_name: string + :param ec2_security_group_name: The EC2 security group to be added the + Amazon Redshift security group. + + :type ec2_security_group_owner_id: string + :param ec2_security_group_owner_id: The AWS account number of the owner + of the security group specified by the EC2SecurityGroupName + parameter. The AWS Access Key ID is not an acceptable value. + Example: `111122223333` + + """ + params = { + 'ClusterSecurityGroupName': cluster_security_group_name, + } + if cidrip is not None: + params['CIDRIP'] = cidrip + if ec2_security_group_name is not None: + params['EC2SecurityGroupName'] = ec2_security_group_name + if ec2_security_group_owner_id is not None: + params['EC2SecurityGroupOwnerId'] = ec2_security_group_owner_id + return self._make_request( + action='AuthorizeClusterSecurityGroupIngress', + verb='POST', + path='/', params=params) + + def authorize_snapshot_access(self, snapshot_identifier, + account_with_restore_access, + snapshot_cluster_identifier=None): + """ + Authorizes the specified AWS customer account to restore the + specified snapshot. + + For more information about working with snapshots, go to + `Amazon Redshift Snapshots`_ in the Amazon Redshift Management + Guide . + + :type snapshot_identifier: string + :param snapshot_identifier: The identifier of the snapshot the account + is authorized to restore. + + :type snapshot_cluster_identifier: string + :param snapshot_cluster_identifier: The identifier of the cluster the + snapshot was created from. This parameter is required if your IAM + user has a policy containing a snapshot resource element that + specifies anything other than * for the cluster name. + + :type account_with_restore_access: string + :param account_with_restore_access: The identifier of the AWS customer + account authorized to restore the specified snapshot. + + """ + params = { + 'SnapshotIdentifier': snapshot_identifier, + 'AccountWithRestoreAccess': account_with_restore_access, + } + if snapshot_cluster_identifier is not None: + params['SnapshotClusterIdentifier'] = snapshot_cluster_identifier + return self._make_request( + action='AuthorizeSnapshotAccess', + verb='POST', + path='/', params=params) + + def copy_cluster_snapshot(self, source_snapshot_identifier, + target_snapshot_identifier, + source_snapshot_cluster_identifier=None): + """ + Copies the specified automated cluster snapshot to a new + manual cluster snapshot. The source must be an automated + snapshot and it must be in the available state. + + When you delete a cluster, Amazon Redshift deletes any + automated snapshots of the cluster. Also, when the retention + period of the snapshot expires, Amazon Redshift automatically + deletes it. If you want to keep an automated snapshot for a + longer period, you can make a manual copy of the snapshot. + Manual snapshots are retained until you delete them. + + For more information about working with snapshots, go to + `Amazon Redshift Snapshots`_ in the Amazon Redshift Management + Guide . + + :type source_snapshot_identifier: string + :param source_snapshot_identifier: + The identifier for the source snapshot. + + Constraints: + + + + Must be the identifier for a valid automated snapshot whose state is + `available`. + + :type source_snapshot_cluster_identifier: string + :param source_snapshot_cluster_identifier: + The identifier of the cluster the source snapshot was created from. + This parameter is required if your IAM user has a policy containing + a snapshot resource element that specifies anything other than * + for the cluster name. + + Constraints: + + + + Must be the identifier for a valid cluster. + + :type target_snapshot_identifier: string + :param target_snapshot_identifier: + The identifier given to the new manual snapshot. + + Constraints: + + + + Cannot be null, empty, or blank. + + Must contain from 1 to 255 alphanumeric characters or hyphens. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + Must be unique for the AWS account that is making the request. + + """ + params = { + 'SourceSnapshotIdentifier': source_snapshot_identifier, + 'TargetSnapshotIdentifier': target_snapshot_identifier, + } + if source_snapshot_cluster_identifier is not None: + params['SourceSnapshotClusterIdentifier'] = source_snapshot_cluster_identifier + return self._make_request( + action='CopyClusterSnapshot', + verb='POST', + path='/', params=params) + + def create_cluster(self, cluster_identifier, node_type, master_username, + master_user_password, db_name=None, cluster_type=None, + cluster_security_groups=None, + vpc_security_group_ids=None, + cluster_subnet_group_name=None, + availability_zone=None, + preferred_maintenance_window=None, + cluster_parameter_group_name=None, + automated_snapshot_retention_period=None, port=None, + cluster_version=None, allow_version_upgrade=None, + number_of_nodes=None, publicly_accessible=None, + encrypted=None, + hsm_client_certificate_identifier=None, + hsm_configuration_identifier=None, elastic_ip=None): + """ + Creates a new cluster. To create the cluster in virtual + private cloud (VPC), you must provide cluster subnet group + name. If you don't provide a cluster subnet group name or the + cluster security group parameter, Amazon Redshift creates a + non-VPC cluster, it associates the default cluster security + group with the cluster. For more information about managing + clusters, go to `Amazon Redshift Clusters`_ in the Amazon + Redshift Management Guide . + + :type db_name: string + :param db_name: + The name of the first database to be created when the cluster is + created. + + To create additional databases after the cluster is created, connect to + the cluster with a SQL client and use SQL commands to create a + database. For more information, go to `Create a Database`_ in the + Amazon Redshift Database Developer Guide. + + Default: `dev` + + Constraints: + + + + Must contain 1 to 64 alphanumeric characters. + + Must contain only lowercase letters. + + Cannot be a word that is reserved by the service. A list of reserved + words can be found in `Reserved Words`_ in the Amazon Redshift + Database Developer Guide. + + :type cluster_identifier: string + :param cluster_identifier: A unique identifier for the cluster. You use + this identifier to refer to the cluster for any subsequent cluster + operations such as deleting or modifying. The identifier also + appears in the Amazon Redshift console. + Constraints: + + + + Must contain from 1 to 63 alphanumeric characters or hyphens. + + Alphabetic characters must be lowercase. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + Must be unique for all clusters within an AWS account. + + + Example: `myexamplecluster` + + :type cluster_type: string + :param cluster_type: The type of the cluster. When cluster type is + specified as + + + `single-node`, the **NumberOfNodes** parameter is not required. + + `multi-node`, the **NumberOfNodes** parameter is required. + + + Valid Values: `multi-node` | `single-node` + + Default: `multi-node` + + :type node_type: string + :param node_type: The node type to be provisioned for the cluster. For + information about node types, go to ` Working with Clusters`_ in + the Amazon Redshift Management Guide . + Valid Values: `dw1.xlarge` | `dw1.8xlarge` | `dw2.large` | + `dw2.8xlarge`. + + :type master_username: string + :param master_username: + The user name associated with the master user account for the cluster + that is being created. + + Constraints: + + + + Must be 1 - 128 alphanumeric characters. + + First character must be a letter. + + Cannot be a reserved word. A list of reserved words can be found in + `Reserved Words`_ in the Amazon Redshift Database Developer Guide. + + :type master_user_password: string + :param master_user_password: + The password associated with the master user account for the cluster + that is being created. + + Constraints: + + + + Must be between 8 and 64 characters in length. + + Must contain at least one uppercase letter. + + Must contain at least one lowercase letter. + + Must contain one number. + + Can be any printable ASCII character (ASCII code 33 to 126) except ' + (single quote), " (double quote), \, /, @, or space. + + :type cluster_security_groups: list + :param cluster_security_groups: A list of security groups to be + associated with this cluster. + Default: The default cluster security group for Amazon Redshift. + + :type vpc_security_group_ids: list + :param vpc_security_group_ids: A list of Virtual Private Cloud (VPC) + security groups to be associated with the cluster. + Default: The default VPC security group is associated with the cluster. + + :type cluster_subnet_group_name: string + :param cluster_subnet_group_name: The name of a cluster subnet group to + be associated with this cluster. + If this parameter is not provided the resulting cluster will be + deployed outside virtual private cloud (VPC). + + :type availability_zone: string + :param availability_zone: The EC2 Availability Zone (AZ) in which you + want Amazon Redshift to provision the cluster. For example, if you + have several EC2 instances running in a specific Availability Zone, + then you might want the cluster to be provisioned in the same zone + in order to decrease network latency. + Default: A random, system-chosen Availability Zone in the region that + is specified by the endpoint. + + Example: `us-east-1d` + + Constraint: The specified Availability Zone must be in the same region + as the current endpoint. + + :type preferred_maintenance_window: string + :param preferred_maintenance_window: The weekly time range (in UTC) + during which automated cluster maintenance can occur. + Format: `ddd:hh24:mi-ddd:hh24:mi` + + Default: A 30-minute window selected at random from an 8-hour block of + time per region, occurring on a random day of the week. The + following list shows the time blocks for each region from which the + default maintenance windows are assigned. + + + + **US-East (Northern Virginia) Region:** 03:00-11:00 UTC + + **US-West (Oregon) Region** 06:00-14:00 UTC + + **EU (Ireland) Region** 22:00-06:00 UTC + + **Asia Pacific (Singapore) Region** 14:00-22:00 UTC + + **Asia Pacific (Sydney) Region** 12:00-20:00 UTC + + **Asia Pacific (Tokyo) Region** 17:00-03:00 UTC + + + Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun + + Constraints: Minimum 30-minute window. + + :type cluster_parameter_group_name: string + :param cluster_parameter_group_name: + The name of the parameter group to be associated with this cluster. + + Default: The default Amazon Redshift cluster parameter group. For + information about the default parameter group, go to `Working with + Amazon Redshift Parameter Groups`_ + + Constraints: + + + + Must be 1 to 255 alphanumeric characters or hyphens. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + :type automated_snapshot_retention_period: integer + :param automated_snapshot_retention_period: The number of days that + automated snapshots are retained. If the value is 0, automated + snapshots are disabled. Even if automated snapshots are disabled, + you can still create manual snapshots when you want with + CreateClusterSnapshot. + Default: `1` + + Constraints: Must be a value from 0 to 35. + + :type port: integer + :param port: The port number on which the cluster accepts incoming + connections. + The cluster is accessible only via the JDBC and ODBC connection + strings. Part of the connection string requires the port on which + the cluster will listen for incoming connections. + + Default: `5439` + + Valid Values: `1150-65535` + + :type cluster_version: string + :param cluster_version: The version of the Amazon Redshift engine + software that you want to deploy on the cluster. + The version selected runs on all the nodes in the cluster. + + Constraints: Only version 1.0 is currently available. + + Example: `1.0` + + :type allow_version_upgrade: boolean + :param allow_version_upgrade: If `True`, upgrades can be applied during + the maintenance window to the Amazon Redshift engine that is + running on the cluster. + When a new version of the Amazon Redshift engine is released, you can + request that the service automatically apply upgrades during the + maintenance window to the Amazon Redshift engine that is running on + your cluster. + + Default: `True` + + :type number_of_nodes: integer + :param number_of_nodes: The number of compute nodes in the cluster. + This parameter is required when the **ClusterType** parameter is + specified as `multi-node`. + For information about determining how many nodes you need, go to ` + Working with Clusters`_ in the Amazon Redshift Management Guide . + + If you don't specify this parameter, you get a single-node cluster. + When requesting a multi-node cluster, you must specify the number + of nodes that you want in the cluster. + + Default: `1` + + Constraints: Value must be at least 1 and no more than 100. + + :type publicly_accessible: boolean + :param publicly_accessible: If `True`, the cluster can be accessed from + a public network. + + :type encrypted: boolean + :param encrypted: If `True`, the data in the cluster is encrypted at + rest. + Default: false + + :type hsm_client_certificate_identifier: string + :param hsm_client_certificate_identifier: Specifies the name of the HSM + client certificate the Amazon Redshift cluster uses to retrieve the + data encryption keys stored in an HSM. + + :type hsm_configuration_identifier: string + :param hsm_configuration_identifier: Specifies the name of the HSM + configuration that contains the information the Amazon Redshift + cluster can use to retrieve and store keys in an HSM. + + :type elastic_ip: string + :param elastic_ip: The Elastic IP (EIP) address for the cluster. + Constraints: The cluster must be provisioned in EC2-VPC and publicly- + accessible through an Internet gateway. For more information about + provisioning clusters in EC2-VPC, go to `Supported Platforms to + Launch Your Cluster`_ in the Amazon Redshift Management Guide. + + """ + params = { + 'ClusterIdentifier': cluster_identifier, + 'NodeType': node_type, + 'MasterUsername': master_username, + 'MasterUserPassword': master_user_password, + } + if db_name is not None: + params['DBName'] = db_name + if cluster_type is not None: + params['ClusterType'] = cluster_type + if cluster_security_groups is not None: + self.build_list_params(params, + cluster_security_groups, + 'ClusterSecurityGroups.member') + if vpc_security_group_ids is not None: + self.build_list_params(params, + vpc_security_group_ids, + 'VpcSecurityGroupIds.member') + if cluster_subnet_group_name is not None: + params['ClusterSubnetGroupName'] = cluster_subnet_group_name + if availability_zone is not None: + params['AvailabilityZone'] = availability_zone + if preferred_maintenance_window is not None: + params['PreferredMaintenanceWindow'] = preferred_maintenance_window + if cluster_parameter_group_name is not None: + params['ClusterParameterGroupName'] = cluster_parameter_group_name + if automated_snapshot_retention_period is not None: + params['AutomatedSnapshotRetentionPeriod'] = automated_snapshot_retention_period + if port is not None: + params['Port'] = port + if cluster_version is not None: + params['ClusterVersion'] = cluster_version + if allow_version_upgrade is not None: + params['AllowVersionUpgrade'] = str( + allow_version_upgrade).lower() + if number_of_nodes is not None: + params['NumberOfNodes'] = number_of_nodes + if publicly_accessible is not None: + params['PubliclyAccessible'] = str( + publicly_accessible).lower() + if encrypted is not None: + params['Encrypted'] = str( + encrypted).lower() + if hsm_client_certificate_identifier is not None: + params['HsmClientCertificateIdentifier'] = hsm_client_certificate_identifier + if hsm_configuration_identifier is not None: + params['HsmConfigurationIdentifier'] = hsm_configuration_identifier + if elastic_ip is not None: + params['ElasticIp'] = elastic_ip + return self._make_request( + action='CreateCluster', + verb='POST', + path='/', params=params) + + def create_cluster_parameter_group(self, parameter_group_name, + parameter_group_family, description): + """ + Creates an Amazon Redshift parameter group. + + Creating parameter groups is independent of creating clusters. + You can associate a cluster with a parameter group when you + create the cluster. You can also associate an existing cluster + with a parameter group after the cluster is created by using + ModifyCluster. + + Parameters in the parameter group define specific behavior + that applies to the databases you create on the cluster. For + more information about managing parameter groups, go to + `Amazon Redshift Parameter Groups`_ in the Amazon Redshift + Management Guide . + + :type parameter_group_name: string + :param parameter_group_name: + The name of the cluster parameter group. + + Constraints: + + + + Must be 1 to 255 alphanumeric characters or hyphens + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + Must be unique within your AWS account. + + This value is stored as a lower-case string. + + :type parameter_group_family: string + :param parameter_group_family: The Amazon Redshift engine version to + which the cluster parameter group applies. The cluster engine + version determines the set of parameters. + To get a list of valid parameter group family names, you can call + DescribeClusterParameterGroups. By default, Amazon Redshift returns + a list of all the parameter groups that are owned by your AWS + account, including the default parameter groups for each Amazon + Redshift engine version. The parameter group family names + associated with the default parameter groups provide you the valid + values. For example, a valid family name is "redshift-1.0". + + :type description: string + :param description: A description of the parameter group. + + """ + params = { + 'ParameterGroupName': parameter_group_name, + 'ParameterGroupFamily': parameter_group_family, + 'Description': description, + } + return self._make_request( + action='CreateClusterParameterGroup', + verb='POST', + path='/', params=params) + + def create_cluster_security_group(self, cluster_security_group_name, + description): + """ + Creates a new Amazon Redshift security group. You use security + groups to control access to non-VPC clusters. + + For information about managing security groups, go to `Amazon + Redshift Cluster Security Groups`_ in the Amazon Redshift + Management Guide . + + :type cluster_security_group_name: string + :param cluster_security_group_name: The name for the security group. + Amazon Redshift stores the value as a lowercase string. + Constraints: + + + + Must contain no more than 255 alphanumeric characters or hyphens. + + Must not be "Default". + + Must be unique for all security groups that are created by your AWS + account. + + + Example: `examplesecuritygroup` + + :type description: string + :param description: A description for the security group. + + """ + params = { + 'ClusterSecurityGroupName': cluster_security_group_name, + 'Description': description, + } + return self._make_request( + action='CreateClusterSecurityGroup', + verb='POST', + path='/', params=params) + + def create_cluster_snapshot(self, snapshot_identifier, + cluster_identifier): + """ + Creates a manual snapshot of the specified cluster. The + cluster must be in the `available` state. + + For more information about working with snapshots, go to + `Amazon Redshift Snapshots`_ in the Amazon Redshift Management + Guide . + + :type snapshot_identifier: string + :param snapshot_identifier: A unique identifier for the snapshot that + you are requesting. This identifier must be unique for all + snapshots within the AWS account. + Constraints: + + + + Cannot be null, empty, or blank + + Must contain from 1 to 255 alphanumeric characters or hyphens + + First character must be a letter + + Cannot end with a hyphen or contain two consecutive hyphens + + + Example: `my-snapshot-id` + + :type cluster_identifier: string + :param cluster_identifier: The cluster identifier for which you want a + snapshot. + + """ + params = { + 'SnapshotIdentifier': snapshot_identifier, + 'ClusterIdentifier': cluster_identifier, + } + return self._make_request( + action='CreateClusterSnapshot', + verb='POST', + path='/', params=params) + + def create_cluster_subnet_group(self, cluster_subnet_group_name, + description, subnet_ids): + """ + Creates a new Amazon Redshift subnet group. You must provide a + list of one or more subnets in your existing Amazon Virtual + Private Cloud (Amazon VPC) when creating Amazon Redshift + subnet group. + + For information about subnet groups, go to `Amazon Redshift + Cluster Subnet Groups`_ in the Amazon Redshift Management + Guide . + + :type cluster_subnet_group_name: string + :param cluster_subnet_group_name: The name for the subnet group. Amazon + Redshift stores the value as a lowercase string. + Constraints: + + + + Must contain no more than 255 alphanumeric characters or hyphens. + + Must not be "Default". + + Must be unique for all subnet groups that are created by your AWS + account. + + + Example: `examplesubnetgroup` + + :type description: string + :param description: A description for the subnet group. + + :type subnet_ids: list + :param subnet_ids: An array of VPC subnet IDs. A maximum of 20 subnets + can be modified in a single request. + + """ + params = { + 'ClusterSubnetGroupName': cluster_subnet_group_name, + 'Description': description, + } + self.build_list_params(params, + subnet_ids, + 'SubnetIds.member') + return self._make_request( + action='CreateClusterSubnetGroup', + verb='POST', + path='/', params=params) + + def create_event_subscription(self, subscription_name, sns_topic_arn, + source_type=None, source_ids=None, + event_categories=None, severity=None, + enabled=None): + """ + Creates an Amazon Redshift event notification subscription. + This action requires an ARN (Amazon Resource Name) of an + Amazon SNS topic created by either the Amazon Redshift + console, the Amazon SNS console, or the Amazon SNS API. To + obtain an ARN with Amazon SNS, you must create a topic in + Amazon SNS and subscribe to the topic. The ARN is displayed in + the SNS console. + + You can specify the source type, and lists of Amazon Redshift + source IDs, event categories, and event severities. + Notifications will be sent for all events you want that match + those criteria. For example, you can specify source type = + cluster, source ID = my-cluster-1 and mycluster2, event + categories = Availability, Backup, and severity = ERROR. The + subscription will only send notifications for those ERROR + events in the Availability and Backup categories for the + specified clusters. + + If you specify both the source type and source IDs, such as + source type = cluster and source identifier = my-cluster-1, + notifications will be sent for all the cluster events for my- + cluster-1. If you specify a source type but do not specify a + source identifier, you will receive notice of the events for + the objects of that type in your AWS account. If you do not + specify either the SourceType nor the SourceIdentifier, you + will be notified of events generated from all Amazon Redshift + sources belonging to your AWS account. You must specify a + source type if you specify a source ID. + + :type subscription_name: string + :param subscription_name: + The name of the event subscription to be created. + + Constraints: + + + + Cannot be null, empty, or blank. + + Must contain from 1 to 255 alphanumeric characters or hyphens. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + :type sns_topic_arn: string + :param sns_topic_arn: The Amazon Resource Name (ARN) of the Amazon SNS + topic used to transmit the event notifications. The ARN is created + by Amazon SNS when you create a topic and subscribe to it. + + :type source_type: string + :param source_type: The type of source that will be generating the + events. For example, if you want to be notified of events generated + by a cluster, you would set this parameter to cluster. If this + value is not specified, events are returned for all Amazon Redshift + objects in your AWS account. You must specify a source type in + order to specify source IDs. + Valid values: cluster, cluster-parameter-group, cluster-security-group, + and cluster-snapshot. + + :type source_ids: list + :param source_ids: A list of one or more identifiers of Amazon Redshift + source objects. All of the objects must be of the same type as was + specified in the source type parameter. The event subscription will + return only events generated by the specified objects. If not + specified, then events are returned for all objects within the + source type specified. + Example: my-cluster-1, my-cluster-2 + + Example: my-snapshot-20131010 + + :type event_categories: list + :param event_categories: Specifies the Amazon Redshift event categories + to be published by the event notification subscription. + Values: Configuration, Management, Monitoring, Security + + :type severity: string + :param severity: Specifies the Amazon Redshift event severity to be + published by the event notification subscription. + Values: ERROR, INFO + + :type enabled: boolean + :param enabled: A Boolean value; set to `True` to activate the + subscription, set to `False` to create the subscription but not + active it. + + """ + params = { + 'SubscriptionName': subscription_name, + 'SnsTopicArn': sns_topic_arn, + } + if source_type is not None: + params['SourceType'] = source_type + if source_ids is not None: + self.build_list_params(params, + source_ids, + 'SourceIds.member') + if event_categories is not None: + self.build_list_params(params, + event_categories, + 'EventCategories.member') + if severity is not None: + params['Severity'] = severity + if enabled is not None: + params['Enabled'] = str( + enabled).lower() + return self._make_request( + action='CreateEventSubscription', + verb='POST', + path='/', params=params) + + def create_hsm_client_certificate(self, + hsm_client_certificate_identifier): + """ + Creates an HSM client certificate that an Amazon Redshift + cluster will use to connect to the client's HSM in order to + store and retrieve the keys used to encrypt the cluster + databases. + + The command returns a public key, which you must store in the + HSM. In addition to creating the HSM certificate, you must + create an Amazon Redshift HSM configuration that provides a + cluster the information needed to store and use encryption + keys in the HSM. For more information, go to `Hardware + Security Modules`_ in the Amazon Redshift Management Guide. + + :type hsm_client_certificate_identifier: string + :param hsm_client_certificate_identifier: The identifier to be assigned + to the new HSM client certificate that the cluster will use to + connect to the HSM to use the database encryption keys. + + """ + params = { + 'HsmClientCertificateIdentifier': hsm_client_certificate_identifier, + } + return self._make_request( + action='CreateHsmClientCertificate', + verb='POST', + path='/', params=params) + + def create_hsm_configuration(self, hsm_configuration_identifier, + description, hsm_ip_address, + hsm_partition_name, hsm_partition_password, + hsm_server_public_certificate): + """ + Creates an HSM configuration that contains the information + required by an Amazon Redshift cluster to store and use + database encryption keys in a Hardware Security Module (HSM). + After creating the HSM configuration, you can specify it as a + parameter when creating a cluster. The cluster will then store + its encryption keys in the HSM. + + In addition to creating an HSM configuration, you must also + create an HSM client certificate. For more information, go to + `Hardware Security Modules`_ in the Amazon Redshift Management + Guide. + + :type hsm_configuration_identifier: string + :param hsm_configuration_identifier: The identifier to be assigned to + the new Amazon Redshift HSM configuration. + + :type description: string + :param description: A text description of the HSM configuration to be + created. + + :type hsm_ip_address: string + :param hsm_ip_address: The IP address that the Amazon Redshift cluster + must use to access the HSM. + + :type hsm_partition_name: string + :param hsm_partition_name: The name of the partition in the HSM where + the Amazon Redshift clusters will store their database encryption + keys. + + :type hsm_partition_password: string + :param hsm_partition_password: The password required to access the HSM + partition. + + :type hsm_server_public_certificate: string + :param hsm_server_public_certificate: The HSMs public certificate file. + When using Cloud HSM, the file name is server.pem. + + """ + params = { + 'HsmConfigurationIdentifier': hsm_configuration_identifier, + 'Description': description, + 'HsmIpAddress': hsm_ip_address, + 'HsmPartitionName': hsm_partition_name, + 'HsmPartitionPassword': hsm_partition_password, + 'HsmServerPublicCertificate': hsm_server_public_certificate, + } + return self._make_request( + action='CreateHsmConfiguration', + verb='POST', + path='/', params=params) + + def delete_cluster(self, cluster_identifier, + skip_final_cluster_snapshot=None, + final_cluster_snapshot_identifier=None): + """ + Deletes a previously provisioned cluster. A successful + response from the web service indicates that the request was + received correctly. If a final cluster snapshot is requested + the status of the cluster will be "final-snapshot" while the + snapshot is being taken, then it's "deleting" once Amazon + Redshift begins deleting the cluster. Use DescribeClusters to + monitor the status of the deletion. The delete operation + cannot be canceled or reverted once submitted. For more + information about managing clusters, go to `Amazon Redshift + Clusters`_ in the Amazon Redshift Management Guide . + + :type cluster_identifier: string + :param cluster_identifier: + The identifier of the cluster to be deleted. + + Constraints: + + + + Must contain lowercase characters. + + Must contain from 1 to 63 alphanumeric characters or hyphens. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + :type skip_final_cluster_snapshot: boolean + :param skip_final_cluster_snapshot: Determines whether a final snapshot + of the cluster is created before Amazon Redshift deletes the + cluster. If `True`, a final cluster snapshot is not created. If + `False`, a final cluster snapshot is created before the cluster is + deleted. + Default: `False` + + :type final_cluster_snapshot_identifier: string + :param final_cluster_snapshot_identifier: + The identifier of the final snapshot that is to be created immediately + before deleting the cluster. If this parameter is provided, + SkipFinalClusterSnapshot must be `False`. + + Constraints: + + + + Must be 1 to 255 alphanumeric characters. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + """ + params = {'ClusterIdentifier': cluster_identifier, } + if skip_final_cluster_snapshot is not None: + params['SkipFinalClusterSnapshot'] = str( + skip_final_cluster_snapshot).lower() + if final_cluster_snapshot_identifier is not None: + params['FinalClusterSnapshotIdentifier'] = final_cluster_snapshot_identifier + return self._make_request( + action='DeleteCluster', + verb='POST', + path='/', params=params) + + def delete_cluster_parameter_group(self, parameter_group_name): + """ + Deletes a specified Amazon Redshift parameter group. + + :type parameter_group_name: string + :param parameter_group_name: + The name of the parameter group to be deleted. + + Constraints: + + + + Must be the name of an existing cluster parameter group. + + Cannot delete a default cluster parameter group. + + """ + params = {'ParameterGroupName': parameter_group_name, } + return self._make_request( + action='DeleteClusterParameterGroup', + verb='POST', + path='/', params=params) + + def delete_cluster_security_group(self, cluster_security_group_name): + """ + Deletes an Amazon Redshift security group. + + For information about managing security groups, go to `Amazon + Redshift Cluster Security Groups`_ in the Amazon Redshift + Management Guide . + + :type cluster_security_group_name: string + :param cluster_security_group_name: The name of the cluster security + group to be deleted. + + """ + params = { + 'ClusterSecurityGroupName': cluster_security_group_name, + } + return self._make_request( + action='DeleteClusterSecurityGroup', + verb='POST', + path='/', params=params) + + def delete_cluster_snapshot(self, snapshot_identifier, + snapshot_cluster_identifier=None): + """ + Deletes the specified manual snapshot. The snapshot must be in + the `available` state, with no other users authorized to + access the snapshot. + + Unlike automated snapshots, manual snapshots are retained even + after you delete your cluster. Amazon Redshift does not delete + your manual snapshots. You must delete manual snapshot + explicitly to avoid getting charged. If other accounts are + authorized to access the snapshot, you must revoke all of the + authorizations before you can delete the snapshot. + + :type snapshot_identifier: string + :param snapshot_identifier: The unique identifier of the manual + snapshot to be deleted. + Constraints: Must be the name of an existing snapshot that is in the + `available` state. + + :type snapshot_cluster_identifier: string + :param snapshot_cluster_identifier: The unique identifier of the + cluster the snapshot was created from. This parameter is required + if your IAM user has a policy containing a snapshot resource + element that specifies anything other than * for the cluster name. + Constraints: Must be the name of valid cluster. + + """ + params = {'SnapshotIdentifier': snapshot_identifier, } + if snapshot_cluster_identifier is not None: + params['SnapshotClusterIdentifier'] = snapshot_cluster_identifier + return self._make_request( + action='DeleteClusterSnapshot', + verb='POST', + path='/', params=params) + + def delete_cluster_subnet_group(self, cluster_subnet_group_name): + """ + Deletes the specified cluster subnet group. + + :type cluster_subnet_group_name: string + :param cluster_subnet_group_name: The name of the cluster subnet group + name to be deleted. + + """ + params = { + 'ClusterSubnetGroupName': cluster_subnet_group_name, + } + return self._make_request( + action='DeleteClusterSubnetGroup', + verb='POST', + path='/', params=params) + + def delete_event_subscription(self, subscription_name): + """ + Deletes an Amazon Redshift event notification subscription. + + :type subscription_name: string + :param subscription_name: The name of the Amazon Redshift event + notification subscription to be deleted. + + """ + params = {'SubscriptionName': subscription_name, } + return self._make_request( + action='DeleteEventSubscription', + verb='POST', + path='/', params=params) + + def delete_hsm_client_certificate(self, + hsm_client_certificate_identifier): + """ + Deletes the specified HSM client certificate. + + :type hsm_client_certificate_identifier: string + :param hsm_client_certificate_identifier: The identifier of the HSM + client certificate to be deleted. + + """ + params = { + 'HsmClientCertificateIdentifier': hsm_client_certificate_identifier, + } + return self._make_request( + action='DeleteHsmClientCertificate', + verb='POST', + path='/', params=params) + + def delete_hsm_configuration(self, hsm_configuration_identifier): + """ + Deletes the specified Amazon Redshift HSM configuration. + + :type hsm_configuration_identifier: string + :param hsm_configuration_identifier: The identifier of the Amazon + Redshift HSM configuration to be deleted. + + """ + params = { + 'HsmConfigurationIdentifier': hsm_configuration_identifier, + } + return self._make_request( + action='DeleteHsmConfiguration', + verb='POST', + path='/', params=params) + + def describe_cluster_parameter_groups(self, parameter_group_name=None, + max_records=None, marker=None): + """ + Returns a list of Amazon Redshift parameter groups, including + parameter groups you created and the default parameter group. + For each parameter group, the response includes the parameter + group name, description, and parameter group family name. You + can optionally specify a name to retrieve the description of a + specific parameter group. + + For more information about managing parameter groups, go to + `Amazon Redshift Parameter Groups`_ in the Amazon Redshift + Management Guide . + + :type parameter_group_name: string + :param parameter_group_name: The name of a specific parameter group for + which to return details. By default, details about all parameter + groups and the default parameter group are returned. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeClusterParameterGroups request exceed the value specified + in `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if parameter_group_name is not None: + params['ParameterGroupName'] = parameter_group_name + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeClusterParameterGroups', + verb='POST', + path='/', params=params) + + def describe_cluster_parameters(self, parameter_group_name, source=None, + max_records=None, marker=None): + """ + Returns a detailed list of parameters contained within the + specified Amazon Redshift parameter group. For each parameter + the response includes information such as parameter name, + description, data type, value, whether the parameter value is + modifiable, and so on. + + You can specify source filter to retrieve parameters of only + specific type. For example, to retrieve parameters that were + modified by a user action such as from + ModifyClusterParameterGroup, you can specify source equal to + user . + + For more information about managing parameter groups, go to + `Amazon Redshift Parameter Groups`_ in the Amazon Redshift + Management Guide . + + :type parameter_group_name: string + :param parameter_group_name: The name of a cluster parameter group for + which to return details. + + :type source: string + :param source: The parameter types to return. Specify `user` to show + parameters that are different form the default. Similarly, specify + `engine-default` to show parameters that are the same as the + default parameter group. + Default: All parameter types returned. + + Valid Values: `user` | `engine-default` + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeClusterParameters request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {'ParameterGroupName': parameter_group_name, } + if source is not None: + params['Source'] = source + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeClusterParameters', + verb='POST', + path='/', params=params) + + def describe_cluster_security_groups(self, + cluster_security_group_name=None, + max_records=None, marker=None): + """ + Returns information about Amazon Redshift security groups. If + the name of a security group is specified, the response will + contain only information about only that security group. + + For information about managing security groups, go to `Amazon + Redshift Cluster Security Groups`_ in the Amazon Redshift + Management Guide . + + :type cluster_security_group_name: string + :param cluster_security_group_name: The name of a cluster security + group for which you are requesting details. You can specify either + the **Marker** parameter or a **ClusterSecurityGroupName** + parameter, but not both. + Example: `securitygroup1` + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeClusterSecurityGroups request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + Constraints: You can specify either the **ClusterSecurityGroupName** + parameter or the **Marker** parameter, but not both. + + """ + params = {} + if cluster_security_group_name is not None: + params['ClusterSecurityGroupName'] = cluster_security_group_name + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeClusterSecurityGroups', + verb='POST', + path='/', params=params) + + def describe_cluster_snapshots(self, cluster_identifier=None, + snapshot_identifier=None, + snapshot_type=None, start_time=None, + end_time=None, max_records=None, + marker=None, owner_account=None): + """ + Returns one or more snapshot objects, which contain metadata + about your cluster snapshots. By default, this operation + returns information about all snapshots of all clusters that + are owned by you AWS customer account. No information is + returned for snapshots owned by inactive AWS customer + accounts. + + :type cluster_identifier: string + :param cluster_identifier: The identifier of the cluster for which + information about snapshots is requested. + + :type snapshot_identifier: string + :param snapshot_identifier: The snapshot identifier of the snapshot + about which to return information. + + :type snapshot_type: string + :param snapshot_type: The type of snapshots for which you are + requesting information. By default, snapshots of all types are + returned. + Valid Values: `automated` | `manual` + + :type start_time: timestamp + :param start_time: A value that requests only snapshots created at or + after the specified time. The time value is specified in ISO 8601 + format. For more information about ISO 8601, go to the `ISO8601 + Wikipedia page.`_ + Example: `2012-07-16T18:00:00Z` + + :type end_time: timestamp + :param end_time: A time value that requests only snapshots created at + or before the specified time. The time value is specified in ISO + 8601 format. For more information about ISO 8601, go to the + `ISO8601 Wikipedia page.`_ + Example: `2012-07-16T18:00:00Z` + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeClusterSnapshots request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + :type owner_account: string + :param owner_account: The AWS customer account used to create or copy + the snapshot. Use this field to filter the results to snapshots + owned by a particular account. To describe snapshots you own, + either specify your AWS customer account, or do not specify the + parameter. + + """ + params = {} + if cluster_identifier is not None: + params['ClusterIdentifier'] = cluster_identifier + if snapshot_identifier is not None: + params['SnapshotIdentifier'] = snapshot_identifier + if snapshot_type is not None: + params['SnapshotType'] = snapshot_type + if start_time is not None: + params['StartTime'] = start_time + if end_time is not None: + params['EndTime'] = end_time + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + if owner_account is not None: + params['OwnerAccount'] = owner_account + return self._make_request( + action='DescribeClusterSnapshots', + verb='POST', + path='/', params=params) + + def describe_cluster_subnet_groups(self, cluster_subnet_group_name=None, + max_records=None, marker=None): + """ + Returns one or more cluster subnet group objects, which + contain metadata about your cluster subnet groups. By default, + this operation returns information about all cluster subnet + groups that are defined in you AWS account. + + :type cluster_subnet_group_name: string + :param cluster_subnet_group_name: The name of the cluster subnet group + for which information is requested. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeClusterSubnetGroups request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if cluster_subnet_group_name is not None: + params['ClusterSubnetGroupName'] = cluster_subnet_group_name + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeClusterSubnetGroups', + verb='POST', + path='/', params=params) + + def describe_cluster_versions(self, cluster_version=None, + cluster_parameter_group_family=None, + max_records=None, marker=None): + """ + Returns descriptions of the available Amazon Redshift cluster + versions. You can call this operation even before creating any + clusters to learn more about the Amazon Redshift versions. For + more information about managing clusters, go to `Amazon + Redshift Clusters`_ in the Amazon Redshift Management Guide + + :type cluster_version: string + :param cluster_version: The specific cluster version to return. + Example: `1.0` + + :type cluster_parameter_group_family: string + :param cluster_parameter_group_family: + The name of a specific cluster parameter group family to return details + for. + + Constraints: + + + + Must be 1 to 255 alphanumeric characters + + First character must be a letter + + Cannot end with a hyphen or contain two consecutive hyphens + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeClusterVersions request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if cluster_version is not None: + params['ClusterVersion'] = cluster_version + if cluster_parameter_group_family is not None: + params['ClusterParameterGroupFamily'] = cluster_parameter_group_family + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeClusterVersions', + verb='POST', + path='/', params=params) + + def describe_clusters(self, cluster_identifier=None, max_records=None, + marker=None): + """ + Returns properties of provisioned clusters including general + cluster properties, cluster database properties, maintenance + and backup properties, and security and access properties. + This operation supports pagination. For more information about + managing clusters, go to `Amazon Redshift Clusters`_ in the + Amazon Redshift Management Guide . + + :type cluster_identifier: string + :param cluster_identifier: The unique identifier of a cluster whose + properties you are requesting. This parameter is case sensitive. + The default is that all clusters defined for an account are returned. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeClusters request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + Constraints: You can specify either the **ClusterIdentifier** parameter + or the **Marker** parameter, but not both. + + """ + params = {} + if cluster_identifier is not None: + params['ClusterIdentifier'] = cluster_identifier + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeClusters', + verb='POST', + path='/', params=params) + + def describe_default_cluster_parameters(self, parameter_group_family, + max_records=None, marker=None): + """ + Returns a list of parameter settings for the specified + parameter group family. + + For more information about managing parameter groups, go to + `Amazon Redshift Parameter Groups`_ in the Amazon Redshift + Management Guide . + + :type parameter_group_family: string + :param parameter_group_family: The name of the cluster parameter group + family. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeDefaultClusterParameters request exceed the value specified + in `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {'ParameterGroupFamily': parameter_group_family, } + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeDefaultClusterParameters', + verb='POST', + path='/', params=params) + + def describe_event_categories(self, source_type=None): + """ + Displays a list of event categories for all event source + types, or for a specified source type. For a list of the event + categories and source types, go to `Amazon Redshift Event + Notifications`_. + + :type source_type: string + :param source_type: The source type, such as cluster or parameter + group, to which the described event categories apply. + Valid values: cluster, snapshot, parameter group, and security group. + + """ + params = {} + if source_type is not None: + params['SourceType'] = source_type + return self._make_request( + action='DescribeEventCategories', + verb='POST', + path='/', params=params) + + def describe_event_subscriptions(self, subscription_name=None, + max_records=None, marker=None): + """ + Lists descriptions of all the Amazon Redshift event + notifications subscription for a customer account. If you + specify a subscription name, lists the description for that + subscription. + + :type subscription_name: string + :param subscription_name: The name of the Amazon Redshift event + notification subscription to be described. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeEventSubscriptions request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if subscription_name is not None: + params['SubscriptionName'] = subscription_name + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeEventSubscriptions', + verb='POST', + path='/', params=params) + + def describe_events(self, source_identifier=None, source_type=None, + start_time=None, end_time=None, duration=None, + max_records=None, marker=None): + """ + Returns events related to clusters, security groups, + snapshots, and parameter groups for the past 14 days. Events + specific to a particular cluster, security group, snapshot or + parameter group can be obtained by providing the name as a + parameter. By default, the past hour of events are returned. + + :type source_identifier: string + :param source_identifier: + The identifier of the event source for which events will be returned. + If this parameter is not specified, then all sources are included + in the response. + + Constraints: + + If SourceIdentifier is supplied, SourceType must also be provided. + + + + Specify a cluster identifier when SourceType is `cluster`. + + Specify a cluster security group name when SourceType is `cluster- + security-group`. + + Specify a cluster parameter group name when SourceType is `cluster- + parameter-group`. + + Specify a cluster snapshot identifier when SourceType is `cluster- + snapshot`. + + :type source_type: string + :param source_type: + The event source to retrieve events for. If no value is specified, all + events are returned. + + Constraints: + + If SourceType is supplied, SourceIdentifier must also be provided. + + + + Specify `cluster` when SourceIdentifier is a cluster identifier. + + Specify `cluster-security-group` when SourceIdentifier is a cluster + security group name. + + Specify `cluster-parameter-group` when SourceIdentifier is a cluster + parameter group name. + + Specify `cluster-snapshot` when SourceIdentifier is a cluster + snapshot identifier. + + :type start_time: timestamp + :param start_time: The beginning of the time interval to retrieve + events for, specified in ISO 8601 format. For more information + about ISO 8601, go to the `ISO8601 Wikipedia page.`_ + Example: `2009-07-08T18:00Z` + + :type end_time: timestamp + :param end_time: The end of the time interval for which to retrieve + events, specified in ISO 8601 format. For more information about + ISO 8601, go to the `ISO8601 Wikipedia page.`_ + Example: `2009-07-08T18:00Z` + + :type duration: integer + :param duration: The number of minutes prior to the time of the request + for which to retrieve events. For example, if the request is sent + at 18:00 and you specify a duration of 60, then only events which + have occurred after 17:00 will be returned. + Default: `60` + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeEvents request exceed the value specified in `MaxRecords`, + AWS returns a value in the `Marker` field of the response. You can + retrieve the next set of response records by providing the returned + marker value in the `Marker` parameter and retrying the request. + + """ + params = {} + if source_identifier is not None: + params['SourceIdentifier'] = source_identifier + if source_type is not None: + params['SourceType'] = source_type + if start_time is not None: + params['StartTime'] = start_time + if end_time is not None: + params['EndTime'] = end_time + if duration is not None: + params['Duration'] = duration + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeEvents', + verb='POST', + path='/', params=params) + + def describe_hsm_client_certificates(self, + hsm_client_certificate_identifier=None, + max_records=None, marker=None): + """ + Returns information about the specified HSM client + certificate. If no certificate ID is specified, returns + information about all the HSM certificates owned by your AWS + customer account. + + :type hsm_client_certificate_identifier: string + :param hsm_client_certificate_identifier: The identifier of a specific + HSM client certificate for which you want information. If no + identifier is specified, information is returned for all HSM client + certificates owned by your AWS customer account. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeHsmClientCertificates request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if hsm_client_certificate_identifier is not None: + params['HsmClientCertificateIdentifier'] = hsm_client_certificate_identifier + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeHsmClientCertificates', + verb='POST', + path='/', params=params) + + def describe_hsm_configurations(self, hsm_configuration_identifier=None, + max_records=None, marker=None): + """ + Returns information about the specified Amazon Redshift HSM + configuration. If no configuration ID is specified, returns + information about all the HSM configurations owned by your AWS + customer account. + + :type hsm_configuration_identifier: string + :param hsm_configuration_identifier: The identifier of a specific + Amazon Redshift HSM configuration to be described. If no identifier + is specified, information is returned for all HSM configurations + owned by your AWS customer account. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeHsmConfigurations request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if hsm_configuration_identifier is not None: + params['HsmConfigurationIdentifier'] = hsm_configuration_identifier + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeHsmConfigurations', + verb='POST', + path='/', params=params) + + def describe_logging_status(self, cluster_identifier): + """ + Describes whether information, such as queries and connection + attempts, is being logged for the specified Amazon Redshift + cluster. + + :type cluster_identifier: string + :param cluster_identifier: The identifier of the cluster to get the + logging status from. + Example: `examplecluster` + + """ + params = {'ClusterIdentifier': cluster_identifier, } + return self._make_request( + action='DescribeLoggingStatus', + verb='POST', + path='/', params=params) + + def describe_orderable_cluster_options(self, cluster_version=None, + node_type=None, max_records=None, + marker=None): + """ + Returns a list of orderable cluster options. Before you create + a new cluster you can use this operation to find what options + are available, such as the EC2 Availability Zones (AZ) in the + specific AWS region that you can specify, and the node types + you can request. The node types differ by available storage, + memory, CPU and price. With the cost involved you might want + to obtain a list of cluster options in the specific region and + specify values when creating a cluster. For more information + about managing clusters, go to `Amazon Redshift Clusters`_ in + the Amazon Redshift Management Guide + + :type cluster_version: string + :param cluster_version: The version filter value. Specify this + parameter to show only the available offerings matching the + specified version. + Default: All versions. + + Constraints: Must be one of the version returned from + DescribeClusterVersions. + + :type node_type: string + :param node_type: The node type filter value. Specify this parameter to + show only the available offerings matching the specified node type. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeOrderableClusterOptions request exceed the value specified + in `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if cluster_version is not None: + params['ClusterVersion'] = cluster_version + if node_type is not None: + params['NodeType'] = node_type + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeOrderableClusterOptions', + verb='POST', + path='/', params=params) + + def describe_reserved_node_offerings(self, + reserved_node_offering_id=None, + max_records=None, marker=None): + """ + Returns a list of the available reserved node offerings by + Amazon Redshift with their descriptions including the node + type, the fixed and recurring costs of reserving the node and + duration the node will be reserved for you. These descriptions + help you determine which reserve node offering you want to + purchase. You then use the unique offering ID in you call to + PurchaseReservedNodeOffering to reserve one or more nodes for + your Amazon Redshift cluster. + + For more information about managing parameter groups, go to + `Purchasing Reserved Nodes`_ in the Amazon Redshift Management + Guide . + + :type reserved_node_offering_id: string + :param reserved_node_offering_id: The unique identifier for the + offering. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeReservedNodeOfferings request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if reserved_node_offering_id is not None: + params['ReservedNodeOfferingId'] = reserved_node_offering_id + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeReservedNodeOfferings', + verb='POST', + path='/', params=params) + + def describe_reserved_nodes(self, reserved_node_id=None, + max_records=None, marker=None): + """ + Returns the descriptions of the reserved nodes. + + :type reserved_node_id: string + :param reserved_node_id: Identifier for the node reservation. + + :type max_records: integer + :param max_records: The maximum number of response records to return in + each call. If the number of remaining response records exceeds the + specified `MaxRecords` value, a value is returned in a `marker` + field of the response. You can retrieve the next set of records by + retrying the command with the returned marker value. + Default: `100` + + Constraints: minimum 20, maximum 100. + + :type marker: string + :param marker: An optional parameter that specifies the starting point + to return a set of response records. When the results of a + DescribeReservedNodes request exceed the value specified in + `MaxRecords`, AWS returns a value in the `Marker` field of the + response. You can retrieve the next set of response records by + providing the returned marker value in the `Marker` parameter and + retrying the request. + + """ + params = {} + if reserved_node_id is not None: + params['ReservedNodeId'] = reserved_node_id + if max_records is not None: + params['MaxRecords'] = max_records + if marker is not None: + params['Marker'] = marker + return self._make_request( + action='DescribeReservedNodes', + verb='POST', + path='/', params=params) + + def describe_resize(self, cluster_identifier): + """ + Returns information about the last resize operation for the + specified cluster. If no resize operation has ever been + initiated for the specified cluster, a `HTTP 404` error is + returned. If a resize operation was initiated and completed, + the status of the resize remains as `SUCCEEDED` until the next + resize. + + A resize operation can be requested using ModifyCluster and + specifying a different number or type of nodes for the + cluster. + + :type cluster_identifier: string + :param cluster_identifier: The unique identifier of a cluster whose + resize progress you are requesting. This parameter isn't case- + sensitive. + By default, resize operations for all clusters defined for an AWS + account are returned. + + """ + params = {'ClusterIdentifier': cluster_identifier, } + return self._make_request( + action='DescribeResize', + verb='POST', + path='/', params=params) + + def disable_logging(self, cluster_identifier): + """ + Stops logging information, such as queries and connection + attempts, for the specified Amazon Redshift cluster. + + :type cluster_identifier: string + :param cluster_identifier: The identifier of the cluster on which + logging is to be stopped. + Example: `examplecluster` + + """ + params = {'ClusterIdentifier': cluster_identifier, } + return self._make_request( + action='DisableLogging', + verb='POST', + path='/', params=params) + + def disable_snapshot_copy(self, cluster_identifier): + """ + Disables the automatic copying of snapshots from one region to + another region for a specified cluster. + + :type cluster_identifier: string + :param cluster_identifier: The unique identifier of the source cluster + that you want to disable copying of snapshots to a destination + region. + Constraints: Must be the valid name of an existing cluster that has + cross-region snapshot copy enabled. + + """ + params = {'ClusterIdentifier': cluster_identifier, } + return self._make_request( + action='DisableSnapshotCopy', + verb='POST', + path='/', params=params) + + def enable_logging(self, cluster_identifier, bucket_name, + s3_key_prefix=None): + """ + Starts logging information, such as queries and connection + attempts, for the specified Amazon Redshift cluster. + + :type cluster_identifier: string + :param cluster_identifier: The identifier of the cluster on which + logging is to be started. + Example: `examplecluster` + + :type bucket_name: string + :param bucket_name: + The name of an existing S3 bucket where the log files are to be stored. + + Constraints: + + + + Must be in the same region as the cluster + + The cluster must have read bucket and put object permissions + + :type s3_key_prefix: string + :param s3_key_prefix: + The prefix applied to the log file names. + + Constraints: + + + + Cannot exceed 512 characters + + Cannot contain spaces( ), double quotes ("), single quotes ('), a + backslash (\), or control characters. The hexadecimal codes for + invalid characters are: + + + x00 to x20 + + x22 + + x27 + + x5c + + x7f or larger + + """ + params = { + 'ClusterIdentifier': cluster_identifier, + 'BucketName': bucket_name, + } + if s3_key_prefix is not None: + params['S3KeyPrefix'] = s3_key_prefix + return self._make_request( + action='EnableLogging', + verb='POST', + path='/', params=params) + + def enable_snapshot_copy(self, cluster_identifier, destination_region, + retention_period=None): + """ + Enables the automatic copy of snapshots from one region to + another region for a specified cluster. + + :type cluster_identifier: string + :param cluster_identifier: The unique identifier of the source cluster + to copy snapshots from. + Constraints: Must be the valid name of an existing cluster that does + not already have cross-region snapshot copy enabled. + + :type destination_region: string + :param destination_region: The destination region that you want to copy + snapshots to. + Constraints: Must be the name of a valid region. For more information, + see `Regions and Endpoints`_ in the Amazon Web Services General + Reference. + + :type retention_period: integer + :param retention_period: The number of days to retain automated + snapshots in the destination region after they are copied from the + source region. + Default: 7. + + Constraints: Must be at least 1 and no more than 35. + + """ + params = { + 'ClusterIdentifier': cluster_identifier, + 'DestinationRegion': destination_region, + } + if retention_period is not None: + params['RetentionPeriod'] = retention_period + return self._make_request( + action='EnableSnapshotCopy', + verb='POST', + path='/', params=params) + + def modify_cluster(self, cluster_identifier, cluster_type=None, + node_type=None, number_of_nodes=None, + cluster_security_groups=None, + vpc_security_group_ids=None, + master_user_password=None, + cluster_parameter_group_name=None, + automated_snapshot_retention_period=None, + preferred_maintenance_window=None, + cluster_version=None, allow_version_upgrade=None, + hsm_client_certificate_identifier=None, + hsm_configuration_identifier=None, + new_cluster_identifier=None): + """ + Modifies the settings for a cluster. For example, you can add + another security or parameter group, update the preferred + maintenance window, or change the master user password. + Resetting a cluster password or modifying the security groups + associated with a cluster do not need a reboot. However, + modifying a parameter group requires a reboot for parameters + to take effect. For more information about managing clusters, + go to `Amazon Redshift Clusters`_ in the Amazon Redshift + Management Guide + + You can also change node type and the number of nodes to scale + up or down the cluster. When resizing a cluster, you must + specify both the number of nodes and the node type even if one + of the parameters does not change. If you specify the same + number of nodes and node type that are already configured for + the cluster, an error is returned. + + :type cluster_identifier: string + :param cluster_identifier: The unique identifier of the cluster to be + modified. + Example: `examplecluster` + + :type cluster_type: string + :param cluster_type: The new cluster type. + When you submit your cluster resize request, your existing cluster goes + into a read-only mode. After Amazon Redshift provisions a new + cluster based on your resize requirements, there will be outage for + a period while the old cluster is deleted and your connection is + switched to the new cluster. You can use DescribeResize to track + the progress of the resize request. + + Valid Values: ` multi-node | single-node ` + + :type node_type: string + :param node_type: The new node type of the cluster. If you specify a + new node type, you must also specify the number of nodes parameter + also. + When you submit your request to resize a cluster, Amazon Redshift sets + access permissions for the cluster to read-only. After Amazon + Redshift provisions a new cluster according to your resize + requirements, there will be a temporary outage while the old + cluster is deleted and your connection is switched to the new + cluster. When the new connection is complete, the original access + permissions for the cluster are restored. You can use the + DescribeResize to track the progress of the resize request. + + Valid Values: ` dw1.xlarge` | `dw1.8xlarge` | `dw2.large` | + `dw2.8xlarge`. + + :type number_of_nodes: integer + :param number_of_nodes: The new number of nodes of the cluster. If you + specify a new number of nodes, you must also specify the node type + parameter also. + When you submit your request to resize a cluster, Amazon Redshift sets + access permissions for the cluster to read-only. After Amazon + Redshift provisions a new cluster according to your resize + requirements, there will be a temporary outage while the old + cluster is deleted and your connection is switched to the new + cluster. When the new connection is complete, the original access + permissions for the cluster are restored. You can use + DescribeResize to track the progress of the resize request. + + Valid Values: Integer greater than `0`. + + :type cluster_security_groups: list + :param cluster_security_groups: + A list of cluster security groups to be authorized on this cluster. + This change is asynchronously applied as soon as possible. + + Security groups currently associated with the cluster, and not in the + list of groups to apply, will be revoked from the cluster. + + Constraints: + + + + Must be 1 to 255 alphanumeric characters or hyphens + + First character must be a letter + + Cannot end with a hyphen or contain two consecutive hyphens + + :type vpc_security_group_ids: list + :param vpc_security_group_ids: A list of virtual private cloud (VPC) + security groups to be associated with the cluster. + + :type master_user_password: string + :param master_user_password: + The new password for the cluster master user. This change is + asynchronously applied as soon as possible. Between the time of the + request and the completion of the request, the `MasterUserPassword` + element exists in the `PendingModifiedValues` element of the + operation response. + + Default: Uses existing setting. + + Constraints: + + + + Must be between 8 and 64 characters in length. + + Must contain at least one uppercase letter. + + Must contain at least one lowercase letter. + + Must contain one number. + + Can be any printable ASCII character (ASCII code 33 to 126) except ' + (single quote), " (double quote), \, /, @, or space. + + :type cluster_parameter_group_name: string + :param cluster_parameter_group_name: The name of the cluster parameter + group to apply to this cluster. This change is applied only after + the cluster is rebooted. To reboot a cluster use RebootCluster. + Default: Uses existing setting. + + Constraints: The cluster parameter group must be in the same parameter + group family that matches the cluster version. + + :type automated_snapshot_retention_period: integer + :param automated_snapshot_retention_period: The number of days that + automated snapshots are retained. If the value is 0, automated + snapshots are disabled. Even if automated snapshots are disabled, + you can still create manual snapshots when you want with + CreateClusterSnapshot. + If you decrease the automated snapshot retention period from its + current value, existing automated snapshots that fall outside of + the new retention period will be immediately deleted. + + Default: Uses existing setting. + + Constraints: Must be a value from 0 to 35. + + :type preferred_maintenance_window: string + :param preferred_maintenance_window: The weekly time range (in UTC) + during which system maintenance can occur, if necessary. If system + maintenance is necessary during the window, it may result in an + outage. + This maintenance window change is made immediately. If the new + maintenance window indicates the current time, there must be at + least 120 minutes between the current time and end of the window in + order to ensure that pending changes are applied. + + Default: Uses existing setting. + + Format: ddd:hh24:mi-ddd:hh24:mi, for example `wed:07:30-wed:08:00`. + + Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun + + Constraints: Must be at least 30 minutes. + + :type cluster_version: string + :param cluster_version: The new version number of the Amazon Redshift + engine to upgrade to. + For major version upgrades, if a non-default cluster parameter group is + currently in use, a new cluster parameter group in the cluster + parameter group family for the new version must be specified. The + new cluster parameter group can be the default for that cluster + parameter group family. For more information about managing + parameter groups, go to `Amazon Redshift Parameter Groups`_ in the + Amazon Redshift Management Guide . + + Example: `1.0` + + :type allow_version_upgrade: boolean + :param allow_version_upgrade: If `True`, upgrades will be applied + automatically to the cluster during the maintenance window. + Default: `False` + + :type hsm_client_certificate_identifier: string + :param hsm_client_certificate_identifier: Specifies the name of the HSM + client certificate the Amazon Redshift cluster uses to retrieve the + data encryption keys stored in an HSM. + + :type hsm_configuration_identifier: string + :param hsm_configuration_identifier: Specifies the name of the HSM + configuration that contains the information the Amazon Redshift + cluster can use to retrieve and store keys in an HSM. + + :type new_cluster_identifier: string + :param new_cluster_identifier: The new identifier for the cluster. + Constraints: + + + + Must contain from 1 to 63 alphanumeric characters or hyphens. + + Alphabetic characters must be lowercase. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + Must be unique for all clusters within an AWS account. + + + Example: `examplecluster` + + """ + params = {'ClusterIdentifier': cluster_identifier, } + if cluster_type is not None: + params['ClusterType'] = cluster_type + if node_type is not None: + params['NodeType'] = node_type + if number_of_nodes is not None: + params['NumberOfNodes'] = number_of_nodes + if cluster_security_groups is not None: + self.build_list_params(params, + cluster_security_groups, + 'ClusterSecurityGroups.member') + if vpc_security_group_ids is not None: + self.build_list_params(params, + vpc_security_group_ids, + 'VpcSecurityGroupIds.member') + if master_user_password is not None: + params['MasterUserPassword'] = master_user_password + if cluster_parameter_group_name is not None: + params['ClusterParameterGroupName'] = cluster_parameter_group_name + if automated_snapshot_retention_period is not None: + params['AutomatedSnapshotRetentionPeriod'] = automated_snapshot_retention_period + if preferred_maintenance_window is not None: + params['PreferredMaintenanceWindow'] = preferred_maintenance_window + if cluster_version is not None: + params['ClusterVersion'] = cluster_version + if allow_version_upgrade is not None: + params['AllowVersionUpgrade'] = str( + allow_version_upgrade).lower() + if hsm_client_certificate_identifier is not None: + params['HsmClientCertificateIdentifier'] = hsm_client_certificate_identifier + if hsm_configuration_identifier is not None: + params['HsmConfigurationIdentifier'] = hsm_configuration_identifier + if new_cluster_identifier is not None: + params['NewClusterIdentifier'] = new_cluster_identifier + return self._make_request( + action='ModifyCluster', + verb='POST', + path='/', params=params) + + def modify_cluster_parameter_group(self, parameter_group_name, + parameters): + """ + Modifies the parameters of a parameter group. + + For more information about managing parameter groups, go to + `Amazon Redshift Parameter Groups`_ in the Amazon Redshift + Management Guide . + + :type parameter_group_name: string + :param parameter_group_name: The name of the parameter group to be + modified. + + :type parameters: list + :param parameters: An array of parameters to be modified. A maximum of + 20 parameters can be modified in a single request. + For each parameter to be modified, you must supply at least the + parameter name and parameter value; other name-value pairs of the + parameter are optional. + + For the workload management (WLM) configuration, you must supply all + the name-value pairs in the wlm_json_configuration parameter. + + """ + params = {'ParameterGroupName': parameter_group_name, } + self.build_complex_list_params( + params, parameters, + 'Parameters.member', + ('ParameterName', 'ParameterValue', 'Description', 'Source', 'DataType', 'AllowedValues', 'IsModifiable', 'MinimumEngineVersion')) + return self._make_request( + action='ModifyClusterParameterGroup', + verb='POST', + path='/', params=params) + + def modify_cluster_subnet_group(self, cluster_subnet_group_name, + subnet_ids, description=None): + """ + Modifies a cluster subnet group to include the specified list + of VPC subnets. The operation replaces the existing list of + subnets with the new list of subnets. + + :type cluster_subnet_group_name: string + :param cluster_subnet_group_name: The name of the subnet group to be + modified. + + :type description: string + :param description: A text description of the subnet group to be + modified. + + :type subnet_ids: list + :param subnet_ids: An array of VPC subnet IDs. A maximum of 20 subnets + can be modified in a single request. + + """ + params = { + 'ClusterSubnetGroupName': cluster_subnet_group_name, + } + self.build_list_params(params, + subnet_ids, + 'SubnetIds.member') + if description is not None: + params['Description'] = description + return self._make_request( + action='ModifyClusterSubnetGroup', + verb='POST', + path='/', params=params) + + def modify_event_subscription(self, subscription_name, + sns_topic_arn=None, source_type=None, + source_ids=None, event_categories=None, + severity=None, enabled=None): + """ + Modifies an existing Amazon Redshift event notification + subscription. + + :type subscription_name: string + :param subscription_name: The name of the modified Amazon Redshift + event notification subscription. + + :type sns_topic_arn: string + :param sns_topic_arn: The Amazon Resource Name (ARN) of the SNS topic + to be used by the event notification subscription. + + :type source_type: string + :param source_type: The type of source that will be generating the + events. For example, if you want to be notified of events generated + by a cluster, you would set this parameter to cluster. If this + value is not specified, events are returned for all Amazon Redshift + objects in your AWS account. You must specify a source type in + order to specify source IDs. + Valid values: cluster, cluster-parameter-group, cluster-security-group, + and cluster-snapshot. + + :type source_ids: list + :param source_ids: A list of one or more identifiers of Amazon Redshift + source objects. All of the objects must be of the same type as was + specified in the source type parameter. The event subscription will + return only events generated by the specified objects. If not + specified, then events are returned for all objects within the + source type specified. + Example: my-cluster-1, my-cluster-2 + + Example: my-snapshot-20131010 + + :type event_categories: list + :param event_categories: Specifies the Amazon Redshift event categories + to be published by the event notification subscription. + Values: Configuration, Management, Monitoring, Security + + :type severity: string + :param severity: Specifies the Amazon Redshift event severity to be + published by the event notification subscription. + Values: ERROR, INFO + + :type enabled: boolean + :param enabled: A Boolean value indicating if the subscription is + enabled. `True` indicates the subscription is enabled + + """ + params = {'SubscriptionName': subscription_name, } + if sns_topic_arn is not None: + params['SnsTopicArn'] = sns_topic_arn + if source_type is not None: + params['SourceType'] = source_type + if source_ids is not None: + self.build_list_params(params, + source_ids, + 'SourceIds.member') + if event_categories is not None: + self.build_list_params(params, + event_categories, + 'EventCategories.member') + if severity is not None: + params['Severity'] = severity + if enabled is not None: + params['Enabled'] = str( + enabled).lower() + return self._make_request( + action='ModifyEventSubscription', + verb='POST', + path='/', params=params) + + def modify_snapshot_copy_retention_period(self, cluster_identifier, + retention_period): + """ + Modifies the number of days to retain automated snapshots in + the destination region after they are copied from the source + region. + + :type cluster_identifier: string + :param cluster_identifier: The unique identifier of the cluster for + which you want to change the retention period for automated + snapshots that are copied to a destination region. + Constraints: Must be the valid name of an existing cluster that has + cross-region snapshot copy enabled. + + :type retention_period: integer + :param retention_period: The number of days to retain automated + snapshots in the destination region after they are copied from the + source region. + If you decrease the retention period for automated snapshots that are + copied to a destination region, Amazon Redshift will delete any + existing automated snapshots that were copied to the destination + region and that fall outside of the new retention period. + + Constraints: Must be at least 1 and no more than 35. + + """ + params = { + 'ClusterIdentifier': cluster_identifier, + 'RetentionPeriod': retention_period, + } + return self._make_request( + action='ModifySnapshotCopyRetentionPeriod', + verb='POST', + path='/', params=params) + + def purchase_reserved_node_offering(self, reserved_node_offering_id, + node_count=None): + """ + Allows you to purchase reserved nodes. Amazon Redshift offers + a predefined set of reserved node offerings. You can purchase + one of the offerings. You can call the + DescribeReservedNodeOfferings API to obtain the available + reserved node offerings. You can call this API by providing a + specific reserved node offering and the number of nodes you + want to reserve. + + For more information about managing parameter groups, go to + `Purchasing Reserved Nodes`_ in the Amazon Redshift Management + Guide . + + :type reserved_node_offering_id: string + :param reserved_node_offering_id: The unique identifier of the reserved + node offering you want to purchase. + + :type node_count: integer + :param node_count: The number of reserved nodes you want to purchase. + Default: `1` + + """ + params = { + 'ReservedNodeOfferingId': reserved_node_offering_id, + } + if node_count is not None: + params['NodeCount'] = node_count + return self._make_request( + action='PurchaseReservedNodeOffering', + verb='POST', + path='/', params=params) + + def reboot_cluster(self, cluster_identifier): + """ + Reboots a cluster. This action is taken as soon as possible. + It results in a momentary outage to the cluster, during which + the cluster status is set to `rebooting`. A cluster event is + created when the reboot is completed. Any pending cluster + modifications (see ModifyCluster) are applied at this reboot. + For more information about managing clusters, go to `Amazon + Redshift Clusters`_ in the Amazon Redshift Management Guide + + :type cluster_identifier: string + :param cluster_identifier: The cluster identifier. + + """ + params = {'ClusterIdentifier': cluster_identifier, } + return self._make_request( + action='RebootCluster', + verb='POST', + path='/', params=params) + + def reset_cluster_parameter_group(self, parameter_group_name, + reset_all_parameters=None, + parameters=None): + """ + Sets one or more parameters of the specified parameter group + to their default values and sets the source values of the + parameters to "engine-default". To reset the entire parameter + group specify the ResetAllParameters parameter. For parameter + changes to take effect you must reboot any associated + clusters. + + :type parameter_group_name: string + :param parameter_group_name: The name of the cluster parameter group to + be reset. + + :type reset_all_parameters: boolean + :param reset_all_parameters: If `True`, all parameters in the specified + parameter group will be reset to their default values. + Default: `True` + + :type parameters: list + :param parameters: An array of names of parameters to be reset. If + ResetAllParameters option is not used, then at least one parameter + name must be supplied. + Constraints: A maximum of 20 parameters can be reset in a single + request. + + """ + params = {'ParameterGroupName': parameter_group_name, } + if reset_all_parameters is not None: + params['ResetAllParameters'] = str( + reset_all_parameters).lower() + if parameters is not None: + self.build_complex_list_params( + params, parameters, + 'Parameters.member', + ('ParameterName', 'ParameterValue', 'Description', 'Source', 'DataType', 'AllowedValues', 'IsModifiable', 'MinimumEngineVersion')) + return self._make_request( + action='ResetClusterParameterGroup', + verb='POST', + path='/', params=params) + + def restore_from_cluster_snapshot(self, cluster_identifier, + snapshot_identifier, + snapshot_cluster_identifier=None, + port=None, availability_zone=None, + allow_version_upgrade=None, + cluster_subnet_group_name=None, + publicly_accessible=None, + owner_account=None, + hsm_client_certificate_identifier=None, + hsm_configuration_identifier=None, + elastic_ip=None, + cluster_parameter_group_name=None, + cluster_security_groups=None, + vpc_security_group_ids=None, + preferred_maintenance_window=None, + automated_snapshot_retention_period=None): + """ + Creates a new cluster from a snapshot. Amazon Redshift creates + the resulting cluster with the same configuration as the + original cluster from which the snapshot was created, except + that the new cluster is created with the default cluster + security and parameter group. After Amazon Redshift creates + the cluster you can use the ModifyCluster API to associate a + different security group and different parameter group with + the restored cluster. + + If you restore a cluster into a VPC, you must provide a + cluster subnet group where you want the cluster restored. + + For more information about working with snapshots, go to + `Amazon Redshift Snapshots`_ in the Amazon Redshift Management + Guide . + + :type cluster_identifier: string + :param cluster_identifier: The identifier of the cluster that will be + created from restoring the snapshot. + + Constraints: + + + + Must contain from 1 to 63 alphanumeric characters or hyphens. + + Alphabetic characters must be lowercase. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + Must be unique for all clusters within an AWS account. + + :type snapshot_identifier: string + :param snapshot_identifier: The name of the snapshot from which to + create the new cluster. This parameter isn't case sensitive. + Example: `my-snapshot-id` + + :type snapshot_cluster_identifier: string + :param snapshot_cluster_identifier: The name of the cluster the source + snapshot was created from. This parameter is required if your IAM + user has a policy containing a snapshot resource element that + specifies anything other than * for the cluster name. + + :type port: integer + :param port: The port number on which the cluster accepts connections. + Default: The same port as the original cluster. + + Constraints: Must be between `1115` and `65535`. + + :type availability_zone: string + :param availability_zone: The Amazon EC2 Availability Zone in which to + restore the cluster. + Default: A random, system-chosen Availability Zone. + + Example: `us-east-1a` + + :type allow_version_upgrade: boolean + :param allow_version_upgrade: If `True`, upgrades can be applied during + the maintenance window to the Amazon Redshift engine that is + running on the cluster. + Default: `True` + + :type cluster_subnet_group_name: string + :param cluster_subnet_group_name: The name of the subnet group where + you want to cluster restored. + A snapshot of cluster in VPC can be restored only in VPC. Therefore, + you must provide subnet group name where you want the cluster + restored. + + :type publicly_accessible: boolean + :param publicly_accessible: If `True`, the cluster can be accessed from + a public network. + + :type owner_account: string + :param owner_account: The AWS customer account used to create or copy + the snapshot. Required if you are restoring a snapshot you do not + own, optional if you own the snapshot. + + :type hsm_client_certificate_identifier: string + :param hsm_client_certificate_identifier: Specifies the name of the HSM + client certificate the Amazon Redshift cluster uses to retrieve the + data encryption keys stored in an HSM. + + :type hsm_configuration_identifier: string + :param hsm_configuration_identifier: Specifies the name of the HSM + configuration that contains the information the Amazon Redshift + cluster can use to retrieve and store keys in an HSM. + + :type elastic_ip: string + :param elastic_ip: The elastic IP (EIP) address for the cluster. + + :type cluster_parameter_group_name: string + :param cluster_parameter_group_name: + The name of the parameter group to be associated with this cluster. + + Default: The default Amazon Redshift cluster parameter group. For + information about the default parameter group, go to `Working with + Amazon Redshift Parameter Groups`_. + + Constraints: + + + + Must be 1 to 255 alphanumeric characters or hyphens. + + First character must be a letter. + + Cannot end with a hyphen or contain two consecutive hyphens. + + :type cluster_security_groups: list + :param cluster_security_groups: A list of security groups to be + associated with this cluster. + Default: The default cluster security group for Amazon Redshift. + + Cluster security groups only apply to clusters outside of VPCs. + + :type vpc_security_group_ids: list + :param vpc_security_group_ids: A list of Virtual Private Cloud (VPC) + security groups to be associated with the cluster. + Default: The default VPC security group is associated with the cluster. + + VPC security groups only apply to clusters in VPCs. + + :type preferred_maintenance_window: string + :param preferred_maintenance_window: The weekly time range (in UTC) + during which automated cluster maintenance can occur. + Format: `ddd:hh24:mi-ddd:hh24:mi` + + Default: The value selected for the cluster from which the snapshot was + taken. The following list shows the time blocks for each region + from which the default maintenance windows are assigned. + + + + **US-East (Northern Virginia) Region:** 03:00-11:00 UTC + + **US-West (Oregon) Region** 06:00-14:00 UTC + + **EU (Ireland) Region** 22:00-06:00 UTC + + **Asia Pacific (Singapore) Region** 14:00-22:00 UTC + + **Asia Pacific (Sydney) Region** 12:00-20:00 UTC + + **Asia Pacific (Tokyo) Region** 17:00-03:00 UTC + + + Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun + + Constraints: Minimum 30-minute window. + + :type automated_snapshot_retention_period: integer + :param automated_snapshot_retention_period: The number of days that + automated snapshots are retained. If the value is 0, automated + snapshots are disabled. Even if automated snapshots are disabled, + you can still create manual snapshots when you want with + CreateClusterSnapshot. + Default: The value selected for the cluster from which the snapshot was + taken. + + Constraints: Must be a value from 0 to 35. + + """ + params = { + 'ClusterIdentifier': cluster_identifier, + 'SnapshotIdentifier': snapshot_identifier, + } + if snapshot_cluster_identifier is not None: + params['SnapshotClusterIdentifier'] = snapshot_cluster_identifier + if port is not None: + params['Port'] = port + if availability_zone is not None: + params['AvailabilityZone'] = availability_zone + if allow_version_upgrade is not None: + params['AllowVersionUpgrade'] = str( + allow_version_upgrade).lower() + if cluster_subnet_group_name is not None: + params['ClusterSubnetGroupName'] = cluster_subnet_group_name + if publicly_accessible is not None: + params['PubliclyAccessible'] = str( + publicly_accessible).lower() + if owner_account is not None: + params['OwnerAccount'] = owner_account + if hsm_client_certificate_identifier is not None: + params['HsmClientCertificateIdentifier'] = hsm_client_certificate_identifier + if hsm_configuration_identifier is not None: + params['HsmConfigurationIdentifier'] = hsm_configuration_identifier + if elastic_ip is not None: + params['ElasticIp'] = elastic_ip + if cluster_parameter_group_name is not None: + params['ClusterParameterGroupName'] = cluster_parameter_group_name + if cluster_security_groups is not None: + self.build_list_params(params, + cluster_security_groups, + 'ClusterSecurityGroups.member') + if vpc_security_group_ids is not None: + self.build_list_params(params, + vpc_security_group_ids, + 'VpcSecurityGroupIds.member') + if preferred_maintenance_window is not None: + params['PreferredMaintenanceWindow'] = preferred_maintenance_window + if automated_snapshot_retention_period is not None: + params['AutomatedSnapshotRetentionPeriod'] = automated_snapshot_retention_period + return self._make_request( + action='RestoreFromClusterSnapshot', + verb='POST', + path='/', params=params) + + def revoke_cluster_security_group_ingress(self, + cluster_security_group_name, + cidrip=None, + ec2_security_group_name=None, + ec2_security_group_owner_id=None): + """ + Revokes an ingress rule in an Amazon Redshift security group + for a previously authorized IP range or Amazon EC2 security + group. To add an ingress rule, see + AuthorizeClusterSecurityGroupIngress. For information about + managing security groups, go to `Amazon Redshift Cluster + Security Groups`_ in the Amazon Redshift Management Guide . + + :type cluster_security_group_name: string + :param cluster_security_group_name: The name of the security Group from + which to revoke the ingress rule. + + :type cidrip: string + :param cidrip: The IP range for which to revoke access. This range must + be a valid Classless Inter-Domain Routing (CIDR) block of IP + addresses. If `CIDRIP` is specified, `EC2SecurityGroupName` and + `EC2SecurityGroupOwnerId` cannot be provided. + + :type ec2_security_group_name: string + :param ec2_security_group_name: The name of the EC2 Security Group + whose access is to be revoked. If `EC2SecurityGroupName` is + specified, `EC2SecurityGroupOwnerId` must also be provided and + `CIDRIP` cannot be provided. + + :type ec2_security_group_owner_id: string + :param ec2_security_group_owner_id: The AWS account number of the owner + of the security group specified in the `EC2SecurityGroupName` + parameter. The AWS access key ID is not an acceptable value. If + `EC2SecurityGroupOwnerId` is specified, `EC2SecurityGroupName` must + also be provided. and `CIDRIP` cannot be provided. + Example: `111122223333` + + """ + params = { + 'ClusterSecurityGroupName': cluster_security_group_name, + } + if cidrip is not None: + params['CIDRIP'] = cidrip + if ec2_security_group_name is not None: + params['EC2SecurityGroupName'] = ec2_security_group_name + if ec2_security_group_owner_id is not None: + params['EC2SecurityGroupOwnerId'] = ec2_security_group_owner_id + return self._make_request( + action='RevokeClusterSecurityGroupIngress', + verb='POST', + path='/', params=params) + + def revoke_snapshot_access(self, snapshot_identifier, + account_with_restore_access, + snapshot_cluster_identifier=None): + """ + Removes the ability of the specified AWS customer account to + restore the specified snapshot. If the account is currently + restoring the snapshot, the restore will run to completion. + + For more information about working with snapshots, go to + `Amazon Redshift Snapshots`_ in the Amazon Redshift Management + Guide . + + :type snapshot_identifier: string + :param snapshot_identifier: The identifier of the snapshot that the + account can no longer access. + + :type snapshot_cluster_identifier: string + :param snapshot_cluster_identifier: The identifier of the cluster the + snapshot was created from. This parameter is required if your IAM + user has a policy containing a snapshot resource element that + specifies anything other than * for the cluster name. + + :type account_with_restore_access: string + :param account_with_restore_access: The identifier of the AWS customer + account that can no longer restore the specified snapshot. + + """ + params = { + 'SnapshotIdentifier': snapshot_identifier, + 'AccountWithRestoreAccess': account_with_restore_access, + } + if snapshot_cluster_identifier is not None: + params['SnapshotClusterIdentifier'] = snapshot_cluster_identifier + return self._make_request( + action='RevokeSnapshotAccess', + verb='POST', + path='/', params=params) + + def rotate_encryption_key(self, cluster_identifier): + """ + Rotates the encryption keys for a cluster. + + :type cluster_identifier: string + :param cluster_identifier: The unique identifier of the cluster that + you want to rotate the encryption keys for. + Constraints: Must be the name of valid cluster that has encryption + enabled. + + """ + params = {'ClusterIdentifier': cluster_identifier, } + return self._make_request( + action='RotateEncryptionKey', + verb='POST', + path='/', params=params) + + def _make_request(self, action, verb, path, params): + params['ContentType'] = 'JSON' + response = self.make_request(action=action, verb='POST', + path='/', params=params) + body = response.read().decode('utf-8') + boto.log.debug(body) + if response.status == 200: + return json.loads(body) + else: + json_body = json.loads(body) + fault_name = json_body.get('Error', {}).get('Code', None) + exception_class = self._faults.get(fault_name, self.ResponseError) + raise exception_class(response.status, response.reason, + body=json_body)