From 044b5f6d0d60ee716ffe3c965ef2884eecbf42f3 Mon Sep 17 00:00:00 2001 From: John Gardiner Myers Date: Sat, 24 Apr 2021 16:35:46 -0700 Subject: [PATCH] Allow disabling warm pool by setting WarmPool.MaxSize to 0 --- pkg/apis/kops/instancegroup.go | 4 ++++ pkg/model/awsmodel/autoscalinggroup.go | 4 ++-- pkg/model/iam.go | 4 ++-- upup/pkg/fi/nodeup/command.go | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/apis/kops/instancegroup.go b/pkg/apis/kops/instancegroup.go index 231091a738..75e9dff75d 100644 --- a/pkg/apis/kops/instancegroup.go +++ b/pkg/apis/kops/instancegroup.go @@ -199,6 +199,10 @@ type WarmPoolSpec struct { EnableLifecyleHook bool `json:"enableLifecycleHook,omitempty"` } +func (in *WarmPoolSpec) IsEnabled() bool { + return in != nil && (in.MaxSize == nil || *in.MaxSize != 0) +} + const ( // SpotAllocationStrategyLowestPrices indicates a lowest-price strategy SpotAllocationStrategyLowestPrices = "lowest-price" diff --git a/pkg/model/awsmodel/autoscalinggroup.go b/pkg/model/awsmodel/autoscalinggroup.go index da1cf999eb..5823220ad7 100644 --- a/pkg/model/awsmodel/autoscalinggroup.go +++ b/pkg/model/awsmodel/autoscalinggroup.go @@ -89,12 +89,12 @@ func (b *AutoscalingGroupModelBuilder) Build(c *fi.ModelBuilderContext) error { warmPool := ig.Spec.WarmPool { - enabled := fi.Bool(warmPool != nil) + enabled := fi.Bool(warmPool.IsEnabled()) warmPoolTask := &awstasks.WarmPool{ Name: &name, Enabled: enabled, } - if warmPool != nil { + if warmPool.IsEnabled() { warmPoolTask.MinSize = warmPool.MinSize warmPoolTask.MaxSize = warmPool.MaxSize diff --git a/pkg/model/iam.go b/pkg/model/iam.go index 4de8344288..6234609dd3 100644 --- a/pkg/model/iam.go +++ b/pkg/model/iam.go @@ -77,7 +77,7 @@ func (b *IAMModelBuilder) Build(c *fi.ModelBuilderContext) error { for profileARN, igRole := range sharedProfileARNsToIGRole { lchPermissions := false for _, ig := range b.InstanceGroups { - if ig.Spec.Role == igRole && ig.Spec.WarmPool != nil && ig.Spec.WarmPool.EnableLifecyleHook { + if ig.Spec.Role == igRole && ig.Spec.WarmPool.IsEnabled() && ig.Spec.WarmPool.EnableLifecyleHook { lchPermissions = true break @@ -102,7 +102,7 @@ func (b *IAMModelBuilder) Build(c *fi.ModelBuilderContext) error { for igRole := range managedRoles { warmPool := false for _, ig := range b.InstanceGroups { - if ig.Spec.Role == igRole && ig.Spec.WarmPool != nil && ig.Spec.WarmPool.EnableLifecyleHook { + if ig.Spec.Role == igRole && ig.Spec.WarmPool.IsEnabled() && ig.Spec.WarmPool.EnableLifecyleHook { warmPool = true break diff --git a/upup/pkg/fi/nodeup/command.go b/upup/pkg/fi/nodeup/command.go index e4de349689..f34bb346ac 100644 --- a/upup/pkg/fi/nodeup/command.go +++ b/upup/pkg/fi/nodeup/command.go @@ -361,7 +361,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error { klog.Exitf("error closing target: %v", err) } - if modelContext.InstanceGroup.Spec.WarmPool != nil && modelContext.InstanceGroup.Spec.WarmPool.EnableLifecyleHook { + if modelContext.InstanceGroup.Spec.WarmPool.IsEnabled() && modelContext.InstanceGroup.Spec.WarmPool.EnableLifecyleHook { if api.CloudProviderID(c.cluster.Spec.CloudProvider) == api.CloudProviderAWS { err := completeWarmingLifecycleAction(cloud.(awsup.AWSCloud), modelContext) if err != nil {