forked from awslabs/goformation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
aws-autoscaling-autoscalinggroup.go
190 lines (164 loc) · 8.1 KB
/
aws-autoscaling-autoscalinggroup.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
package cloudformation
import (
"encoding/json"
"errors"
"fmt"
)
// AWSAutoScalingAutoScalingGroup AWS CloudFormation Resource (AWS::AutoScaling::AutoScalingGroup)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html
type AWSAutoScalingAutoScalingGroup struct {
// AvailabilityZones AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-availabilityzones
AvailabilityZones []string `json:"AvailabilityZones,omitempty"`
// Cooldown AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-cooldown
Cooldown string `json:"Cooldown,omitempty"`
// DesiredCapacity AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-desiredcapacity
DesiredCapacity string `json:"DesiredCapacity,omitempty"`
// HealthCheckGracePeriod AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-healthcheckgraceperiod
HealthCheckGracePeriod int `json:"HealthCheckGracePeriod,omitempty"`
// HealthCheckType AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-healthchecktype
HealthCheckType string `json:"HealthCheckType,omitempty"`
// InstanceId AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-instanceid
InstanceId string `json:"InstanceId,omitempty"`
// LaunchConfigurationName AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-launchconfigurationname
LaunchConfigurationName string `json:"LaunchConfigurationName,omitempty"`
// LoadBalancerNames AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-loadbalancernames
LoadBalancerNames []string `json:"LoadBalancerNames,omitempty"`
// MaxSize AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-maxsize
MaxSize string `json:"MaxSize,omitempty"`
// MetricsCollection AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-metricscollection
MetricsCollection []AWSAutoScalingAutoScalingGroup_MetricsCollection `json:"MetricsCollection,omitempty"`
// MinSize AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-minsize
MinSize string `json:"MinSize,omitempty"`
// NotificationConfigurations AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-notificationconfigurations
NotificationConfigurations []AWSAutoScalingAutoScalingGroup_NotificationConfiguration `json:"NotificationConfigurations,omitempty"`
// PlacementGroup AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-placementgroup
PlacementGroup string `json:"PlacementGroup,omitempty"`
// Tags AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-tags
Tags []AWSAutoScalingAutoScalingGroup_TagProperty `json:"Tags,omitempty"`
// TargetGroupARNs AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-targetgrouparns
TargetGroupARNs []string `json:"TargetGroupARNs,omitempty"`
// TerminationPolicies AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-termpolicy
TerminationPolicies []string `json:"TerminationPolicies,omitempty"`
// VPCZoneIdentifier AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-vpczoneidentifier
VPCZoneIdentifier []string `json:"VPCZoneIdentifier,omitempty"`
}
// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *AWSAutoScalingAutoScalingGroup) AWSCloudFormationType() string {
return "AWS::AutoScaling::AutoScalingGroup"
}
// MarshalJSON is a custom JSON marshalling hook that embeds this object into
// an AWS CloudFormation JSON resource's 'Properties' field and adds a 'Type'.
func (r *AWSAutoScalingAutoScalingGroup) MarshalJSON() ([]byte, error) {
type Properties AWSAutoScalingAutoScalingGroup
return json.Marshal(&struct {
Type string
Properties Properties
}{
Type: r.AWSCloudFormationType(),
Properties: (Properties)(*r),
})
}
// UnmarshalJSON is a custom JSON unmarshalling hook that strips the outer
// AWS CloudFormation resource object, and just keeps the 'Properties' field.
func (r *AWSAutoScalingAutoScalingGroup) UnmarshalJSON(b []byte) error {
type Properties AWSAutoScalingAutoScalingGroup
res := &struct {
Type string
Properties *Properties
}{}
if err := json.Unmarshal(b, &res); err != nil {
fmt.Printf("ERROR: %s\n", err)
return err
}
// If the resource has no Properties set, it could be nil
if res.Properties != nil {
*r = AWSAutoScalingAutoScalingGroup(*res.Properties)
}
return nil
}
// GetAllAWSAutoScalingAutoScalingGroupResources retrieves all AWSAutoScalingAutoScalingGroup items from an AWS CloudFormation template
func (t *Template) GetAllAWSAutoScalingAutoScalingGroupResources() map[string]AWSAutoScalingAutoScalingGroup {
results := map[string]AWSAutoScalingAutoScalingGroup{}
for name, untyped := range t.Resources {
switch resource := untyped.(type) {
case AWSAutoScalingAutoScalingGroup:
// We found a strongly typed resource of the correct type; use it
results[name] = resource
case map[string]interface{}:
// We found an untyped resource (likely from JSON) which *might* be
// the correct type, but we need to check it's 'Type' field
if resType, ok := resource["Type"]; ok {
if resType == "AWS::AutoScaling::AutoScalingGroup" {
// The resource is correct, unmarshal it into the results
if b, err := json.Marshal(resource); err == nil {
var result AWSAutoScalingAutoScalingGroup
if err := json.Unmarshal(b, &result); err == nil {
results[name] = result
}
}
}
}
}
}
return results
}
// GetAWSAutoScalingAutoScalingGroupWithName retrieves all AWSAutoScalingAutoScalingGroup items from an AWS CloudFormation template
// whose logical ID matches the provided name. Returns an error if not found.
func (t *Template) GetAWSAutoScalingAutoScalingGroupWithName(name string) (AWSAutoScalingAutoScalingGroup, error) {
if untyped, ok := t.Resources[name]; ok {
switch resource := untyped.(type) {
case AWSAutoScalingAutoScalingGroup:
// We found a strongly typed resource of the correct type; use it
return resource, nil
case map[string]interface{}:
// We found an untyped resource (likely from JSON) which *might* be
// the correct type, but we need to check it's 'Type' field
if resType, ok := resource["Type"]; ok {
if resType == "AWS::AutoScaling::AutoScalingGroup" {
// The resource is correct, unmarshal it into the results
if b, err := json.Marshal(resource); err == nil {
var result AWSAutoScalingAutoScalingGroup
if err := json.Unmarshal(b, &result); err == nil {
return result, nil
}
}
}
}
}
}
return AWSAutoScalingAutoScalingGroup{}, errors.New("resource not found")
}