-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsender.go
105 lines (93 loc) · 2.68 KB
/
sender.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
package main
import (
"github.com/aws/aws-sdk-go/aws"
cwe "github.com/aws/aws-sdk-go/service/cloudwatchevents"
)
func updateCloudWatchEvents(client *cwe.CloudWatchEvents, rules []Rule) error {
for _, rule := range rules {
err := updateCloudWatchEventRule(client, rule)
if err != nil {
return err
}
for _, target := range rule.Targets {
erro := updateCloudWatchEventTarget(client, rule, target)
if erro != nil {
return erro
}
}
}
return nil
}
func updateCloudWatchEventRule(client *cwe.CloudWatchEvents, rule Rule) error {
if rule.NeedDelete {
for _, target := range rule.Targets {
_, err2 := client.RemoveTargets(&cwe.RemoveTargetsInput{
Ids: []*string{target.ActualTarget.Id},
Rule: rule.ActualRule.Name,
})
if err2 != nil {
return err2
}
}
_, err3 := client.DeleteRule(&cwe.DeleteRuleInput{
Name: rule.ActualRule.Name,
})
if err3 != nil {
return err3
}
} else if rule.NeedUpdate {
_, err := client.PutRule(&cwe.PutRuleInput{
Name: NilOrStringPtr(rule.Name),
Description: NilOrStringPtr(rule.Description),
EventPattern: NilOrStringPtr(rule.EventPattern),
RoleArn: NilOrStringPtr(rule.RoleArn),
ScheduleExpression: NilOrStringPtr(rule.ScheduleExpression),
State: NilOrStringPtr(rule.State),
})
return err
}
return nil
}
func updateCloudWatchEventTarget(client *cwe.CloudWatchEvents, rule Rule, target Target) error {
if target.NeedDelete {
// if rule.NeedDelete is true, this target was removed in updateCloudWatchEventRule
if !rule.NeedDelete {
_, err2 := client.RemoveTargets(&cwe.RemoveTargetsInput{
Ids: []*string{target.ActualTarget.Id},
Rule: rule.ActualRule.Name,
})
if err2 != nil {
return err2
}
}
} else if target.NeedUpdate {
_, err := client.PutTargets(&cwe.PutTargetsInput{
Rule: NilOrStringPtr(rule.Name),
Targets: []*cwe.Target{
buildTarget(target),
},
})
return err
}
return nil
}
func buildTarget(t Target) *cwe.Target {
var target cwe.Target
target.Arn = NilOrStringPtr(t.Arn)
target.Id = NilOrStringPtr(t.ID)
target.Input = NilOrStringPtr(t.Input)
target.InputPath = NilOrStringPtr(t.InputPath)
target.RoleArn = NilOrStringPtr(t.RoleArn)
if t.EcsParameters.TaskDefinitionArn != "" && t.EcsParameters.TaskCount != 0 {
target.EcsParameters = &cwe.EcsParameters{
TaskDefinitionArn: NilOrStringPtr(t.EcsParameters.TaskDefinitionArn),
TaskCount: aws.Int64(t.EcsParameters.TaskCount),
}
}
if t.KinesisParameters.PartitionKeyPath != "" {
target.KinesisParameters = &cwe.KinesisParameters{
PartitionKeyPath: NilOrStringPtr(t.KinesisParameters.PartitionKeyPath),
}
}
return &target
}