forked from kubernetes-retired/service-catalog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
strategy.go
118 lines (98 loc) · 3.89 KB
/
strategy.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
116
117
118
/*
Copyright 2017 The Kubernetes Authors.
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 serviceclass
// this was copied from where else and edited to fit our objects
import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/validation/field"
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest"
"k8s.io/apiserver/pkg/storage/names"
"k8s.io/client-go/pkg/api"
"github.com/golang/glog"
sc "github.com/kubernetes-incubator/service-catalog/pkg/apis/servicecatalog"
scv "github.com/kubernetes-incubator/service-catalog/pkg/apis/servicecatalog/validation"
)
// NewScopeStrategy returns a new NamespaceScopedStrategy for service classes
func NewScopeStrategy() rest.NamespaceScopedStrategy {
return serviceclassRESTStrategies
}
// implements interfaces RESTCreateStrategy, RESTUpdateStrategy, RESTDeleteStrategy,
// NamespaceScopedStrategy
type serviceclassRESTStrategy struct {
runtime.ObjectTyper // inherit ObjectKinds method
names.NameGenerator // GenerateName method for CreateStrategy
}
var (
serviceclassRESTStrategies = serviceclassRESTStrategy{
// embeds to pull in existing code behavior from upstream
ObjectTyper: api.Scheme,
// use the generator from upstream k8s, or implement method
// `GenerateName(base string) string`
NameGenerator: names.SimpleNameGenerator,
}
_ rest.RESTCreateStrategy = serviceclassRESTStrategies
_ rest.RESTUpdateStrategy = serviceclassRESTStrategies
_ rest.RESTDeleteStrategy = serviceclassRESTStrategies
)
// Canonicalize does not transform a serviceclass.
func (serviceclassRESTStrategy) Canonicalize(obj runtime.Object) {
_, ok := obj.(*sc.ServiceClass)
if !ok {
glog.Fatal("received a non-serviceclass object to create")
}
}
// NamespaceScoped returns false as serviceclasss are not scoped to a namespace.
func (serviceclassRESTStrategy) NamespaceScoped() bool {
return false
}
// PrepareForCreate receives the incoming Serviceclass.
func (serviceclassRESTStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) {
_, ok := obj.(*sc.ServiceClass)
if !ok {
glog.Fatal("received a non-serviceclass object to create")
}
// service class is a data record and has no status to track
}
func (serviceclassRESTStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList {
return scv.ValidateServiceClass(obj.(*sc.ServiceClass))
}
func (serviceclassRESTStrategy) AllowCreateOnUpdate() bool {
return false
}
func (serviceclassRESTStrategy) AllowUnconditionalUpdate() bool {
return false
}
func (serviceclassRESTStrategy) PrepareForUpdate(ctx genericapirequest.Context, new, old runtime.Object) {
newServiceclass, ok := new.(*sc.ServiceClass)
if !ok {
glog.Fatal("received a non-serviceclass object to update to")
}
oldServiceclass, ok := old.(*sc.ServiceClass)
if !ok {
glog.Fatal("received a non-serviceclass object to update from")
}
// copy all fields individually?
newServiceclass.ServiceBrokerName = oldServiceclass.ServiceBrokerName
}
func (serviceclassRESTStrategy) ValidateUpdate(ctx genericapirequest.Context, new, old runtime.Object) field.ErrorList {
newServiceclass, ok := new.(*sc.ServiceClass)
if !ok {
glog.Fatal("received a non-serviceclass object to validate to")
}
oldServiceclass, ok := old.(*sc.ServiceClass)
if !ok {
glog.Fatal("received a non-serviceclass object to validate from")
}
return scv.ValidateServiceClassUpdate(newServiceclass, oldServiceclass)
}