Skip to content

Commit

Permalink
Allow zero sized topology elements when autoscaling is enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
tobio committed Apr 26, 2022
1 parent 37a0129 commit 83651b3
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
9 changes: 8 additions & 1 deletion ec/ecresource/deploymentresource/elasticsearch_flatteners.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,18 @@ func flattenEsResources(in []*models.ElasticsearchResourceInfo, name string, rem
return result, nil
}

func isPotentiallySizedTopology(topology *models.ElasticsearchClusterTopologyElement, isAutoscaling bool) bool {
currentlySized := topology.Size != nil && topology.Size.Value != nil && *topology.Size.Value > 0
canBeSized := isAutoscaling && topology.AutoscalingMax != nil && topology.AutoscalingMax.Value != nil && *topology.AutoscalingMax.Value > 0

return currentlySized || canBeSized
}

func flattenEsTopology(plan *models.ElasticsearchClusterPlan) ([]interface{}, error) {
result := make([]interface{}, 0, len(plan.ClusterTopology))
for _, topology := range plan.ClusterTopology {
var m = make(map[string]interface{})
if topology.Size == nil || topology.Size.Value == nil || *topology.Size.Value == 0 {
if !isPotentiallySizedTopology(topology, plan.AutoscalingEnabled != nil && *plan.AutoscalingEnabled) {
continue
}

Expand Down
64 changes: 64 additions & 0 deletions ec/ecresource/deploymentresource/elasticsearch_flatteners_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,70 @@ func Test_flattenEsTopology(t *testing.T) {
"node_type_master": "true",
}},
},
{
name: "includes unsized autoscaling topologies",
args: args{plan: &models.ElasticsearchClusterPlan{
AutoscalingEnabled: ec.Bool(true),
ClusterTopology: []*models.ElasticsearchClusterTopologyElement{
{
ID: "hot_content",
ZoneCount: 1,
InstanceConfigurationID: "aws.data.highio.i3",
Size: &models.TopologySize{
Value: ec.Int32(4096), Resource: ec.String("memory"),
},
NodeType: &models.ElasticsearchNodeType{
Data: ec.Bool(true),
Ingest: ec.Bool(true),
Master: ec.Bool(true),
},
},
{
ID: "ml",
ZoneCount: 1,
InstanceConfigurationID: "aws.ml.m5",
Size: &models.TopologySize{
Value: ec.Int32(0), Resource: ec.String("memory"),
},
AutoscalingMax: &models.TopologySize{
Value: ec.Int32(8192), Resource: ec.String("memory"),
},
AutoscalingMin: &models.TopologySize{
Value: ec.Int32(0), Resource: ec.String("memory"),
},
},
},
}},
want: []interface{}{
map[string]interface{}{
"config": func() []interface{} { return nil }(),
"id": "hot_content",
"instance_configuration_id": "aws.data.highio.i3",
"size": "4g",
"size_resource": "memory",
"zone_count": int32(1),
"node_type_data": "true",
"node_type_ingest": "true",
"node_type_master": "true",
},
map[string]interface{}{
"config": func() []interface{} { return nil }(),
"id": "ml",
"instance_configuration_id": "aws.ml.m5",
"size": "0g",
"size_resource": "memory",
"zone_count": int32(1),
"autoscaling": []interface{}{
map[string]interface{}{
"max_size": "8g",
"max_size_resource": "memory",
"min_size": "0g",
"min_size_resource": "memory",
},
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down

0 comments on commit 83651b3

Please sign in to comment.