forked from awslabs/goformation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
aws-applicationautoscaling-scalingpolicy.go
156 lines (137 loc) · 7.12 KB
/
aws-applicationautoscaling-scalingpolicy.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
package cloudformation
import (
"encoding/json"
"errors"
"fmt"
)
// AWSApplicationAutoScalingScalingPolicy AWS CloudFormation Resource (AWS::ApplicationAutoScaling::ScalingPolicy)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html
type AWSApplicationAutoScalingScalingPolicy struct {
// PolicyName AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-policyname
PolicyName string `json:"PolicyName,omitempty"`
// PolicyType AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-policytype
PolicyType string `json:"PolicyType,omitempty"`
// ResourceId AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-resourceid
ResourceId string `json:"ResourceId,omitempty"`
// ScalableDimension AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-scalabledimension
ScalableDimension string `json:"ScalableDimension,omitempty"`
// ScalingTargetId AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-scalingtargetid
ScalingTargetId string `json:"ScalingTargetId,omitempty"`
// ServiceNamespace AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-servicenamespace
ServiceNamespace string `json:"ServiceNamespace,omitempty"`
// StepScalingPolicyConfiguration AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration
StepScalingPolicyConfiguration *AWSApplicationAutoScalingScalingPolicy_StepScalingPolicyConfiguration `json:"StepScalingPolicyConfiguration,omitempty"`
// TargetTrackingScalingPolicyConfiguration AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration
TargetTrackingScalingPolicyConfiguration *AWSApplicationAutoScalingScalingPolicy_TargetTrackingScalingPolicyConfiguration `json:"TargetTrackingScalingPolicyConfiguration,omitempty"`
// _deletionPolicy represents a CloudFormation DeletionPolicy
_deletionPolicy DeletionPolicy
}
// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *AWSApplicationAutoScalingScalingPolicy) AWSCloudFormationType() string {
return "AWS::ApplicationAutoScaling::ScalingPolicy"
}
// SetDeletionPolicy applies an AWS CloudFormation DeletionPolicy to this resource
// see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html
func (r *AWSApplicationAutoScalingScalingPolicy) SetDeletionPolicy(policy DeletionPolicy) {
r._deletionPolicy = policy
}
// 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 AWSApplicationAutoScalingScalingPolicy) MarshalJSON() ([]byte, error) {
type Properties AWSApplicationAutoScalingScalingPolicy
return json.Marshal(&struct {
Type string
Properties Properties
DeletionPolicy DeletionPolicy `json:"DeletionPolicy,omitempty"`
}{
Type: r.AWSCloudFormationType(),
Properties: (Properties)(r),
DeletionPolicy: r._deletionPolicy,
})
}
// UnmarshalJSON is a custom JSON unmarshalling hook that strips the outer
// AWS CloudFormation resource object, and just keeps the 'Properties' field.
func (r *AWSApplicationAutoScalingScalingPolicy) UnmarshalJSON(b []byte) error {
type Properties AWSApplicationAutoScalingScalingPolicy
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 = AWSApplicationAutoScalingScalingPolicy(*res.Properties)
}
return nil
}
// GetAllAWSApplicationAutoScalingScalingPolicyResources retrieves all AWSApplicationAutoScalingScalingPolicy items from an AWS CloudFormation template
func (t *Template) GetAllAWSApplicationAutoScalingScalingPolicyResources() map[string]AWSApplicationAutoScalingScalingPolicy {
results := map[string]AWSApplicationAutoScalingScalingPolicy{}
for name, untyped := range t.Resources {
switch resource := untyped.(type) {
case AWSApplicationAutoScalingScalingPolicy:
// 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::ApplicationAutoScaling::ScalingPolicy" {
// The resource is correct, unmarshal it into the results
if b, err := json.Marshal(resource); err == nil {
var result AWSApplicationAutoScalingScalingPolicy
if err := json.Unmarshal(b, &result); err == nil {
results[name] = result
}
}
}
}
}
}
return results
}
// GetAWSApplicationAutoScalingScalingPolicyWithName retrieves all AWSApplicationAutoScalingScalingPolicy items from an AWS CloudFormation template
// whose logical ID matches the provided name. Returns an error if not found.
func (t *Template) GetAWSApplicationAutoScalingScalingPolicyWithName(name string) (AWSApplicationAutoScalingScalingPolicy, error) {
if untyped, ok := t.Resources[name]; ok {
switch resource := untyped.(type) {
case AWSApplicationAutoScalingScalingPolicy:
// 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::ApplicationAutoScaling::ScalingPolicy" {
// The resource is correct, unmarshal it into the results
if b, err := json.Marshal(resource); err == nil {
var result AWSApplicationAutoScalingScalingPolicy
if err := json.Unmarshal(b, &result); err == nil {
return result, nil
}
}
}
}
}
}
return AWSApplicationAutoScalingScalingPolicy{}, errors.New("resource not found")
}