|
|
|
|
@ -37,7 +37,8 @@ func resourceAwsRedshiftCluster() *schema.Resource {
|
|
|
|
|
},
|
|
|
|
|
"cluster_type": &schema.Schema{
|
|
|
|
|
Type: schema.TypeString,
|
|
|
|
|
Required: true,
|
|
|
|
|
Optional: true,
|
|
|
|
|
Computed: true,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
"node_type": &schema.Schema{
|
|
|
|
|
@ -200,15 +201,19 @@ func resourceAwsRedshiftClusterCreate(d *schema.ResourceData, meta interface{})
|
|
|
|
|
Port: aws.Int64(int64(d.Get("port").(int))),
|
|
|
|
|
MasterUserPassword: aws.String(d.Get("master_password").(string)),
|
|
|
|
|
MasterUsername: aws.String(d.Get("master_username").(string)),
|
|
|
|
|
ClusterType: aws.String(d.Get("cluster_type").(string)),
|
|
|
|
|
ClusterVersion: aws.String(d.Get("cluster_version").(string)),
|
|
|
|
|
NodeType: aws.String(d.Get("node_type").(string)),
|
|
|
|
|
DBName: aws.String(d.Get("database_name").(string)),
|
|
|
|
|
AllowVersionUpgrade: aws.Bool(d.Get("allow_version_upgrade").(bool)),
|
|
|
|
|
}
|
|
|
|
|
if d.Get("cluster_type") == "multi-node" {
|
|
|
|
|
|
|
|
|
|
if v := d.Get("number_of_nodes").(int); v > 1 {
|
|
|
|
|
createOpts.ClusterType = aws.String("multi-node")
|
|
|
|
|
createOpts.NumberOfNodes = aws.Int64(int64(d.Get("number_of_nodes").(int)))
|
|
|
|
|
} else {
|
|
|
|
|
createOpts.ClusterType = aws.String("single-node")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if v := d.Get("cluster_security_groups").(*schema.Set); v.Len() > 0 {
|
|
|
|
|
createOpts.ClusterSecurityGroups = expandStringList(v.List())
|
|
|
|
|
}
|
|
|
|
|
@ -316,6 +321,11 @@ func resourceAwsRedshiftClusterRead(d *schema.ResourceData, meta interface{}) er
|
|
|
|
|
d.Set("preferred_maintenance_window", rsc.PreferredMaintenanceWindow)
|
|
|
|
|
d.Set("endpoint", aws.String(fmt.Sprintf("%s:%d", *rsc.Endpoint.Address, *rsc.Endpoint.Port)))
|
|
|
|
|
d.Set("cluster_parameter_group_name", rsc.ClusterParameterGroups[0].ParameterGroupName)
|
|
|
|
|
if len(rsc.ClusterNodes) > 1 {
|
|
|
|
|
d.Set("cluster_type", "multi-node")
|
|
|
|
|
} else {
|
|
|
|
|
d.Set("cluster_type", "single-node")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var vpcg []string
|
|
|
|
|
for _, g := range rsc.VpcSecurityGroups {
|
|
|
|
|
@ -356,9 +366,12 @@ func resourceAwsRedshiftClusterUpdate(d *schema.ResourceData, meta interface{})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if d.HasChange("number_of_nodes") {
|
|
|
|
|
log.Printf("[INFO] When changing the NumberOfNodes in a Redshift Cluster, NodeType is required")
|
|
|
|
|
req.NumberOfNodes = aws.Int64(int64(d.Get("number_of_nodes").(int)))
|
|
|
|
|
req.NodeType = aws.String(d.Get("node_type").(string))
|
|
|
|
|
if v := d.Get("number_of_nodes").(int); v > 1 {
|
|
|
|
|
req.ClusterType = aws.String("multi-node")
|
|
|
|
|
req.NumberOfNodes = aws.Int64(int64(d.Get("number_of_nodes").(int)))
|
|
|
|
|
} else {
|
|
|
|
|
req.ClusterType = aws.String("single-node")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if d.HasChange("cluster_security_groups") {
|
|
|
|
|
|