Skip to content
59 changes: 59 additions & 0 deletions apis/placement/v1alpha1/envelope_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/klog/v2"

placementv1beta1 "github.com/kubefleet-dev/kubefleet/apis/placement/v1beta1"
)

// +genclient
Expand Down Expand Up @@ -71,3 +74,59 @@
// +kubebuilder:validation:Required
Spec EnvelopeSpec `json:"spec"`
}

// +kubebuilder:object:generate=false
// EnvelopeReader is an interface that allows retrieval of common information across all envelope CRs.
//
// Note (chenyu1): controller-gen should skip this type.
type EnvelopeReader interface {
// GetManifests returns the manifests in the envelope.
GetManifests() map[string]Manifest

// GetEnvelopeObjRef returns a klog object reference to the envelope.
GetEnvelopeObjRef() klog.ObjectRef

// GetNamespace returns the namespace of the envelope.
GetNamespace() string

// GetName returns the name of the envelope.
GetName() string

// GetEnvelopeType returns the type of the envelope.
GetEnvelopeType() string
}

// Ensure that both ClusterResourceEnvelope and ResourceEnvelope implement the
// EnvelopeReader interface at compile time.
var (
_ EnvelopeReader = &ClusterResourceEnvelope{}
_ EnvelopeReader = &ResourceEnvelope{}
)

// Implements the EnvelopeReader interface for ClusterResourceEnvelope.

func (e *ClusterResourceEnvelope) GetManifests() map[string]Manifest {
return e.Spec.Manifests

Check warning on line 109 in apis/placement/v1alpha1/envelope_types.go

View check run for this annotation

Codecov / codecov/patch

apis/placement/v1alpha1/envelope_types.go#L108-L109

Added lines #L108 - L109 were not covered by tests
}

func (e *ClusterResourceEnvelope) GetEnvelopeObjRef() klog.ObjectRef {
return klog.KObj(e)

Check warning on line 113 in apis/placement/v1alpha1/envelope_types.go

View check run for this annotation

Codecov / codecov/patch

apis/placement/v1alpha1/envelope_types.go#L112-L113

Added lines #L112 - L113 were not covered by tests
}

func (e *ClusterResourceEnvelope) GetEnvelopeType() string {
return string(placementv1beta1.ClusterResourceEnvelopeType)

Check warning on line 117 in apis/placement/v1alpha1/envelope_types.go

View check run for this annotation

Codecov / codecov/patch

apis/placement/v1alpha1/envelope_types.go#L116-L117

Added lines #L116 - L117 were not covered by tests
}

// Implements the EnvelopeReader interface for ResourceEnvelope.

func (e *ResourceEnvelope) GetManifests() map[string]Manifest {
return e.Spec.Manifests

Check warning on line 123 in apis/placement/v1alpha1/envelope_types.go

View check run for this annotation

Codecov / codecov/patch

apis/placement/v1alpha1/envelope_types.go#L122-L123

Added lines #L122 - L123 were not covered by tests
}

func (e *ResourceEnvelope) GetEnvelopeObjRef() klog.ObjectRef {
return klog.KObj(e)

Check warning on line 127 in apis/placement/v1alpha1/envelope_types.go

View check run for this annotation

Codecov / codecov/patch

apis/placement/v1alpha1/envelope_types.go#L126-L127

Added lines #L126 - L127 were not covered by tests
}

