add propagation work api

Signed-off-by: Kevin Wang <kevinwzf0126@gmail.com>
This commit is contained in:
Kevin Wang 2020-11-10 22:58:12 +08:00
parent 23c812744a
commit ceeb631005
1 changed files with 119 additions and 0 deletions

View File

@ -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"`
}