Skip to content

Commit

Permalink
Duplicate metadata fields for pods spec override
Browse files Browse the repository at this point in the history
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 <amisevsk@redhat.com>
  • Loading branch information
amisevsk committed Sep 19, 2022
1 parent 98f8c77 commit 955ffb6
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions pkg/apis/workspaces/v1alpha2/podspec.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ package v1alpha2

import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

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

// Subset of Pod Spec fields that can be overridden in a DevWorkspace's deployment
// +optional
Expand Down Expand Up @@ -190,3 +189,26 @@ type PodSpecOverrides struct {
// +optional
SetHostnameAsFQDN *bool `json:"setHostnameAsFQDN,omitempty" protobuf:"varint,35,opt,name=setHostnameAsFQDN"`
}

// Note: it's necessary to duplicate ObjectMeta rather than embedding it directly, as
// controller-gen cannot generate metadata fields, resulting in empty metadata on
// deserialization. See issue https://github.com/kubernetes-sigs/controller-tools/issues/385
// for details.
//
// Since many fields are ignored in a Deployment's PodTemplateSpec, only labels and annotations
// are included
type EmbeddedMetadata struct {
// Map of string keys and values that can be used to organize and categorize
// (scope and select) objects. May match selectors of replication controllers
// and services.
// More info: http://kubernetes.io/docs/user-guide/labels
// +optional
Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"`

// Annotations is an unstructured key value map stored with a resource that may be
// set by external tools to store and retrieve arbitrary metadata. They are not
// queryable and should be preserved when modifying objects.
// More info: http://kubernetes.io/docs/user-guide/annotations
// +optional
Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"`
}

0 comments on commit 955ffb6

Please sign in to comment.