add propagation binding api
Signed-off-by: Kevin Wang <kevinwzf0126@gmail.com>
This commit is contained in:
parent
ceeb631005
commit
79dd1ee177
|
@ -0,0 +1,127 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// +genclient
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
||||
// PropagationBinding represents a binding of a kubernetes resource with a propagation policy.
|
||||
type PropagationBinding struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
// Spec represents the desired behavior.
|
||||
Spec PropagationBindingSpec `json:"spec"`
|
||||
|
||||
// Status represents the most recently observed status of the PropagationBinding.
|
||||
// +optional
|
||||
Status PropagationBindingStatus `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
// PropagationBindingSpec represents the expectation of PropagationBinding.
|
||||
type PropagationBindingSpec struct {
|
||||
// Resource represents the Kubernetes resource to be propagated.
|
||||
Resource ObjectReference `json:"resource"`
|
||||
// Clusters represents target member clusters where the resource to be deployed.
|
||||
// +optional
|
||||
Clusters []TargetCluster `json:"clusters,omitempty"`
|
||||
}
|
||||
|
||||
// ObjectReference contains enough information to locate the referenced object inside current cluster.
|
||||
type ObjectReference struct {
|
||||
// APIVersion represents the API version of the referent.
|
||||
APIVersion string `json:"apiVersion"`
|
||||
|
||||
// Kind represents the Kind of the referent.
|
||||
Kind string `json:"kind"`
|
||||
|
||||
// Namespace represents the namespace for the referent.
|
||||
// For non-namespace scoped resources(e.g. 'ClusterRole'),do not need specify Namespace,
|
||||
// and for namespace scoped resources, Namespace is required.
|
||||
// If Namespace is not specified, means the resource is non-namespace scoped.
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
|
||||
// Name represents the name of the referent.
|
||||
Name string `json:"name"`
|
||||
|
||||
// ResourceVersion represents the internal version of the referenced object, that can be used by clients to
|
||||
// determine when object has changed.
|
||||
// +optional
|
||||
ResourceVersion string `json:"resourceVersion,omitempty"`
|
||||
}
|
||||
|
||||
// TargetCluster represents the identifier of a member cluster.
|
||||
type TargetCluster struct {
|
||||
// Name of target cluster.
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// PropagationBindingStatus represents the overall status of the strategy as well as the referenced resources.
|
||||
type PropagationBindingStatus struct {
|
||||
// Conditions contain the different condition statuses.
|
||||
// +optional
|
||||
Conditions []metav1.Condition `json:"conditions,omitempty"`
|
||||
// AggregatedStatus represents status list of the resource running in each member cluster.
|
||||
// +optional
|
||||
AggregatedStatus []AggregatedStatusItem `json:"aggregatedStatus,omitempty"`
|
||||
}
|
||||
|
||||
// AggregatedStatusItem represents status of the resource running in a member cluster.
|
||||
type AggregatedStatusItem struct {
|
||||
// ClusterName represents the member cluster name which the resource deployed on.
|
||||
ClusterName string `json:"clusterName"`
|
||||
// ResourceStatus represents the status of the resource.
|
||||
// +optional
|
||||
ResourceStatus ResourceStatus `json:"resourceStatus,omitempty"`
|
||||
}
|
||||
|
||||
// ResourceStatus represents status of all supported resource type.
|
||||
// Each field owns a specific `Kind`, and only one field will be available(non-nil).
|
||||
type ResourceStatus struct {
|
||||
// Deployment represents the deployment status in the member cluster,
|
||||
// only available when the resource kind is Deployment.
|
||||
// +optional
|
||||
Deployment *DeploymentStatus `json:"deploymentStatus,omitempty"`
|
||||
// DaemonSet
|
||||
// Job
|
||||
// Secret...
|
||||
}
|
||||
|
||||
// DeploymentStatus represents a 'Deployment' status.
|
||||
type DeploymentStatus struct {
|
||||
// Total number of non-terminated pods targeted by this deployment (their labels match the selector).
|
||||
// +optional
|
||||
Replicas int32 `json:"replicas,omitempty"`
|
||||
|
||||
// Total number of non-terminated pods targeted by this deployment that have the desired template spec.
|
||||
// +optional
|
||||
UpdatedReplicas int32 `json:"updatedReplicas,omitempty"`
|
||||
|
||||
// Total number of ready pods targeted by this deployment.
|
||||
// +optional
|
||||
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
|
||||
|
||||
// Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.
|
||||
// +optional
|
||||
AvailableReplicas int32 `json:"availableReplicas,omitempty"`
|
||||
|
||||
// Total number of unavailable pods targeted by this deployment. This is the total number of
|
||||
// pods that are still required for the deployment to have 100% available capacity. They may
|
||||
// either be pods that are running but not yet available or pods that still have not been created.
|
||||
// +optional
|
||||
UnavailableReplicas int32 `json:"unavailableReplicas,omitempty"`
|
||||
}
|
||||
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
||||
// PropagationBindingList contains a list of PropagationBinding.
|
||||
type PropagationBindingList struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ListMeta `json:"metadata,omitempty"`
|
||||
|
||||
// Items is the list of PropagationBinding.
|
||||
Items []PropagationBinding `json:"items"`
|
||||
}
|
Loading…
Reference in New Issue