Skip to content

Commit 66a50c0

Browse files
committed
Duplicate metadata fields for pods spec override
Controller-gen cannot generate embedded metadata fields, resulting in those fields deserializing to empty objects. In order to embed metadata in a CRD, it is necessary to duplicate metadata fields where appropriate. See issue: kubernetes-sigs/controller-tools#385 for details Signed-off-by: Angel Misevski <[email protected]>
1 parent 0cbf260 commit 66a50c0

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

pkg/apis/workspaces/v1alpha2/podspec.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ package v1alpha2
22

33
import (
44
corev1 "k8s.io/api/core/v1"
5-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
65
)
76

87
type PodTemplateSpecOverrides struct {
98
// Standard object's metadata.
109
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
1110
// +optional
12-
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
11+
EmbeddedMetadata `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
1312

1413
// Subset of Pod Spec fields that can be overridden in a DevWorkspace's deployment
1514
// +optional
@@ -190,3 +189,26 @@ type PodSpecOverrides struct {
190189
// +optional
191190
SetHostnameAsFQDN *bool `json:"setHostnameAsFQDN,omitempty" protobuf:"varint,35,opt,name=setHostnameAsFQDN"`
192191
}
192+
193+
// Note: it's necessary to duplicate ObjectMeta rather than embedding it directly, as
194+
// controller-gen cannot generate metadata fields, resulting in empty metadata on
195+
// deserialization. See issue https://github.com/kubernetes-sigs/controller-tools/issues/385
196+
// for details.
197+
//
198+
// Since many fields are ignored in a Deployment's PodTemplateSpec, only labels and annotations
199+
// are included
200+
type EmbeddedMetadata struct {
201+
// Map of string keys and values that can be used to organize and categorize
202+
// (scope and select) objects. May match selectors of replication controllers
203+
// and services.
204+
// More info: http://kubernetes.io/docs/user-guide/labels
205+
// +optional
206+
Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"`
207+
208+
// Annotations is an unstructured key value map stored with a resource that may be
209+
// set by external tools to store and retrieve arbitrary metadata. They are not
210+
// queryable and should be preserved when modifying objects.
211+
// More info: http://kubernetes.io/docs/user-guide/annotations
212+
// +optional
213+
Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"`
214+
}

0 commit comments

Comments
 (0)