Skip to content

Commit

Permalink
Support updating autoscaling metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
justinsb committed Feb 20, 2018
1 parent c87b8ee commit 9aa64e3
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 14 deletions.
18 changes: 9 additions & 9 deletions pkg/model/awsmodel/autoscalinggroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,15 +177,15 @@ func (b *AutoscalingGroupModelBuilder) Build(c *fi.ModelBuilderContext) error {
Lifecycle: b.Lifecycle,

Granularity: s("1Minute"),
Metrics: []*string{
s("GroupMinSize"),
s("GroupMaxSize"),
s("GroupDesiredCapacity"),
s("GroupInServiceInstances"),
s("GroupPendingInstances"),
s("GroupStandbyInstances"),
s("GroupTerminatingInstances"),
s("GroupTotalInstances"),
Metrics: []string{
"GroupMinSize",
"GroupMaxSize",
"GroupDesiredCapacity",
"GroupInServiceInstances",
"GroupPendingInstances",
"GroupStandbyInstances",
"GroupTerminatingInstances",
"GroupTotalInstances",
},

LaunchConfiguration: launchConfiguration,
Expand Down
41 changes: 36 additions & 5 deletions upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ type AutoscalingGroup struct {
Tags map[string]string

Granularity *string
Metrics []*string
Metrics []string

LaunchConfiguration *LaunchConfiguration
}
Expand Down Expand Up @@ -121,6 +121,12 @@ func (e *AutoscalingGroup) Find(c *fi.Context) (*AutoscalingGroup, error) {
}
}

for _, enabledMetric := range g.EnabledMetrics {
actual.Metrics = append(actual.Metrics, aws.StringValue(enabledMetric.Metric))
actual.Granularity = enabledMetric.Granularity
}
sort.Strings(actual.Metrics)

if len(g.Tags) != 0 {
actual.Tags = make(map[string]string)
for _, tag := range g.Tags {
Expand All @@ -144,7 +150,17 @@ func (e *AutoscalingGroup) Find(c *fi.Context) (*AutoscalingGroup, error) {
return actual, nil
}

func (e *AutoscalingGroup) normalize(c *fi.Context) error {
sort.Strings(e.Metrics)

return nil
}

func (e *AutoscalingGroup) Run(c *fi.Context) error {
err := e.normalize(c)
if err != nil {
return err
}
c.Cloud.(awsup.AWSCloud).AddTags(e.Name, e.Tags)
return fi.DefaultDeltaRunMethod(e, c)
}
Expand Down Expand Up @@ -203,9 +219,8 @@ func (_ *AutoscalingGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Autos
_, err = t.Cloud.Autoscaling().EnableMetricsCollection(&autoscaling.EnableMetricsCollectionInput{
AutoScalingGroupName: e.Name,
Granularity: e.Granularity,
Metrics: e.Metrics,
Metrics: aws.StringSlice(e.Metrics),
})

if err != nil {
return fmt.Errorf("error enabling metrics collection for AutoscalingGroup: %v", err)
}
Expand Down Expand Up @@ -249,6 +264,22 @@ func (_ *AutoscalingGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Autos
changes.Tags = nil
}

if changes.Metrics != nil || changes.Granularity != nil {
// TODO: Support disabling metrics?
if len(e.Metrics) != 0 {
_, err := t.Cloud.Autoscaling().EnableMetricsCollection(&autoscaling.EnableMetricsCollectionInput{
AutoScalingGroupName: e.Name,
Granularity: e.Granularity,
Metrics: aws.StringSlice(e.Metrics),
})
if err != nil {
return fmt.Errorf("error enabling metrics collection for AutoscalingGroup: %v", err)
}
changes.Metrics = nil
changes.Granularity = nil
}
}

empty := &AutoscalingGroup{}
if !reflect.DeepEqual(empty, changes) {
glog.Warningf("cannot apply changes to AutoScalingGroup: %v", changes)
Expand Down Expand Up @@ -319,7 +350,7 @@ func (_ *AutoscalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, c
MaxSize: e.MaxSize,
LaunchConfigurationName: e.LaunchConfiguration.TerraformLink(),
MetricsGranularity: e.Granularity,
EnabledMetrics: e.Metrics,
EnabledMetrics: aws.StringSlice(e.Metrics),
}

for _, s := range e.Subnets {
Expand Down Expand Up @@ -411,7 +442,7 @@ func (_ *AutoscalingGroup) RenderCloudformation(t *cloudformation.Cloudformation
MetricsCollection: []*cloudformationASGMetricsCollection{
{
Granularity: e.Granularity,
Metrics: e.Metrics,
Metrics: aws.StringSlice(e.Metrics),
},
},
LaunchConfigurationName: e.LaunchConfiguration.CloudformationLink(),
Expand Down

0 comments on commit 9aa64e3

Please sign in to comment.