This repository has been archived by the owner on Aug 23, 2022. It is now read-only.
/
testclustergke_webhook.go
105 lines (84 loc) · 3.07 KB
/
testclustergke_webhook.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
// Copyright 2020 Authors of Cilium
// SPDX-License-Identifier: Apache-2.0
package v1alpha2
import (
"errors"
"k8s.io/apimachinery/pkg/api/equality"
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
logf "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)
var log = logf.Log.WithName("testclustergke-resource")
func (c *TestClusterGKE) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(c).
Complete()
}
var _ webhook.Defaulter = &TestClusterGKE{}
// Default implements webhook.Defaulter so a webhook will be registered for the type
func (c *TestClusterGKE) Default() {
if c.Name != "" { // avoid loging internal annonymous objects
log.V(1).Info("defaulting", "namespace", c.Namespace, "name", c.Name, "old.Spec", c.Spec)
}
if c.Spec.Project == nil {
c.Spec.Project = new(string)
*c.Spec.Project = "cilium-ci"
}
if c.Spec.ConfigTemplate == nil {
c.Spec.ConfigTemplate = new(string)
*c.Spec.ConfigTemplate = "basic"
}
if c.Spec.Location == nil {
c.Spec.Location = new(string)
*c.Spec.Location = "europe-west2-b"
}
if c.Spec.Region == nil {
c.Spec.Region = new(string)
*c.Spec.Region = "europe-west2"
}
if c.Spec.JobSpec != nil {
if c.Spec.JobSpec.Runner == nil {
c.Spec.JobSpec.Runner = &TestClusterGKEJobRunnerSpec{}
}
if c.Spec.JobSpec.Runner.Image == nil {
c.Spec.JobSpec.Runner.Image = new(string)
*c.Spec.JobSpec.Runner.Image = "quay.io/isovalent/gke-test-cluster-gcloud:803ff83d3786eb38ef05c95768060b0c7ae0fc4d"
}
if c.Spec.JobSpec.Runner.InitImage == nil {
c.Spec.JobSpec.Runner.InitImage = new(string)
*c.Spec.JobSpec.Runner.InitImage = "quay.io/isovalent/gke-test-cluster-initutil:854733411778d633350adfa1ae66bf11ba658a3f"
}
}
if c.Spec.MachineType == nil {
c.Spec.MachineType = new(string)
*c.Spec.MachineType = "n1-standard-4"
}
if c.Spec.Nodes == nil {
c.Spec.Nodes = new(int)
*c.Spec.Nodes = 2
}
if c.Name != "" { // avoid loging internal annonymous objects
log.V(1).Info("defaulting", "namespace", c.Namespace, "name", c.Name, "new.Spec", c.Spec)
}
}
var _ webhook.Validator = &TestClusterGKE{}
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
func (c *TestClusterGKE) ValidateCreate() error {
log.Info("validate create", "namespace", c.Namespace, "name", c.Name)
return nil
}
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
func (c *TestClusterGKE) ValidateUpdate(old runtime.Object) error {
o := old.(*TestClusterGKE)
log.V(1).Info("validate update", "namespace", c.Namespace, "name", c.Name, "new.Spec", c.Spec, "new.Status", c.Status, "old.Spec", o.Spec, "old.Status", o.Status)
if !equality.Semantic.DeepEqual(c.Spec, o.Spec) {
return errors.New("spec updates are not supported")
}
return nil
}
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type
func (c *TestClusterGKE) ValidateDelete() error {
log.Info("validate delete", "namespace", c.Namespace, "name", c.Name)
return nil
}