From ceeb6310054ebf3efc837265f0968465179d655f Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Tue, 10 Nov 2020 22:58:12 +0800 Subject: [PATCH] add propagation work api Signed-off-by: Kevin Wang --- .../v1alpha1/work_types.go | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 pkg/apis/propagationstrategy/v1alpha1/work_types.go diff --git a/pkg/apis/propagationstrategy/v1alpha1/work_types.go b/pkg/apis/propagationstrategy/v1alpha1/work_types.go new file mode 100644 index 000000000..7f2555563 --- /dev/null +++ b/pkg/apis/propagationstrategy/v1alpha1/work_types.go @@ -0,0 +1,119 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PropagationWork defines a list of resources to be deployed on the member cluster. +type PropagationWork struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // Spec represents the desired behavior of PropagationWork. + Spec PropagationWorkSpec `json:"spec"` + + // Status represents the status of PropagationStatus. + // +optional + Status PropagationWorkStatus `json:"status,omitempty"` +} + +// PropagationWorkSpec defines the desired state of PropagationWork. +type PropagationWorkSpec struct { + // Workload represents the manifest workload to be deployed on managed cluster. + Workload WorkloadTemplate `json:"workload,omitempty"` +} + +// WorkloadTemplate represents the manifest workload to be deployed on managed cluster. +type WorkloadTemplate struct { + // Manifests represents a list of Kubernetes resources to be deployed on the managed cluster. + // +optional + Manifests []Manifest `json:"manifests,omitempty"` +} + +// Manifest represents a resource to be deployed on managed cluster. +type Manifest struct { + runtime.RawExtension `json:",inline"` +} + +// PropagationWorkStatus defines the observed state of PropagationWork. +type PropagationWorkStatus struct { + // Conditions contain the different condition statuses for this work. + // Valid condition types are: + // 1. Applied represents workload in PropagationWork is applied successfully on a managed cluster. + // 2. Progressing represents workload in PropagationWork is being applied on a managed cluster. + // 3. Available represents workload in PropagationWork exists on the managed cluster. + // 4. Degraded represents the current state of workload does not match the desired + // state for a certain period. + Conditions []metav1.Condition `json:"conditions"` + + // ManifestConditions represents the conditions of each Kubernetes resource in work + // deployed on managed cluster. + // +optional + ManifestConditions []ManifestCondition `json:"manifestConditions,omitempty"` +} + +// ManifestCondition represents the conditions of the resources deployed on +// managed cluster +type ManifestCondition struct { + // Identifier represents the identity of a resource linking to manifests in spec. + Identifier ResourceIdentifier `json:"identifier"` + + // Conditions represents the conditions of this resource on the managed cluster + Conditions []metav1.Condition `json:"conditions"` +} + +// ResourceIdentifier provides the identifiers needed to interact with any arbitrary object. +type ResourceIdentifier struct { + // Ordinal represents an index in manifests list, so the condition can still be linked + // to a manifest even though manifest cannot be parsed successfully. + Ordinal int `json:"ordinal"` + + // Group is the group of the resource. + Group string `json:"group,omitempty"` + + // Version is the version of the resource. + Version string `json:"version"` + + // Kind is the kind of the resource. + Kind string `json:"kind"` + + // Resource is the resource type of the resource + Resource string `json:"resource"` + + // Namespace is the namespace of the resource, the resource is cluster scoped if the value + // is empty + Namespace string `json:"namespace,omitempty"` + + // Name is the name of the resource + Name string `json:"name"` +} + +const ( + // WorkApplied represents that the resource defined in PropagationWork is + // successfully applied on the managed cluster. + WorkApplied string = "Applied" + // WorkProgressing represents that the resource defined in PropagationWork is + // in the progress to be applied on the managed cluster. + WorkProgressing string = "Progressing" + // WorkAvailable represents that all resources of the PropagationWork exists on + // the managed cluster. + WorkAvailable string = "Available" + // WorkDegraded represents that the current state of PropagationWork does not match + // the desired state for a certain period. + WorkDegraded string = "Degraded" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PropagationWorkList is a collection of PropagationWork. +type PropagationWorkList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + + // Items holds a list of PropagationWork. + Items []PropagationWork `json:"items"` +}