This repository has been archived by the owner on Jan 9, 2023. It is now read-only.
/
admission.go
71 lines (59 loc) · 1.92 KB
/
admission.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
// Copyright Jetstack Ltd. See LICENSE for details.
package instaceinittime
import (
"errors"
"io"
"time"
"k8s.io/apiserver/pkg/admission"
"github.com/jetstack/tarmak/pkg/apis/wing"
)
const PluginName = "InstanceInitTime"
// Register registers a plugin
func Register(plugins *admission.Plugins) {
plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) {
return New()
})
}
type instanceInitTime struct {
*admission.Handler
}
// Admit ensures that the object in-flight is of kind Flunder.
// In addition checks that the Name is not on the banned list.
// The list is stored in Fischers API objects.
func (d *instanceInitTime) Admit(a admission.Attributes) error {
// we are only interested in instances
if a.GetKind().GroupKind() != wing.Kind("Instance") {
return nil
}
instance, ok := a.GetObject().(*wing.Instance)
if !ok {
return errors.New("unexpected object type")
}
if instance.Status != nil {
if instance.Status.Converge != nil && instance.Status.Converge.LastUpdateTimestamp.IsZero() {
instance.Status.Converge.LastUpdateTimestamp.Time = time.Now()
}
if instance.Status.DryRun != nil && instance.Status.DryRun.LastUpdateTimestamp.IsZero() {
instance.Status.DryRun.LastUpdateTimestamp.Time = time.Now()
}
}
if instance.Spec != nil {
if instance.Spec.Converge != nil && instance.Spec.Converge.RequestTimestamp.IsZero() {
instance.Spec.Converge.RequestTimestamp.Time = time.Now()
}
if instance.Spec.DryRun != nil && instance.Spec.DryRun.RequestTimestamp.IsZero() {
instance.Spec.DryRun.RequestTimestamp.Time = time.Now()
}
}
return nil
}
// Validate checks whether the plugin was correctly initialized.
func (d *instanceInitTime) Validate() error {
return nil
}
// New creates a new instances init time admission plugin
func New() (admission.Interface, error) {
return &instanceInitTime{
Handler: admission.NewHandler(admission.Create, admission.Update),
}, nil
}