func (e *ResourceEnvelope) GetEnvelopeType() string {
return string(placementv1beta1.ResourceEnvelopeType)

Check warning on line 131 in apis/placement/v1alpha1/envelope_types.go

View check run for this annotation

Codecov / codecov/patch

apis/placement/v1alpha1/envelope_types.go#L130-L131

Added lines #L130 - L131 were not covered by tests
}
12 changes: 11 additions & 1 deletion apis/placement/v1beta1/clusterresourceplacement_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -884,8 +884,10 @@ type EnvelopeIdentifier struct {
// +kubebuilder:validation:Optional
Namespace string `json:"namespace,omitempty"`

// TO-DO (chenyu1): drop the enum value ConfigMap after the new envelope forms become fully available.

// Type of the envelope object.
// +kubebuilder:validation:Enum=ConfigMap
// +kubebuilder:validation:Enum=ConfigMap;ClusterResourceEnvelope;ResourceEnvelope
// +kubebuilder:default=ConfigMap
// +kubebuilder:validation:Optional
Type EnvelopeType `json:"type"`
Expand All @@ -897,7 +899,15 @@ type EnvelopeType string

const (
// ConfigMapEnvelopeType means the envelope object is of type `ConfigMap`.
//
// TO-DO (chenyu1): drop this type after the configMap-based envelopes become obsolete.
ConfigMapEnvelopeType EnvelopeType = "ConfigMap"

// ClusterResourceEnvelopeType is the envelope type that represents the ClusterResourceEnvelope custom resource.
ClusterResourceEnvelopeType EnvelopeType = "ClusterResourceEnvelope"

// ResourceEnvelopeType is the envelope type that represents the ResourceEnvelope custom resource.
ResourceEnvelopeType EnvelopeType = "ResourceEnvelope"
)

// ResourcePlacementStatus represents the placement status of selected resources for one target cluster.
Expand Down
4 changes: 4 additions & 0 deletions apis/placement/v1beta1/commons.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ const (
// The format is {workPrefix}-configMap-uuid.
WorkNameWithConfigEnvelopeFmt = "%s-configmap-%s"

// WorkNameWithEnvelopeCRFmt is the format of the name of a work generated with an envelope CR.
// The format is [WORK-PREFIX]-envelope-[UUID].
WorkNameWithEnvelopeCRFmt = "%s-envelope-%s"

// ParentClusterResourceOverrideSnapshotHashAnnotation is the annotation to work that contains the hash of the parent cluster resource override snapshot list.
ParentClusterResourceOverrideSnapshotHashAnnotation = fleetPrefix + "parent-cluster-resource-override-snapshot-hash"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,8 @@ spec:
description: Type of the envelope object.
enum:
- ConfigMap
- ClusterResourceEnvelope
- ResourceEnvelope
type: string
required:
- name
Expand Down Expand Up @@ -944,6 +946,8 @@ spec:
description: Type of the envelope object.
enum:
- ConfigMap
- ClusterResourceEnvelope
- ResourceEnvelope
type: string
required:
- name
Expand Down Expand Up @@ -1107,6 +1111,8 @@ spec:
description: Type of the envelope object.
enum:
- ConfigMap
- ClusterResourceEnvelope
- ResourceEnvelope
type: string
required:
- name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2189,6 +2189,8 @@ spec:
description: Type of the envelope object.
enum:
- ConfigMap
- ClusterResourceEnvelope
- ResourceEnvelope
type: string
required:
- name
Expand Down Expand Up @@ -2304,6 +2306,8 @@ spec:
description: Type of the envelope object.
enum:
- ConfigMap
- ClusterResourceEnvelope
- ResourceEnvelope
type: string
required:
- name
Expand Down Expand Up @@ -2471,6 +2475,8 @@ spec:
description: Type of the envelope object.
enum:
- ConfigMap
- ClusterResourceEnvelope
- ResourceEnvelope
type: string
required:
- name
Expand Down Expand Up @@ -2524,6 +2530,8 @@ spec:
description: Type of the envelope object.
enum:
- ConfigMap
- ClusterResourceEnvelope
- ResourceEnvelope
type: string
required:
- name
Expand Down
10 changes: 8 additions & 2 deletions pkg/controllers/clusterresourceplacement/resource_selector.go
Original file line number Diff line number Diff line change
Expand Up @@ -463,8 +463,14 @@
if err != nil {
return 0, nil, nil, err
}
if unstructuredObj.GetObjectKind().GroupVersionKind() == utils.ConfigMapGVK &&
len(unstructuredObj.GetAnnotations()[fleetv1beta1.EnvelopeConfigMapAnnotation]) != 0 {
uGVK := unstructuredObj.GetObjectKind().GroupVersionKind()
switch {
case uGVK == utils.ClusterResourceEnvelopeV1Alpha1GVK:
envelopeObjCount++
case uGVK == utils.ResourceEnvelopeV1Alpha1GVK:
envelopeObjCount++
case uGVK == utils.ConfigMapGVK && len(unstructuredObj.GetAnnotations()[fleetv1beta1.EnvelopeConfigMapAnnotation]) > 0:
// TO-DO (chenyu1): remove this branch after the configMap-based envelopes become obsolete.

Check warning on line 473 in pkg/controllers/clusterresourceplacement/resource_selector.go

View check run for this annotation

Codecov / codecov/patch

pkg/controllers/clusterresourceplacement/resource_selector.go#L466-L473

Added lines #L466 - L473 were not covered by tests
envelopeObjCount++
}
resources[i] = *rc
Expand Down
Loading
Loading