blob: c13fe4af8e0f6bc6b34ce1286f7cac8b73f6c8be [file] [log] [blame]
Matthias Andreas Benkard832a54e2019-01-29 09:27:38 +01001/*
2Copyright 2016 The Kubernetes Authors.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17package v1
18
19import (
20 "k8s.io/apimachinery/pkg/runtime/schema"
21 "k8s.io/apimachinery/pkg/types"
22)
23
24// TODO: move this, Object, List, and Type to a different package
25type ObjectMetaAccessor interface {
26 GetObjectMeta() Object
27}
28
29// Object lets you work with object metadata from any of the versioned or
30// internal API objects. Attempting to set or retrieve a field on an object that does
31// not support that field (Name, UID, Namespace on lists) will be a no-op and return
32// a default value.
33type Object interface {
34 GetNamespace() string
35 SetNamespace(namespace string)
36 GetName() string
37 SetName(name string)
38 GetGenerateName() string
39 SetGenerateName(name string)
40 GetUID() types.UID
41 SetUID(uid types.UID)
42 GetResourceVersion() string
43 SetResourceVersion(version string)
44 GetGeneration() int64
45 SetGeneration(generation int64)
46 GetSelfLink() string
47 SetSelfLink(selfLink string)
48 GetCreationTimestamp() Time
49 SetCreationTimestamp(timestamp Time)
50 GetDeletionTimestamp() *Time
51 SetDeletionTimestamp(timestamp *Time)
52 GetDeletionGracePeriodSeconds() *int64
53 SetDeletionGracePeriodSeconds(*int64)
54 GetLabels() map[string]string
55 SetLabels(labels map[string]string)
56 GetAnnotations() map[string]string
57 SetAnnotations(annotations map[string]string)
58 GetInitializers() *Initializers
59 SetInitializers(initializers *Initializers)
60 GetFinalizers() []string
61 SetFinalizers(finalizers []string)
62 GetOwnerReferences() []OwnerReference
63 SetOwnerReferences([]OwnerReference)
64 GetClusterName() string
65 SetClusterName(clusterName string)
66}
67
68// ListMetaAccessor retrieves the list interface from an object
69type ListMetaAccessor interface {
70 GetListMeta() ListInterface
71}
72
73// Common lets you work with core metadata from any of the versioned or
74// internal API objects. Attempting to set or retrieve a field on an object that does
75// not support that field will be a no-op and return a default value.
76// TODO: move this, and TypeMeta and ListMeta, to a different package
77type Common interface {
78 GetResourceVersion() string
79 SetResourceVersion(version string)
80 GetSelfLink() string
81 SetSelfLink(selfLink string)
82}
83
84// ListInterface lets you work with list metadata from any of the versioned or
85// internal API objects. Attempting to set or retrieve a field on an object that does
86// not support that field will be a no-op and return a default value.
87// TODO: move this, and TypeMeta and ListMeta, to a different package
88type ListInterface interface {
89 GetResourceVersion() string
90 SetResourceVersion(version string)
91 GetSelfLink() string
92 SetSelfLink(selfLink string)
93 GetContinue() string
94 SetContinue(c string)
95}
96
97// Type exposes the type and APIVersion of versioned or internal API objects.
98// TODO: move this, and TypeMeta and ListMeta, to a different package
99type Type interface {
100 GetAPIVersion() string
101 SetAPIVersion(version string)
102 GetKind() string
103 SetKind(kind string)
104}
105
106func (meta *ListMeta) GetResourceVersion() string { return meta.ResourceVersion }
107func (meta *ListMeta) SetResourceVersion(version string) { meta.ResourceVersion = version }
108func (meta *ListMeta) GetSelfLink() string { return meta.SelfLink }
109func (meta *ListMeta) SetSelfLink(selfLink string) { meta.SelfLink = selfLink }
110func (meta *ListMeta) GetContinue() string { return meta.Continue }
111func (meta *ListMeta) SetContinue(c string) { meta.Continue = c }
112
113func (obj *TypeMeta) GetObjectKind() schema.ObjectKind { return obj }
114
115// SetGroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta
116func (obj *TypeMeta) SetGroupVersionKind(gvk schema.GroupVersionKind) {
117 obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind()
118}
119
120// GroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta
121func (obj *TypeMeta) GroupVersionKind() schema.GroupVersionKind {
122 return schema.FromAPIVersionAndKind(obj.APIVersion, obj.Kind)
123}
124
125func (obj *ListMeta) GetListMeta() ListInterface { return obj }
126
127func (obj *ObjectMeta) GetObjectMeta() Object { return obj }
128
129// Namespace implements metav1.Object for any object with an ObjectMeta typed field. Allows
130// fast, direct access to metadata fields for API objects.
131func (meta *ObjectMeta) GetNamespace() string { return meta.Namespace }
132func (meta *ObjectMeta) SetNamespace(namespace string) { meta.Namespace = namespace }
133func (meta *ObjectMeta) GetName() string { return meta.Name }
134func (meta *ObjectMeta) SetName(name string) { meta.Name = name }
135func (meta *ObjectMeta) GetGenerateName() string { return meta.GenerateName }
136func (meta *ObjectMeta) SetGenerateName(generateName string) { meta.GenerateName = generateName }
137func (meta *ObjectMeta) GetUID() types.UID { return meta.UID }
138func (meta *ObjectMeta) SetUID(uid types.UID) { meta.UID = uid }
139func (meta *ObjectMeta) GetResourceVersion() string { return meta.ResourceVersion }
140func (meta *ObjectMeta) SetResourceVersion(version string) { meta.ResourceVersion = version }
141func (meta *ObjectMeta) GetGeneration() int64 { return meta.Generation }
142func (meta *ObjectMeta) SetGeneration(generation int64) { meta.Generation = generation }
143func (meta *ObjectMeta) GetSelfLink() string { return meta.SelfLink }
144func (meta *ObjectMeta) SetSelfLink(selfLink string) { meta.SelfLink = selfLink }
145func (meta *ObjectMeta) GetCreationTimestamp() Time { return meta.CreationTimestamp }
146func (meta *ObjectMeta) SetCreationTimestamp(creationTimestamp Time) {
147 meta.CreationTimestamp = creationTimestamp
148}
149func (meta *ObjectMeta) GetDeletionTimestamp() *Time { return meta.DeletionTimestamp }
150func (meta *ObjectMeta) SetDeletionTimestamp(deletionTimestamp *Time) {
151 meta.DeletionTimestamp = deletionTimestamp
152}
153func (meta *ObjectMeta) GetDeletionGracePeriodSeconds() *int64 { return meta.DeletionGracePeriodSeconds }
154func (meta *ObjectMeta) SetDeletionGracePeriodSeconds(deletionGracePeriodSeconds *int64) {
155 meta.DeletionGracePeriodSeconds = deletionGracePeriodSeconds
156}
157func (meta *ObjectMeta) GetLabels() map[string]string { return meta.Labels }
158func (meta *ObjectMeta) SetLabels(labels map[string]string) { meta.Labels = labels }
159func (meta *ObjectMeta) GetAnnotations() map[string]string { return meta.Annotations }
160func (meta *ObjectMeta) SetAnnotations(annotations map[string]string) { meta.Annotations = annotations }
161func (meta *ObjectMeta) GetInitializers() *Initializers { return meta.Initializers }
162func (meta *ObjectMeta) SetInitializers(initializers *Initializers) { meta.Initializers = initializers }
163func (meta *ObjectMeta) GetFinalizers() []string { return meta.Finalizers }
164func (meta *ObjectMeta) SetFinalizers(finalizers []string) { meta.Finalizers = finalizers }
165
166func (meta *ObjectMeta) GetOwnerReferences() []OwnerReference {
167 if meta.OwnerReferences == nil {
168 return nil
169 }
170 ret := make([]OwnerReference, len(meta.OwnerReferences))
171 for i := 0; i < len(meta.OwnerReferences); i++ {
172 ret[i].Kind = meta.OwnerReferences[i].Kind
173 ret[i].Name = meta.OwnerReferences[i].Name
174 ret[i].UID = meta.OwnerReferences[i].UID
175 ret[i].APIVersion = meta.OwnerReferences[i].APIVersion
176 if meta.OwnerReferences[i].Controller != nil {
177 value := *meta.OwnerReferences[i].Controller
178 ret[i].Controller = &value
179 }
180 if meta.OwnerReferences[i].BlockOwnerDeletion != nil {
181 value := *meta.OwnerReferences[i].BlockOwnerDeletion
182 ret[i].BlockOwnerDeletion = &value
183 }
184 }
185 return ret
186}
187
188func (meta *ObjectMeta) SetOwnerReferences(references []OwnerReference) {
189 if references == nil {
190 meta.OwnerReferences = nil
191 return
192 }
193 newReferences := make([]OwnerReference, len(references))
194 for i := 0; i < len(references); i++ {
195 newReferences[i].Kind = references[i].Kind
196 newReferences[i].Name = references[i].Name
197 newReferences[i].UID = references[i].UID
198 newReferences[i].APIVersion = references[i].APIVersion
199 if references[i].Controller != nil {
200 value := *references[i].Controller
201 newReferences[i].Controller = &value
202 }
203 if references[i].BlockOwnerDeletion != nil {
204 value := *references[i].BlockOwnerDeletion
205 newReferences[i].BlockOwnerDeletion = &value
206 }
207 }
208 meta.OwnerReferences = newReferences
209}
210
211func (meta *ObjectMeta) GetClusterName() string {
212 return meta.ClusterName
213}
214func (meta *ObjectMeta) SetClusterName(clusterName string) {
215 meta.ClusterName = clusterName
216}