forked from awslabs/goformation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
aws-autoscaling-scheduledaction.go
140 lines (124 loc) · 5.43 KB
/
aws-autoscaling-scheduledaction.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
package cloudformation
import (
"encoding/json"
"errors"
"fmt"
)
// AWSAutoScalingScheduledAction AWS CloudFormation Resource (AWS::AutoScaling::ScheduledAction)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html
type AWSAutoScalingScheduledAction struct {
// AutoScalingGroupName AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-asgname
AutoScalingGroupName string `json:"AutoScalingGroupName,omitempty"`
// DesiredCapacity AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-desiredcapacity
DesiredCapacity int `json:"DesiredCapacity,omitempty"`
// EndTime AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-endtime
EndTime string `json:"EndTime,omitempty"`
// MaxSize AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-maxsize
MaxSize int `json:"MaxSize,omitempty"`
// MinSize AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-minsize
MinSize int `json:"MinSize,omitempty"`
// Recurrence AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-recurrence
Recurrence string `json:"Recurrence,omitempty"`
// StartTime AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-starttime
StartTime string `json:"StartTime,omitempty"`
}
// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *AWSAutoScalingScheduledAction) AWSCloudFormationType() string {
return "AWS::AutoScaling::ScheduledAction"
}
// 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 *AWSAutoScalingScheduledAction) MarshalJSON() ([]byte, error) {
type Properties AWSAutoScalingScheduledAction
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 *AWSAutoScalingScheduledAction) UnmarshalJSON(b []byte) error {
type Properties AWSAutoScalingScheduledAction
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 = AWSAutoScalingScheduledAction(*res.Properties)
}
return nil
}
// GetAllAWSAutoScalingScheduledActionResources retrieves all AWSAutoScalingScheduledAction items from an AWS CloudFormation template
func (t *Template) GetAllAWSAutoScalingScheduledActionResources() map[string]AWSAutoScalingScheduledAction {
results := map[string]AWSAutoScalingScheduledAction{}
for name, untyped := range t.Resources {
switch resource := untyped.(type) {
case AWSAutoScalingScheduledAction:
// 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::ScheduledAction" {
// The resource is correct, unmarshal it into the results
if b, err := json.Marshal(resource); err == nil {
var result AWSAutoScalingScheduledAction
if err := json.Unmarshal(b, &result); err == nil {
results[name] = result
}
}
}
}
}
}
return results
}
// GetAWSAutoScalingScheduledActionWithName retrieves all AWSAutoScalingScheduledAction items from an AWS CloudFormation template
// whose logical ID matches the provided name. Returns an error if not found.
func (t *Template) GetAWSAutoScalingScheduledActionWithName(name string) (AWSAutoScalingScheduledAction, error) {
if untyped, ok := t.Resources[name]; ok {
switch resource := untyped.(type) {
case AWSAutoScalingScheduledAction:
// 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::ScheduledAction" {
// The resource is correct, unmarshal it into the results
if b, err := json.Marshal(resource); err == nil {
var result AWSAutoScalingScheduledAction
if err := json.Unmarshal(b, &result); err == nil {
return result, nil
}
}
}
}
}
}
return AWSAutoScalingScheduledAction{}, errors.New("resource not found")
}