From 2418c83252fe82a165a11970589d0782a119968d Mon Sep 17 00:00:00 2001 From: Steve Pulec Date: Sun, 23 Nov 2014 22:33:53 -0500 Subject: [PATCH] Fixes for VPC security groups. --- moto/redshift/models.py | 13 ++++++++++++- tests/test_redshift/test_redshift.py | 27 +++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/moto/redshift/models.py b/moto/redshift/models.py index d40ea0871..c5332215b 100644 --- a/moto/redshift/models.py +++ b/moto/redshift/models.py @@ -64,12 +64,23 @@ class Cluster(object): if security_group.cluster_security_group_name in self.cluster_security_groups ] + @property + def vpc_security_groups(self): + return [ + security_group for security_group + in self.redshift_backend.ec2_backend.describe_security_groups() + if security_group.id in self.vpc_security_group_ids + ] + def to_json(self): return { "MasterUsername": self.master_username, "MasterUserPassword": "****", "ClusterVersion": self.cluster_version, - "VpcSecurityGroups": [], + "VpcSecurityGroups": [{ + "Status": "active", + "VpcSecurityGroupId": group.id + } for group in self.vpc_security_groups], "ClusterSubnetGroupName": self.cluster_subnet_group_name, "AvailabilityZone": self.availability_zone, "ClusterStatus": "creating", diff --git a/tests/test_redshift/test_redshift.py b/tests/test_redshift/test_redshift.py index 881c65504..756cf0d9f 100644 --- a/tests/test_redshift/test_redshift.py +++ b/tests/test_redshift/test_redshift.py @@ -23,7 +23,6 @@ def test_create_cluster(): master_user_password="password", db_name="my_db", cluster_type="multi-node", - # vpc_security_group_ids=None, availability_zone="us-east-1d", preferred_maintenance_window="Mon:03:00-Mon:11:00", # cluster_parameter_group_name=None, @@ -94,7 +93,6 @@ def test_default_cluster_attibutes(): cluster = cluster_response['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0] cluster['DBName'].should.equal("dev") - # cluster['VpcSecurityGroups'].should.equal([]) cluster['ClusterSubnetGroupName'].should.equal(None) assert "us-east-" in cluster['AvailabilityZone'] cluster['PreferredMaintenanceWindow'].should.equal("Mon:03:00-Mon:03:30") @@ -159,6 +157,29 @@ def test_create_cluster_with_security_group(): set(group_names).should.equal(set(["security_group1", "security_group2"])) +@mock_redshift +@mock_ec2 +def test_create_cluster_with_vpc_security_groups(): + vpc_conn = boto.connect_vpc() + ec2_conn = boto.connect_ec2() + redshift_conn = boto.connect_redshift() + vpc = vpc_conn.create_vpc("10.0.0.0/16") + security_group = ec2_conn.create_security_group("vpc_security_group", "a group", vpc_id=vpc.id) + + redshift_conn.create_cluster( + "my_cluster", + node_type="dw.hs1.xlarge", + master_username="username", + master_user_password="password", + vpc_security_group_ids=[security_group.id], + ) + + cluster_response = redshift_conn.describe_clusters("my_cluster") + cluster = cluster_response['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0] + group_ids = [group['VpcSecurityGroupId'] for group in cluster['VpcSecurityGroups']] + list(group_ids).should.equal([security_group.id]) + + @mock_redshift def test_describe_non_existant_cluster(): conn = boto.redshift.connect_to_region("us-east-1") @@ -211,7 +232,6 @@ def test_modify_cluster(): node_type="dw.hs1.xlarge", number_of_nodes=2, cluster_security_groups="security_group", - # vpc_security_group_ids=None, master_user_password="new_password", # cluster_parameter_group_name=None, automated_snapshot_retention_period=7, @@ -226,7 +246,6 @@ def test_modify_cluster(): cluster['ClusterIdentifier'].should.equal("new_identifier") cluster['NodeType'].should.equal("dw.hs1.xlarge") cluster['ClusterSecurityGroups'][0]['ClusterSecurityGroupName'].should.equal("security_group") - # cluster['VpcSecurityGroups'].should.equal([]) cluster['PreferredMaintenanceWindow'].should.equal("Tue:03:00-Tue:11:00") # cluster['ClusterParameterGroups'].should.equal([]) cluster['AutomatedSnapshotRetentionPeriod'].should.equal(7)