Skip to content

Commit

Permalink
Implement min-available
Browse files Browse the repository at this point in the history
  • Loading branch information
tgrondier committed Dec 18, 2024
1 parent ee65c4a commit 39606a7
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 0 deletions.
1 change: 1 addition & 0 deletions pkg/resources/instance_pool/attributes.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const (
AttrServiceOffering = "service_offering"
AttrSecurityGroupIDs = "security_group_ids"
AttrSize = "size"
AttrMinAvailable = "min_available"
AttrState = "state"
AttrTemplateID = "template_id"
AttrUserData = "user_data"
Expand Down
6 changes: 6 additions & 0 deletions pkg/resources/instance_pool/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ func DataSourceSchema() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
AttrMinAvailable: {
Description: "Minimum number of running Instances.",
Type: schema.TypeInt,
Computed: true,
},
AttrState: {
Description: "The pool state.",
Type: schema.TypeString,
Expand Down Expand Up @@ -314,6 +319,7 @@ func dsBuildData(pool *v3.InstancePool, zone string) (map[string]interface{}, er
}
data[AttrName] = pool.Name
data[AttrSize] = pool.Size
data[AttrMinAvailable] = pool.MinAvailable
data[AttrState] = pool.State
data[AttrTemplateID] = pool.Template.ID
data[AttrZone] = zone
Expand Down
21 changes: 21 additions & 0 deletions pkg/resources/instance_pool/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,13 @@ func Resource() *schema.Resource {
Required: true,
ValidateFunc: validation.IntAtLeast(1),
},
AttrMinAvailable: {
Description: "Minimum number of running Instances.",
Type: schema.TypeInt,
Computed: true,
Optional: true,
ValidateFunc: validation.IntAtLeast(0),
},
AttrState: {
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -289,6 +296,10 @@ func rCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag
i := int64(v.(int))
createPoolRequest.Size = i
}
if v, ok := d.GetOk(AttrMinAvailable); ok {
i := int64(v.(int))
createPoolRequest.MinAvailable = i
}

if v, ok := d.GetOk(AttrTemplateID); ok {
s := v.(string)
Expand Down Expand Up @@ -669,6 +680,12 @@ func rUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag
updated = true
}

if d.HasChange(AttrMinAvailable) {
v := int64(d.Get(AttrMinAvailable).(int))
updateRequest.MinAvailable = &v
updated = true
}

if updated {
op, err := client.UpdateInstancePool(ctx, v3.UUID(d.Id()), updateRequest)
if err != nil {
Expand Down Expand Up @@ -864,6 +881,10 @@ func rApply(ctx context.Context, client *v3.Client, d *schema.ResourceData, pool
return diag.FromErr(err)
}

if err := d.Set(AttrMinAvailable, pool.MinAvailable); err != nil {
return diag.FromErr(err)
}

if err := d.Set(AttrState, pool.State); err != nil {
return diag.FromErr(err)
}
Expand Down
9 changes: 9 additions & 0 deletions pkg/resources/instance_pool/resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ var (
rInstanceType = "standard.tiny"
rInstanceTypeUpdated = "standard.small"
rSize int64 = 1
rMinAvailable int64 = 0
rSizeUpdated = rSize * 2
rMinAvailableUpdated = rMinAvailable + 1
rUserData = acctest.RandString(10)
rUserDataUpdated = rUserData + "-updated"

Expand Down Expand Up @@ -62,6 +64,7 @@ resource "exoscale_instance_pool" "test" {
template_id = data.exoscale_template.ubuntu.id
instance_type = "%s"
size = %d
min_available = %d
disk_size = %d
ipv6 = true
anti_affinity_group_ids = [exoscale_anti_affinity_group.test.id]
Expand All @@ -83,6 +86,7 @@ resource "exoscale_instance_pool" "test" {
rDescription,
rInstanceType,
rSize,
rMinAvailable,
rDiskSize,
rInstancePrefix,
rUserData,
Expand Down Expand Up @@ -120,6 +124,7 @@ resource "exoscale_instance_pool" "test" {
template_id = data.exoscale_template.debian.id
instance_type = "%s"
size = %d
min_available = %d
disk_size = %d
ipv6 = false
key_pair = exoscale_ssh_key.test.name
Expand All @@ -143,6 +148,7 @@ resource "exoscale_instance_pool" "test" {
rDescriptionUpdated,
rInstanceTypeUpdated,
rSizeUpdated,
rMinAvailableUpdated,
rDiskSizeUpdated,
rUserDataUpdated,
rLabelValueUpdated,
Expand Down Expand Up @@ -202,6 +208,7 @@ func testResource(t *testing.T) {
instance_pool.AttrName: testutils.ValidateString(rName),
instance_pool.AttrSecurityGroupIDs + ".#": testutils.ValidateString("1"),
instance_pool.AttrSize: testutils.ValidateString(fmt.Sprint(rSize)),
instance_pool.AttrMinAvailable: testutils.ValidateString(fmt.Sprint(rMinAvailable)),
instance_pool.AttrState: validation.ToDiagFunc(validation.NoZeroValues),
instance_pool.AttrTemplateID: validation.ToDiagFunc(validation.IsUUID),
instance_pool.AttrUserData: testutils.ValidateString(rUserData),
Expand Down Expand Up @@ -256,6 +263,7 @@ func testResource(t *testing.T) {
instance_pool.AttrName: testutils.ValidateString(rNameUpdated),
instance_pool.AttrNetworkIDs + ".#": testutils.ValidateString("1"),
instance_pool.AttrSize: testutils.ValidateString(fmt.Sprint(rSizeUpdated)),
instance_pool.AttrMinAvailable: testutils.ValidateString(fmt.Sprint(rMinAvailableUpdated)),
instance_pool.AttrState: validation.ToDiagFunc(validation.NoZeroValues),
instance_pool.AttrUserData: testutils.ValidateString(rUserDataUpdated),
})),
Expand Down Expand Up @@ -291,6 +299,7 @@ func testResource(t *testing.T) {
instance_pool.AttrName: testutils.ValidateString(rNameUpdated),
instance_pool.AttrNetworkIDs + ".#": testutils.ValidateString("1"),
instance_pool.AttrSize: testutils.ValidateString(fmt.Sprint(rSizeUpdated)),
instance_pool.AttrMinAvailable: testutils.ValidateString(fmt.Sprint(rMinAvailableUpdated)),
instance_pool.AttrState: validation.ToDiagFunc(validation.NoZeroValues),
instance_pool.AttrUserData: testutils.ValidateString(rUserDataUpdated),
},
Expand Down

0 comments on commit 39606a7

Please sign in to comment.