-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuilder.go
115 lines (105 loc) · 3.47 KB
/
builder.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
package main
import (
"github.com/aws/aws-sdk-go/service/cloudwatchevents"
)
// AssociateRules is asociate ClowdWatchEvent Rule and descripbed Rule(name based)
func AssociateRules(cweRules []*cloudwatchevents.Rule, describedRules []Rule) []Rule {
dupCWERules := make([]*cloudwatchevents.Rule, len(cweRules))
copy(dupCWERules, cweRules)
for i, rule := range describedRules {
for j, cweRule := range dupCWERules {
if *cweRule.Name == rule.Name {
describedRules[i].ActualRule = *cweRule
dupCWERules = DeleteRuleFromSlice(dupCWERules, j)
break
}
}
}
if len(dupCWERules) > 0 {
for _, dupRule := range dupCWERules {
describedRules = append(describedRules, Rule{
ActualRule: *dupRule,
})
}
}
return describedRules
}
// AssociateTargets is asociate ClowdWatchEvent targets and descripbed targets(ID based)
func AssociateTargets(cweTargets []*cloudwatchevents.Target, describedTargets []Target) []Target {
// if ClowdWatchEvents Targets is more than declareted targets, append number of lack target{}
dupCWETargets := make([]*cloudwatchevents.Target, len(cweTargets))
copy(dupCWETargets, cweTargets)
for i, target := range describedTargets {
for j, cweTarget := range dupCWETargets {
if CompareString(&target.Arn, cweTarget.Arn) && CompareString(&target.ID, cweTarget.Id) {
describedTargets[i].ActualTarget = *cweTarget
dupCWETargets = DeleteTargetFromSlice(dupCWETargets, j)
break
}
}
}
if len(dupCWETargets) > 0 {
for _, dupTarget := range dupCWETargets {
describedTargets = append(describedTargets, Target{
ActualTarget: *dupTarget,
})
}
}
return describedTargets
}
// JudgeRuleNeedUpdate is judge the rule need update
// compare rule and ActualRule
func JudgeRuleNeedUpdate(r *Rule) {
if !CompareString(&r.Name, r.ActualRule.Name) ||
!CompareString(&r.Description, r.ActualRule.Description) ||
!CompareString(&r.EventPattern, r.ActualRule.EventPattern) ||
!CompareString(&r.ScheduleExpression, r.ActualRule.ScheduleExpression) ||
!CompareString(&r.State, r.ActualRule.State) {
r.NeedUpdate = true
}
}
// JudgeRuleNeedDelete is judge the rule need delete
func JudgeRuleNeedDelete(r *Rule) {
if r.Name == "" &&
r.Description == "" &&
r.EventPattern == "" &&
r.ScheduleExpression == "" &&
r.RoleArn == "" &&
r.State == "" &&
r.ActualRule.Name != nil {
r.NeedDelete = true
}
}
// JudgeTargetNeedUpdate is judge the target need update
// compare target and ActualTarget
func JudgeTargetNeedUpdate(t *Target) {
if !CompareString(&t.Arn, t.ActualTarget.Arn) ||
!CompareString(&t.ID, t.ActualTarget.Id) ||
!CompareString(&t.Input, t.ActualTarget.Input) ||
!CompareString(&t.InputPath, t.ActualTarget.InputPath) ||
!CompareString(&t.RoleArn, t.ActualTarget.RoleArn) ||
!CompareEcsParameters(&t.EcsParameters, t.ActualTarget.EcsParameters) ||
!CompareKinesisParameters(&t.KinesisParameters, t.ActualTarget.KinesisParameters) {
t.NeedUpdate = true
}
}
// JudgeTargetNeedDelete is judge the target need delete
func JudgeTargetNeedDelete(t *Target) {
if t.Arn == "" &&
t.ID == "" &&
t.ActualTarget.Arn != nil {
t.NeedDelete = true
}
}
// CheckIsNeedUpdateOrDelete is check all rules and targets,
// update "NeedUpdate" and "NeedDelete" field
func CheckIsNeedUpdateOrDelete(rules []Rule) {
for i := range rules {
JudgeRuleNeedUpdate(&rules[i])
JudgeRuleNeedDelete(&rules[i])
for j := range rules[i].Targets {
JudgeTargetNeedUpdate(&rules[i].Targets[j])
JudgeTargetNeedDelete(&rules[i].Targets[j])
}
}
}