-
Notifications
You must be signed in to change notification settings - Fork 722
/
events.go
73 lines (62 loc) · 1.98 KB
/
events.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
/*
Copyright 2018 BlackRock, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package common
import (
"k8s.io/client-go/kubernetes"
"time"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// K8sEventType is the type of event generated to indicate change in state of resource
type K8sEventType string
// Possible values for K8sEventType
var (
EscalationEventType K8sEventType = "Escalation"
StateChangeEventType K8sEventType = "StateChange"
OperationFailureEventType K8sEventType = "OperationFailed"
OperationSuccessEventType K8sEventType = "OperationSuccessful"
)
const (
// LabelEventType is label for k8 event type
LabelEventType = "event-type"
)
// GenerateK8sEvent generates a kubernetes event
func GenerateK8sEvent(clientset kubernetes.Interface, reason string, eventType K8sEventType, action string, name, namespace, instanceId, kind string, labels map[string]string) error {
event := &corev1.Event{
Reason: reason,
Type: string(eventType),
Action: action,
EventTime: metav1.MicroTime{
Time: time.Now(),
},
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
GenerateName: name + "-",
Labels: labels,
},
InvolvedObject: corev1.ObjectReference{
Namespace: namespace,
Name: name,
Kind: kind,
},
Source: corev1.EventSource{
Component: name,
},
ReportingInstance: instanceId,
ReportingController: name,
}
if _, err := clientset.CoreV1().Events(namespace).Create(event); err != nil {
return err
}
return nil
}