Fix boto/boto3 multi-param discrepancies
boto uses the param.member.N syntax, but boto3 replaces the generic .member with a more specific identifier. Example: boto: ClusterSecurityGroups.member.N boto3: ClusterSecurityGroups.ClusterSecurityGroupName.N This commit addresses this issue for the ClusterSecurityGroups, SubnetIds, and VpcSecurityGroupIds parameters.
This commit is contained in:
parent
5bb6b98f6d
commit
ab595279ad
2 changed files with 77 additions and 19 deletions
|
|
@ -66,6 +66,24 @@ class RedshiftResponse(BaseResponse):
|
|||
count += 1
|
||||
return unpacked_list
|
||||
|
||||
def _get_cluster_security_groups(self):
|
||||
cluster_security_groups = self._get_multi_param('ClusterSecurityGroups.member')
|
||||
if not cluster_security_groups:
|
||||
cluster_security_groups = self._get_multi_param('ClusterSecurityGroups.ClusterSecurityGroupName')
|
||||
return cluster_security_groups
|
||||
|
||||
def _get_vpc_security_group_ids(self):
|
||||
vpc_security_group_ids = self._get_multi_param('VpcSecurityGroupIds.member')
|
||||
if not vpc_security_group_ids:
|
||||
vpc_security_group_ids = self._get_multi_param('VpcSecurityGroupIds.VpcSecurityGroupId')
|
||||
return vpc_security_group_ids
|
||||
|
||||
def _get_subnet_ids(self):
|
||||
subnet_ids = self._get_multi_param('SubnetIds.member')
|
||||
if not subnet_ids:
|
||||
subnet_ids = self._get_multi_param('SubnetIds.SubnetIdentifier')
|
||||
return subnet_ids
|
||||
|
||||
def create_cluster(self):
|
||||
cluster_kwargs = {
|
||||
"cluster_identifier": self._get_param('ClusterIdentifier'),
|
||||
|
|
@ -74,8 +92,8 @@ class RedshiftResponse(BaseResponse):
|
|||
"master_user_password": self._get_param('MasterUserPassword'),
|
||||
"db_name": self._get_param('DBName'),
|
||||
"cluster_type": self._get_param('ClusterType'),
|
||||
"cluster_security_groups": self._get_multi_param('ClusterSecurityGroups.member'),
|
||||
"vpc_security_group_ids": self._get_multi_param('VpcSecurityGroupIds.member'),
|
||||
"cluster_security_groups": self._get_cluster_security_groups(),
|
||||
"vpc_security_group_ids": self._get_vpc_security_group_ids(),
|
||||
"cluster_subnet_group_name": self._get_param('ClusterSubnetGroupName'),
|
||||
"availability_zone": self._get_param('AvailabilityZone'),
|
||||
"preferred_maintenance_window": self._get_param('PreferredMaintenanceWindow'),
|
||||
|
|
@ -116,10 +134,8 @@ class RedshiftResponse(BaseResponse):
|
|||
"publicly_accessible": self._get_param("PubliclyAccessible"),
|
||||
"cluster_parameter_group_name": self._get_param(
|
||||
'ClusterParameterGroupName'),
|
||||
"cluster_security_groups": self._get_multi_param(
|
||||
'ClusterSecurityGroups.member'),
|
||||
"vpc_security_group_ids": self._get_multi_param(
|
||||
'VpcSecurityGroupIds.member'),
|
||||
"cluster_security_groups": self._get_cluster_security_groups(),
|
||||
"vpc_security_group_ids": self._get_vpc_security_group_ids(),
|
||||
"preferred_maintenance_window": self._get_param(
|
||||
'PreferredMaintenanceWindow'),
|
||||
"automated_snapshot_retention_period": self._get_int_param(
|
||||
|
|
@ -161,8 +177,8 @@ class RedshiftResponse(BaseResponse):
|
|||
"node_type": self._get_param('NodeType'),
|
||||
"master_user_password": self._get_param('MasterUserPassword'),
|
||||
"cluster_type": self._get_param('ClusterType'),
|
||||
"cluster_security_groups": self._get_multi_param('ClusterSecurityGroups.member'),
|
||||
"vpc_security_group_ids": self._get_multi_param('VpcSecurityGroupIds.member'),
|
||||
"cluster_security_groups": self._get_cluster_security_groups(),
|
||||
"vpc_security_group_ids": self._get_vpc_security_group_ids(),
|
||||
"cluster_subnet_group_name": self._get_param('ClusterSubnetGroupName'),
|
||||
"preferred_maintenance_window": self._get_param('PreferredMaintenanceWindow'),
|
||||
"cluster_parameter_group_name": self._get_param('ClusterParameterGroupName'),
|
||||
|
|
@ -173,12 +189,6 @@ class RedshiftResponse(BaseResponse):
|
|||
"publicly_accessible": self._get_param("PubliclyAccessible"),
|
||||
"encrypted": self._get_param("Encrypted"),
|
||||
}
|
||||
# There's a bug in boto3 where the security group ids are not passed
|
||||
# according to the AWS documentation
|
||||
if not request_kwargs['vpc_security_group_ids']:
|
||||
request_kwargs['vpc_security_group_ids'] = self._get_multi_param(
|
||||
'VpcSecurityGroupIds.VpcSecurityGroupId')
|
||||
|
||||
cluster_kwargs = {}
|
||||
# We only want parameters that were actually passed in, otherwise
|
||||
# we'll stomp all over our cluster metadata with None values.
|
||||
|
|
@ -217,11 +227,7 @@ class RedshiftResponse(BaseResponse):
|
|||
def create_cluster_subnet_group(self):
|
||||
cluster_subnet_group_name = self._get_param('ClusterSubnetGroupName')
|
||||
description = self._get_param('Description')
|
||||
subnet_ids = self._get_multi_param('SubnetIds.member')
|
||||
# There's a bug in boto3 where the subnet ids are not passed
|
||||
# according to the AWS documentation
|
||||
if not subnet_ids:
|
||||
subnet_ids = self._get_multi_param('SubnetIds.SubnetIdentifier')
|
||||
subnet_ids = self._get_subnet_ids()
|
||||
tags = self.unpack_complex_list_params('Tags.Tag', ('Key', 'Value'))
|
||||
|
||||
subnet_group = self.redshift_backend.create_cluster_subnet_group(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue