diff --git a/multicluster/apis/multicluster/v1alpha1/clusterset_types.go b/multicluster/apis/multicluster/v1alpha1/clusterset_types.go index 7a45795b574..cf23492c5cb 100644 --- a/multicluster/apis/multicluster/v1alpha1/clusterset_types.go +++ b/multicluster/apis/multicluster/v1alpha1/clusterset_types.go @@ -17,6 +17,7 @@ limitations under the License. package v1alpha1 import ( + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -32,11 +33,8 @@ type MemberCluster struct { ServiceAccount string `json:"serviceAccount,omitempty"` } -// ClusterSetSpec defines the desired state of ClusterSet +// ClusterSetSpec defines the desired state of ClusterSet. type ClusterSetSpec struct { - // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster - // Important: Run "make" to regenerate code after modifying this file - // Members include member clusters known to the leader clusters. // Used in leader cluster. Members []MemberCluster `json:"members,omitempty"` @@ -47,16 +45,79 @@ type ClusterSetSpec struct { Namespace string `json:"namespace,omitempty"` } -// ClusterSetStatus defines the observed state of ClusterSet +type ClusterSetConditionType string + +const ( + // ClusterSetReady indicates whether ClusterSet is ready. + ClusterSetReady ClusterSetConditionType = "Ready" +) + +// ClusterSetCondition indicates the readiness condition of the clusterSet. +type ClusterSetCondition struct { + Type ClusterSetConditionType `json:"type,omitempty"` + // Status of the condition, one of True, False, Unknown. + Status v1.ConditionStatus `json:"status,omitempty"` + // +optional + // Last time the condition transited from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` + // +optional + // A human readable message indicating details about the transition. + Message string `json:"message,omitempty"` + // +optional + // Unique, one-word, CamelCase reason for the condition's last transition. + Reason string `json:"reason,omitempty"` +} + +type ClusterConditionType string + +const ( + // ClusterReady indicates whether Cluster is ready and connected. + ClusterReady ClusterConditionType = "Ready" + // ClusterIsLeader indicates whether Cluster is leader. + ClusterIsLeader ClusterConditionType = "IsLeader" +) + +// ClusterCondition indicates the readiness condition of a cluster. +type ClusterCondition struct { + Type ClusterConditionType `json:"type,omitempty"` + // Status of the condition, one of True, False, Unknown. + Status v1.ConditionStatus `json:"status,omitempty"` + + // +optional + // Last time the condition transited from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` + // +optional + // A human readable message indicating details about the transition. + Message string `json:"message,omitempty"` + // +optional + // Unique, one-word, CamelCase reason for the condition's last transition. + Reason string `json:"reason,omitempty"` +} + +type ClusterStatus struct { + // ClusterID is the unique identifier of this cluster. + ClusterID string `json:"clusterID,omitempty"` + Conditions []ClusterCondition `json:"conditions,omitempty"` +} + +// ClusterSetStatus defines the observed state of ClusterSet. type ClusterSetStatus struct { - // Important: Run "make" to regenerate code after modifying this file - // TBD + // Total number of member clusters configured in the set. + TotalClusters int32 `json:"totalClusters,omitempty"` + // Total number of clusters ready and connected. + ReadyClusters int32 `json:"readyClusters,omitempty"` + // The overall condition of the cluster set. + Conditions []ClusterSetCondition `json:"conditions,omitempty"` + // The status of individual member clusters. + ClusterStatuses []ClusterStatus `json:"clusterStatuses,omitempty"` + // The generation observed by the controller. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` } //+kubebuilder:object:root=true //+kubebuilder:subresource:status -// ClusterSet is the Schema for the clustersets API +// ClusterSet is the Schema for the clustersets API. type ClusterSet struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` @@ -67,7 +128,7 @@ type ClusterSet struct { //+kubebuilder:object:root=true -// ClusterSetList contains a list of ClusterSet +// ClusterSetList contains a list of ClusterSet. type ClusterSetList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` diff --git a/multicluster/apis/multicluster/v1alpha1/resourceexport_types.go b/multicluster/apis/multicluster/v1alpha1/resourceexport_types.go index 31e22bab524..6bf1eb4532d 100644 --- a/multicluster/apis/multicluster/v1alpha1/resourceexport_types.go +++ b/multicluster/apis/multicluster/v1alpha1/resourceexport_types.go @@ -43,7 +43,7 @@ type RawResourceExport struct { Data []byte `json:"data,omitempty"` } -// ResourceExportSpec defines the desired state of ResourceExport +// ResourceExportSpec defines the desired state of ResourceExport. type ResourceExportSpec struct { // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster // Important: Run "make" to regenerate code after modifying this file @@ -67,15 +67,37 @@ type ResourceExportSpec struct { Raw RawResourceExport `json:"raw,omitempty"` } -// ResourceExportStatus defines the observed state of ResourceExport +type ResourceExportConditionType string + +const ( + ResourceExportSucceeded ResourceExportConditionType = "Succeeded" +) + +// ResourceExportCondition indicates the readiness condition of the ResourceExport. +type ResourceExportCondition struct { + Type ResourceExportConditionType `json:"type,omitempty"` + // Status of the condition, one of True, False, Unknown. + Status v1.ConditionStatus `json:"status,omitempty"` + // +optional + // Last time the condition transited from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` + // +optional + // A human readable message indicating details about the transition. + Message string `json:"message,omitempty"` + // +optional + // Unique, one-word, CamelCase reason for the condition's last transition. + Reason string `json:"reason,omitempty"` +} + +// ResourceExportStatus defines the observed state of ResourceExport. type ResourceExportStatus struct { - // TBD + Conditions []ResourceExportCondition `json:"conditions,omitempty"` } //+kubebuilder:object:root=true //+kubebuilder:subresource:status -// ResourceExport is the Schema for the resourceexports API +// ResourceExport is the Schema for the resourceexports API. type ResourceExport struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` @@ -86,7 +108,7 @@ type ResourceExport struct { //+kubebuilder:object:root=true -// ResourceExportList contains a list of ResourceExport +// ResourceExportList contains a list of ResourceExport. type ResourceExportList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` diff --git a/multicluster/apis/multicluster/v1alpha1/resourceimport_types.go b/multicluster/apis/multicluster/v1alpha1/resourceimport_types.go index 6421db89252..04e815852df 100644 --- a/multicluster/apis/multicluster/v1alpha1/resourceimport_types.go +++ b/multicluster/apis/multicluster/v1alpha1/resourceimport_types.go @@ -39,7 +39,7 @@ type RawResourceImport struct { Data []byte `json:"data,omitempty"` } -// ResourceImportSpec defines the desired state of ResourceImport +// ResourceImportSpec defines the desired state of ResourceImport. type ResourceImportSpec struct { // ClusterIDs specifies the member clusters this resource to import to. // When not specified, import to all member clusters. @@ -65,15 +65,44 @@ type ResourceImportSpec struct { Raw *RawResourceImport `json:"raw,omitempty"` } -// ResourceImportStatus defines the observed state of ResourceImport +type ResourceImportConditionType string + +const ( + ResourceImportSucceeded ResourceImportConditionType = "Succeeded" +) + +// ResourceImportCondition indicates the condition of the ResourceImport in a cluster. +type ResourceImportCondition struct { + Type ResourceImportConditionType `json:"type,omitempty"` + // Status of the condition, one of True, False, Unknown. + Status v1.ConditionStatus `json:"status,omitempty"` + // +optional + // Last time the condition transited from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` + // +optional + // A human readable message indicating details about the transition. + Message string `json:"message,omitempty"` + // +optional + // Unique, one-word, CamelCase reason for the condition's last transition. + Reason string `json:"reason,omitempty"` +} + +// ResourceImportClusterStatus indicates the readiness status of the ResourceImport in clusters. +type ResourceImportClusterStatus struct { + // ClusterID is the unique identifier of this cluster. + ClusterID string `json:"clusterID,omitempty"` + Conditions []ResourceImportCondition `json:"conditions,omitempty"` +} + +// ResourceImportStatus defines the observed state of ResourceImport. type ResourceImportStatus struct { - // TBD + ClusterStatuses []ResourceImportClusterStatus `json:"clusterStatuses,omitempty"` } //+kubebuilder:object:root=true //+kubebuilder:subresource:status -// ResourceImport is the Schema for the resourceimports API +// ResourceImport is the Schema for the resourceimports API. type ResourceImport struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` @@ -84,7 +113,7 @@ type ResourceImport struct { //+kubebuilder:object:root=true -// ResourceImportList contains a list of ResourceImport +// ResourceImportList contains a list of ResourceImport. type ResourceImportList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` diff --git a/multicluster/apis/multicluster/v1alpha1/zz_generated.deepcopy.go b/multicluster/apis/multicluster/v1alpha1/zz_generated.deepcopy.go index 15674110a29..c9b4c2b27b5 100644 --- a/multicluster/apis/multicluster/v1alpha1/zz_generated.deepcopy.go +++ b/multicluster/apis/multicluster/v1alpha1/zz_generated.deepcopy.go @@ -85,13 +85,29 @@ func (in *ClusterClaimList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterCondition) DeepCopyInto(out *ClusterCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCondition. +func (in *ClusterCondition) DeepCopy() *ClusterCondition { + if in == nil { + return nil + } + out := new(ClusterCondition) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterSet) DeepCopyInto(out *ClusterSet) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status + in.Status.DeepCopyInto(&out.Status) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSet. @@ -112,6 +128,22 @@ func (in *ClusterSet) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSetCondition) DeepCopyInto(out *ClusterSetCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSetCondition. +func (in *ClusterSetCondition) DeepCopy() *ClusterSetCondition { + if in == nil { + return nil + } + out := new(ClusterSetCondition) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterSetList) DeepCopyInto(out *ClusterSetList) { *out = *in @@ -172,6 +204,20 @@ func (in *ClusterSetSpec) DeepCopy() *ClusterSetSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterSetStatus) DeepCopyInto(out *ClusterSetStatus) { *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ClusterSetCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ClusterStatuses != nil { + in, out := &in.ClusterStatuses, &out.ClusterStatuses + *out = make([]ClusterStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSetStatus. @@ -184,6 +230,28 @@ func (in *ClusterSetStatus) DeepCopy() *ClusterSetStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterStatus) DeepCopyInto(out *ClusterStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ClusterCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatus. +func (in *ClusterStatus) DeepCopy() *ClusterStatus { + if in == nil { + return nil + } + out := new(ClusterStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *EndpointsExport) DeepCopyInto(out *EndpointsExport) { *out = *in @@ -382,7 +450,7 @@ func (in *ResourceExport) DeepCopyInto(out *ResourceExport) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status + in.Status.DeepCopyInto(&out.Status) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceExport. @@ -403,6 +471,22 @@ func (in *ResourceExport) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceExportCondition) DeepCopyInto(out *ResourceExportCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceExportCondition. +func (in *ResourceExportCondition) DeepCopy() *ResourceExportCondition { + if in == nil { + return nil + } + out := new(ResourceExportCondition) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ResourceExportFilter) DeepCopyInto(out *ResourceExportFilter) { *out = *in @@ -558,6 +642,13 @@ func (in *ResourceExportSpec) DeepCopy() *ResourceExportSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ResourceExportStatus) DeepCopyInto(out *ResourceExportStatus) { *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ResourceExportCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceExportStatus. @@ -576,7 +667,7 @@ func (in *ResourceImport) DeepCopyInto(out *ResourceImport) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status + in.Status.DeepCopyInto(&out.Status) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceImport. @@ -597,6 +688,44 @@ func (in *ResourceImport) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceImportClusterStatus) DeepCopyInto(out *ResourceImportClusterStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ResourceImportCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceImportClusterStatus. +func (in *ResourceImportClusterStatus) DeepCopy() *ResourceImportClusterStatus { + if in == nil { + return nil + } + out := new(ResourceImportClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceImportCondition) DeepCopyInto(out *ResourceImportCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceImportCondition. +func (in *ResourceImportCondition) DeepCopy() *ResourceImportCondition { + if in == nil { + return nil + } + out := new(ResourceImportCondition) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ResourceImportFilter) DeepCopyInto(out *ResourceImportFilter) { *out = *in @@ -761,6 +890,13 @@ func (in *ResourceImportSpec) DeepCopy() *ResourceImportSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ResourceImportStatus) DeepCopyInto(out *ResourceImportStatus) { *out = *in + if in.ClusterStatuses != nil { + in, out := &in.ClusterStatuses, &out.ClusterStatuses + *out = make([]ResourceImportClusterStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceImportStatus. diff --git a/multicluster/config/crd/bases/multicluster.crd.antrea.io_clustersets.yaml b/multicluster/config/crd/bases/multicluster.crd.antrea.io_clustersets.yaml index 4029c4fd99e..059f5f841cf 100644 --- a/multicluster/config/crd/bases/multicluster.crd.antrea.io_clustersets.yaml +++ b/multicluster/config/crd/bases/multicluster.crd.antrea.io_clustersets.yaml @@ -34,7 +34,7 @@ spec: metadata: type: object spec: - description: ClusterSetSpec defines the desired state of ClusterSet + description: ClusterSetSpec defines the desired state of ClusterSet. properties: leaders: description: Leaders include leader clusters known to the member clusters. @@ -85,7 +85,81 @@ spec: type: string type: object status: - description: ClusterSetStatus defines the observed state of ClusterSet + description: ClusterSetStatus defines the observed state of ClusterSet. + properties: + clusterStatuses: + description: The status of individual member clusters. + items: + properties: + clusterID: + description: ClusterID is the unique identifier of this cluster. + type: string + conditions: + items: + description: ClusterCondition indicates the readiness condition + of a cluster. + properties: + lastTransitionTime: + description: Last time the condition transited from one + status to another. + format: date-time + type: string + message: + description: A human readable message indicating details + about the transition. + type: string + reason: + description: Unique, one-word, CamelCase reason for the + condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + type: string + type: object + type: array + type: object + type: array + conditions: + description: The overall condition of the cluster set. + items: + description: ClusterSetCondition indicates the readiness condition + of the clusterSet. + properties: + lastTransitionTime: + description: Last time the condition transited from one status + to another. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: Unique, one-word, CamelCase reason for the condition's + last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + type: string + type: object + type: array + observedGeneration: + description: The generation observed by the controller. + format: int64 + type: integer + readyClusters: + description: Total number of clusters ready and connected. + format: int32 + type: integer + totalClusters: + description: Total number of member clusters configured in the set. + format: int32 + type: integer type: object type: object served: true diff --git a/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceexports.yaml b/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceexports.yaml index 6622886fd54..c1c8e5004c0 100644 --- a/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceexports.yaml +++ b/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceexports.yaml @@ -655,6 +655,32 @@ spec: type: object status: description: ResourceExportStatus defines the observed state of ResourceExport + properties: + conditions: + items: + description: ResourceExportCondition indicates the readiness condition + of the ResourceExport + properties: + lastTransitionTime: + description: Last time the condition transited from one status + to another + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition + type: string + reason: + description: Unique, one-word, CamelCase reason for the condition's + last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown + type: string + type: + type: string + type: object + type: array type: object type: object served: true diff --git a/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceimports.yaml b/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceimports.yaml index 0068177a599..06bcb737863 100644 --- a/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceimports.yaml +++ b/multicluster/config/crd/bases/multicluster.crd.antrea.io_resourceimports.yaml @@ -434,6 +434,43 @@ spec: type: object status: description: ResourceImportStatus defines the observed state of ResourceImport + properties: + clusterStatuses: + items: + description: ResourceImportClusterStatus indicates the readiness + status of the ResourceImport in clusters + properties: + clusterID: + description: ClusterID is the unique identifier of this cluster. + type: string + conditions: + items: + description: ResourceImportCondition indicates the condition + of the ResourceImport in a cluster + properties: + lastTransitionTime: + description: Last time the condition transited from one + status to another + format: date-time + type: string + message: + description: A human readable message indicating details + about the transition + type: string + reason: + description: Unique, one-word, CamelCase reason for the + condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, + Unknown + type: string + type: + type: string + type: object + type: array + type: object + type: array type: object type: object served: true diff --git a/multicluster/config/multi-cluster.yaml b/multicluster/config/multi-cluster.yaml index 89fe3493d52..5436c07af51 100644 --- a/multicluster/config/multi-cluster.yaml +++ b/multicluster/config/multi-cluster.yaml @@ -37,10 +37,14 @@ spec: description: ClusterClaim is the Schema for the clusterclaims API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -92,15 +96,19 @@ spec: description: ClusterSet is the Schema for the clustersets API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: - description: ClusterSetSpec defines the desired state of ClusterSet + description: ClusterSetSpec defines the desired state of ClusterSet. properties: leaders: description: Leaders include leader clusters known to the member clusters. @@ -111,18 +119,21 @@ spec: description: Identify member cluster in ClusterSet. type: string secret: - description: Secret name to access API server of the member from the leader cluster. + description: Secret name to access API server of the member + from the leader cluster. type: string server: description: API server of the destination cluster. type: string serviceAccount: - description: ServiceAccount used by the member cluster to access into leader cluster. + description: ServiceAccount used by the member cluster to access + into leader cluster. type: string type: object type: array members: - description: Members include member clusters known to the leader clusters. Used in leader cluster. + description: Members include member clusters known to the leader clusters. + Used in leader cluster. items: description: MemberCluster defines member cluster information. properties: @@ -130,22 +141,99 @@ spec: description: Identify member cluster in ClusterSet. type: string secret: - description: Secret name to access API server of the member from the leader cluster. + description: Secret name to access API server of the member + from the leader cluster. type: string server: description: API server of the destination cluster. type: string serviceAccount: - description: ServiceAccount used by the member cluster to access into leader cluster. + description: ServiceAccount used by the member cluster to access + into leader cluster. type: string type: object type: array namespace: - description: Namespace to connect to in leader clusters. Used in member cluster. + description: Namespace to connect to in leader clusters. Used in member + cluster. type: string type: object status: - description: ClusterSetStatus defines the observed state of ClusterSet + description: ClusterSetStatus defines the observed state of ClusterSet. + properties: + clusterStatuses: + description: The status of individual member clusters. + items: + properties: + clusterID: + description: ClusterID is the unique identifier of this cluster. + type: string + conditions: + items: + description: ClusterCondition indicates the readiness condition + of a cluster. + properties: + lastTransitionTime: + description: Last time the condition transited from one + status to another. + format: date-time + type: string + message: + description: A human readable message indicating details + about the transition. + type: string + reason: + description: Unique, one-word, CamelCase reason for the + condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + type: string + type: object + type: array + type: object + type: array + conditions: + description: The overall condition of the cluster set. + items: + description: ClusterSetCondition indicates the readiness condition + of the clusterSet. + properties: + lastTransitionTime: + description: Last time the condition transited from one status + to another. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: Unique, one-word, CamelCase reason for the condition's + last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + type: string + type: object + type: array + observedGeneration: + description: The generation observed by the controller. + format: int64 + type: integer + readyClusters: + description: Total number of clusters ready and connected. + format: int32 + type: integer + totalClusters: + description: Total number of member clusters configured in the set. + format: int32 + type: integer type: object type: object served: true @@ -188,10 +276,13 @@ spec: - name: v1alpha1 schema: openAPIV3Schema: - description: MemberClusterAnnounce is the Schema for the memberclusterannounces API + description: MemberClusterAnnounce is the Schema for the memberclusterannounces + API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string clusterID: description: ClusterID of the member cluster. @@ -200,7 +291,9 @@ spec: description: ClusterSet this member belongs to. type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string leaderClusterID: description: Leader cluster this member has selected. @@ -236,13 +329,18 @@ spec: - name: v1alpha1 schema: openAPIV3Schema: - description: ResourceExportFilter is the Schema for the ResourceExportFilters API + description: ResourceExportFilter is the Schema for the ResourceExportFilters + API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -250,7 +348,8 @@ spec: description: ResourceExportFilterSpec defines the desired state of ResourceExportFilter type: object status: - description: ResourceExportFilterStatus defines the observed state of ResourceExportFilter + description: ResourceExportFilterStatus defines the observed state of + ResourceExportFilter type: object type: object served: true @@ -296,10 +395,14 @@ spec: description: ResourceExport is the Schema for the resourceexports API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -307,28 +410,46 @@ spec: description: ResourceExportSpec defines the desired state of ResourceExport properties: clusterID: - description: ClusterID specifies the member cluster this resource exported from. + description: ClusterID specifies the member cluster this resource + exported from. type: string endpoints: description: If exported resource is EndPoints. properties: subsets: items: - description: 'EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given: { Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] } The resulting set of endpoints can be viewed as: a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], b: [ 10.10.1.1:309, 10.10.2.2:309 ]' + description: 'EndpointSubset is a group of addresses with a + common set of ports. The expanded set of endpoints is the + Cartesian product of Addresses x Ports. For example, given: { Addresses: + [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], Ports: [{"name": + "a", "port": 8675}, {"name": "b", "port": 309}] } The resulting + set of endpoints can be viewed as: a: [ 10.10.1.1:8675, + 10.10.2.2:8675 ], b: [ 10.10.1.1:309, 10.10.2.2:309 ]' properties: addresses: - description: IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize. + description: IP addresses which offer the related ports + that are marked as ready. These endpoints should be considered + safe for load balancers and clients to utilize. items: - description: EndpointAddress is a tuple that describes single IP address. + description: EndpointAddress is a tuple that describes + single IP address. properties: hostname: description: The Hostname of this endpoint type: string ip: - description: 'The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready. TODO: This should allow hostname or IP, See #4447.' + description: 'The IP of this endpoint. May not be + loopback (127.0.0.0/8), link-local (169.254.0.0/16), + or link-local multicast ((224.0.0.0/24). IPv6 is + also accepted but not fully supported on all platforms. + Also, certain kubernetes components, like kube-proxy, + are not IPv6 ready. TODO: This should allow hostname + or IP, See #4447.' type: string nodeName: - description: 'Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.' + description: 'Optional: Node hosting this endpoint. + This can be used to determine endpoints local to + a node.' type: string targetRef: description: Reference to object providing the endpoint. @@ -337,22 +458,41 @@ spec: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + description: 'If referring to a piece of an object + instead of an entire object, this string should + contain a valid JSON/Go field access statement, + such as desiredState.manifest.containers[2]. + For example, if the object reference is to a + container within a pod, this would take on a + value like: "spec.containers{name}" (where "name" + refers to the name of the container that triggered + the event) or if no container name is specified + "spec.containers[2]" (container with index 2 + in this pod). This syntax is chosen only to + have some well-defined way of referencing a + part of an object. TODO: this design is not + final and this field is subject to change in + the future.' type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind of the referent. More info: + https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: 'Namespace of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' type: string resourceVersion: - description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: 'Specific resourceVersion to which + this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: 'UID of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' type: string type: object required: @@ -360,18 +500,30 @@ spec: type: object type: array notReadyAddresses: - description: IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check. + description: IP addresses which offer the related ports + but are not currently marked as ready because they have + not yet finished starting, have recently failed a readiness + check, or have recently failed a liveness check. items: - description: EndpointAddress is a tuple that describes single IP address. + description: EndpointAddress is a tuple that describes + single IP address. properties: hostname: description: The Hostname of this endpoint type: string ip: - description: 'The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready. TODO: This should allow hostname or IP, See #4447.' + description: 'The IP of this endpoint. May not be + loopback (127.0.0.0/8), link-local (169.254.0.0/16), + or link-local multicast ((224.0.0.0/24). IPv6 is + also accepted but not fully supported on all platforms. + Also, certain kubernetes components, like kube-proxy, + are not IPv6 ready. TODO: This should allow hostname + or IP, See #4447.' type: string nodeName: - description: 'Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.' + description: 'Optional: Node hosting this endpoint. + This can be used to determine endpoints local to + a node.' type: string targetRef: description: Reference to object providing the endpoint. @@ -380,22 +532,41 @@ spec: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + description: 'If referring to a piece of an object + instead of an entire object, this string should + contain a valid JSON/Go field access statement, + such as desiredState.manifest.containers[2]. + For example, if the object reference is to a + container within a pod, this would take on a + value like: "spec.containers{name}" (where "name" + refers to the name of the container that triggered + the event) or if no container name is specified + "spec.containers[2]" (container with index 2 + in this pod). This syntax is chosen only to + have some well-defined way of referencing a + part of an object. TODO: this design is not + final and this field is subject to change in + the future.' type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind of the referent. More info: + https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: 'Namespace of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' type: string resourceVersion: - description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: 'Specific resourceVersion to which + this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: 'UID of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' type: string type: object required: @@ -405,13 +576,24 @@ spec: ports: description: Port numbers available on the related IP addresses. items: - description: EndpointPort is a tuple that describes a single port. + description: EndpointPort is a tuple that describes a + single port. properties: appProtocol: - description: The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default. + description: The application protocol for this port. + This field follows standard Kubernetes label syntax. + Un-prefixed names are reserved for IANA standard + service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). + Non-standard protocols should use prefixed names + such as mycompany.com/my-custom-protocol. This is + a beta field that is guarded by the ServiceAppProtocol + feature gate and enabled by default. type: string name: - description: The name of this port. This must match the 'name' field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined. + description: The name of this port. This must match + the 'name' field in the corresponding ServicePort. + Must be a DNS_LABEL. Optional only if one port is + defined. type: string port: description: The port number of the endpoint. @@ -419,7 +601,8 @@ spec: type: integer protocol: default: TCP - description: The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP. + description: The IP protocol for this port. Must be + UDP, TCP, or SCTP. Default is TCP. type: string required: - port @@ -432,28 +615,35 @@ spec: description: If exported resource is ExternalEntity. properties: externalentityspec: - description: ExternalEntitySpec defines the desired state for ExternalEntity. + description: ExternalEntitySpec defines the desired state for + ExternalEntity. properties: endpoints: - description: Endpoints is a list of external endpoints associated with this entity. + description: Endpoints is a list of external endpoints associated + with this entity. items: - description: Endpoint refers to an endpoint associated with the ExternalEntity. + description: Endpoint refers to an endpoint associated with + the ExternalEntity. properties: ip: description: IP associated with this endpoint. type: string name: - description: Name identifies this endpoint. Could be the network interface name in case of VMs. + description: Name identifies this endpoint. Could be + the network interface name in case of VMs. type: string type: object type: array externalNode: - description: ExternalNode is the opaque identifier of the agent/controller responsible for additional processing or handling of this external entity. + description: ExternalNode is the opaque identifier of the + agent/controller responsible for additional processing or + handling of this external entity. type: string ports: description: Ports maintain the list of named ports. items: - description: NamedPort describes the port and protocol to match in a rule. + description: NamedPort describes the port and protocol to + match in a rule. properties: name: description: Name associated with the Port. @@ -464,7 +654,9 @@ spec: type: integer protocol: default: TCP - description: The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP. + description: The protocol (TCP, UDP, or SCTP) which + traffic must match. If not specified, this field defaults + to TCP. type: string type: object type: array @@ -490,72 +682,231 @@ spec: description: If exported resource is Service. properties: serviceSpec: - description: ServiceSpec describes the attributes that a user creates on a service. + description: ServiceSpec describes the attributes that a user + creates on a service. properties: allocateLoadBalancerNodePorts: - description: allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is "true". It may be set to "false" if the cluster load-balancer does not rely on NodePorts. allocateLoadBalancerNodePorts may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type. This field is alpha-level and is only honored by servers that enable the ServiceLBNodePortControl feature. + description: allocateLoadBalancerNodePorts defines if NodePorts + will be automatically allocated for services with type LoadBalancer. Default + is "true". It may be set to "false" if the cluster load-balancer + does not rely on NodePorts. allocateLoadBalancerNodePorts + may only be set for services with type LoadBalancer and + will be cleared if the type is changed to any other type. + This field is alpha-level and is only honored by servers + that enable the ServiceLBNodePortControl feature. type: boolean clusterIP: - description: 'clusterIP is the IP address of the service and is usually assigned randomly. If an address is specified manually, is in-range (as per system configuration), and is not in use, it will be allocated to the service; otherwise creation of the service will fail. This field may not be changed through updates unless the type field is also being changed to ExternalName (which requires this field to be blank) or the type field is being changed from ExternalName (in which case this field may optionally be specified, as describe above). Valid values are "None", empty string (""), or a valid IP address. Setting this to "None" makes a "headless service" (no virtual IP), which is useful when direct endpoint connections are preferred and proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. If this field is specified when creating a Service of type ExternalName, creation will fail. This field will be wiped when updating a Service to type ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' + description: 'clusterIP is the IP address of the service and + is usually assigned randomly. If an address is specified + manually, is in-range (as per system configuration), and + is not in use, it will be allocated to the service; otherwise + creation of the service will fail. This field may not be + changed through updates unless the type field is also being + changed to ExternalName (which requires this field to be + blank) or the type field is being changed from ExternalName + (in which case this field may optionally be specified, as + describe above). Valid values are "None", empty string + (""), or a valid IP address. Setting this to "None" makes + a "headless service" (no virtual IP), which is useful when + direct endpoint connections are preferred and proxying is + not required. Only applies to types ClusterIP, NodePort, + and LoadBalancer. If this field is specified when creating + a Service of type ExternalName, creation will fail. This + field will be wiped when updating a Service to type ExternalName. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' type: string clusterIPs: - description: "ClusterIPs is a list of IP addresses assigned to this service, and are usually assigned randomly. If an address is specified manually, is in-range (as per system configuration), and is not in use, it will be allocated to the service; otherwise creation of the service will fail. This field may not be changed through updates unless the type field is also being changed to ExternalName (which requires this field to be empty) or the type field is being changed from ExternalName (in which case this field may optionally be specified, as describe above). Valid values are \"None\", empty string (\"\"), or a valid IP address. Setting this to \"None\" makes a \"headless service\" (no virtual IP), which is useful when direct endpoint connections are preferred and proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. If this field is specified when creating a Service of type ExternalName, creation will fail. This field will be wiped when updating a Service to type ExternalName. If this field is not specified, it will be initialized from the clusterIP field. If this field is specified, clients must ensure that clusterIPs[0] and clusterIP have the same value. \n Unless the \"IPv6DualStack\" feature gate is enabled, this field is limited to one value, which must be the same as the clusterIP field. If the feature gate is enabled, this field may hold a maximum of two entries (dual-stack IPs, in either order). These IPs must correspond to the values of the ipFamilies field. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies" + description: "ClusterIPs is a list of IP addresses assigned + to this service, and are usually assigned randomly. If + an address is specified manually, is in-range (as per system + configuration), and is not in use, it will be allocated + to the service; otherwise creation of the service will fail. + This field may not be changed through updates unless the + type field is also being changed to ExternalName (which + requires this field to be empty) or the type field is being + changed from ExternalName (in which case this field may + optionally be specified, as describe above). Valid values + are \"None\", empty string (\"\"), or a valid IP address. + \ Setting this to \"None\" makes a \"headless service\" + (no virtual IP), which is useful when direct endpoint connections + are preferred and proxying is not required. Only applies + to types ClusterIP, NodePort, and LoadBalancer. If this + field is specified when creating a Service of type ExternalName, + creation will fail. This field will be wiped when updating + a Service to type ExternalName. If this field is not specified, + it will be initialized from the clusterIP field. If this + field is specified, clients must ensure that clusterIPs[0] + and clusterIP have the same value. \n Unless the \"IPv6DualStack\" + feature gate is enabled, this field is limited to one value, + which must be the same as the clusterIP field. If the feature + gate is enabled, this field may hold a maximum of two entries + (dual-stack IPs, in either order). These IPs must correspond + to the values of the ipFamilies field. Both clusterIPs and + ipFamilies are governed by the ipFamilyPolicy field. More + info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies" items: type: string type: array x-kubernetes-list-type: atomic externalIPs: - description: externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. + description: externalIPs is a list of IP addresses for which + nodes in the cluster will also accept traffic for this service. These + IPs are not managed by Kubernetes. The user is responsible + for ensuring that traffic arrives at a node with this IP. A + common example is external load-balancers that are not part + of the Kubernetes system. items: type: string type: array externalName: - description: externalName is the external reference that discovery mechanisms will return as an alias for this service (e.g. a DNS CNAME record). No proxying will be involved. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName". + description: externalName is the external reference that discovery + mechanisms will return as an alias for this service (e.g. + a DNS CNAME record). No proxying will be involved. Must + be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) + and requires `type` to be "ExternalName". type: string externalTrafficPolicy: - description: externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading. + description: externalTrafficPolicy denotes if this Service + desires to route external traffic to node-local or cluster-wide + endpoints. "Local" preserves the client source IP and avoids + a second hop for LoadBalancer and Nodeport type services, + but risks potentially imbalanced traffic spreading. "Cluster" + obscures the client source IP and may cause a second hop + to another node, but should have good overall load-spreading. type: string healthCheckNodePort: - description: healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type). + description: healthCheckNodePort specifies the healthcheck + nodePort for the service. This only applies when type is + set to LoadBalancer and externalTrafficPolicy is set to + Local. If a value is specified, is in-range, and is not + in use, it will be used. If not specified, a value will + be automatically allocated. External systems (e.g. load-balancers) + can use this port to determine if a given node holds endpoints + for this service or not. If this field is specified when + creating a Service which does not need it, creation will + fail. This field will be wiped when updating a Service to + no longer need it (e.g. changing type). format: int32 type: integer internalTrafficPolicy: - description: InternalTrafficPolicy specifies if the cluster internal traffic should be routed to all endpoints or node-local endpoints only. "Cluster" routes internal traffic to a Service to all endpoints. "Local" routes traffic to node-local endpoints only, traffic is dropped if no node-local endpoints are ready. The default value is "Cluster". + description: InternalTrafficPolicy specifies if the cluster + internal traffic should be routed to all endpoints or node-local + endpoints only. "Cluster" routes internal traffic to a Service + to all endpoints. "Local" routes traffic to node-local endpoints + only, traffic is dropped if no node-local endpoints are + ready. The default value is "Cluster". type: string ipFamilies: - description: "IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service, and is gated by the \"IPv6DualStack\" feature gate. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are \"IPv4\" and \"IPv6\". This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to \"headless\" services. This field will be wiped when updating a Service to type ExternalName. \n This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field." + description: "IPFamilies is a list of IP families (e.g. IPv4, + IPv6) assigned to this service, and is gated by the \"IPv6DualStack\" + feature gate. This field is usually assigned automatically + based on cluster configuration and the ipFamilyPolicy field. + If this field is specified manually, the requested family + is available in the cluster, and ipFamilyPolicy allows it, + it will be used; otherwise creation of the service will + fail. This field is conditionally mutable: it allows for + adding or removing a secondary IP family, but it does not + allow changing the primary IP family of the Service. Valid + values are \"IPv4\" and \"IPv6\". This field only applies + to Services of types ClusterIP, NodePort, and LoadBalancer, + and does apply to \"headless\" services. This field will + be wiped when updating a Service to type ExternalName. \n + This field may hold a maximum of two entries (dual-stack + families, in either order). These families must correspond + to the values of the clusterIPs field, if specified. Both + clusterIPs and ipFamilies are governed by the ipFamilyPolicy + field." items: - description: IPFamily represents the IP Family (IPv4 or IPv6). This type is used to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). + description: IPFamily represents the IP Family (IPv4 or + IPv6). This type is used to express the family of an IP + expressed by a type (e.g. service.spec.ipFamilies). type: string type: array x-kubernetes-list-type: atomic ipFamilyPolicy: - description: IPFamilyPolicy represents the dual-stack-ness requested or required by this Service, and is gated by the "IPv6DualStack" feature gate. If there is no value provided, then this field will be set to SingleStack. Services can be "SingleStack" (a single IP family), "PreferDualStack" (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or "RequireDualStack" (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName. + description: IPFamilyPolicy represents the dual-stack-ness + requested or required by this Service, and is gated by the + "IPv6DualStack" feature gate. If there is no value provided, + then this field will be set to SingleStack. Services can + be "SingleStack" (a single IP family), "PreferDualStack" + (two IP families on dual-stack configured clusters or a + single IP family on single-stack clusters), or "RequireDualStack" + (two IP families on dual-stack configured clusters, otherwise + fail). The ipFamilies and clusterIPs fields depend on the + value of this field. This field will be wiped when updating + a service to type ExternalName. type: string loadBalancerClass: - description: loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users. This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type 'LoadBalancer'. Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type. + description: loadBalancerClass is the class of the load balancer + implementation this Service belongs to. If specified, the + value of this field must be a label-style identifier, with + an optional prefix, e.g. "internal-vip" or "example.com/internal-vip". + Unprefixed names are reserved for end-users. This field + can only be set when the Service type is 'LoadBalancer'. + If not set, the default load balancer implementation is + used, today this is typically done through the cloud provider + integration, but should apply for any default implementation. + If set, it is assumed that a load balancer implementation + is watching for Services with a matching class. Any default + load balancer implementation (e.g. cloud providers) should + ignore Services that set this field. This field can only + be set when creating or updating a Service to type 'LoadBalancer'. + Once set, it can not be changed. This field will be wiped + when a service is updated to a non 'LoadBalancer' type. type: string loadBalancerIP: - description: 'Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.' + description: 'Only applies to Service Type: LoadBalancer LoadBalancer + will get created with the IP specified in this field. This + feature depends on whether the underlying cloud-provider + supports specifying the loadBalancerIP when a load balancer + is created. This field will be ignored if the cloud-provider + does not support the feature.' type: string loadBalancerSourceRanges: - description: 'If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/' + description: 'If specified and supported by the platform, + this will restrict traffic through the cloud-provider load-balancer + will be restricted to the specified client IPs. This field + will be ignored if the cloud-provider does not support the + feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/' items: type: string type: array ports: - description: 'The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' + description: 'The list of ports that are exposed by this service. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' items: - description: ServicePort contains information on service's port. + description: ServicePort contains information on service's + port. properties: appProtocol: - description: The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default. + description: The application protocol for this port. + This field follows standard Kubernetes label syntax. + Un-prefixed names are reserved for IANA standard service + names (as per RFC-6335 and http://www.iana.org/assignments/service-names). + Non-standard protocols should use prefixed names such + as mycompany.com/my-custom-protocol. This is a beta + field that is guarded by the ServiceAppProtocol feature + gate and enabled by default. type: string name: - description: The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service. + description: The name of this port within the service. + This must be a DNS_LABEL. All ports within a ServiceSpec + must have unique names. When considering the endpoints + for a Service, this must match the 'name' field in + the EndpointPort. Optional if only one ServicePort + is defined on this service. type: string nodePort: - description: 'The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport' + description: 'The port on each node on which this service + is exposed when type is NodePort or LoadBalancer. Usually + assigned by the system. If a value is specified, in-range, + and not in use it will be used, otherwise the operation + will fail. If not specified, a port will be allocated + if this Service requires one. If this field is specified + when creating a Service which does not need it, creation + will fail. This field will be wiped when updating + a Service to no longer need it (e.g. changing type + from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport' format: int32 type: integer port: @@ -564,13 +915,22 @@ spec: type: integer protocol: default: TCP - description: The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". Default is TCP. + description: The IP protocol for this port. Supports + "TCP", "UDP", and "SCTP". Default is TCP. type: string targetPort: anyOf: - type: integer - type: string - description: 'Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod''s container ports. If this is not specified, the value of the ''port'' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the ''port'' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service' + description: 'Number or name of the port to access on + the pods targeted by the service. Number must be in + the range 1 to 65535. Name must be an IANA_SVC_NAME. + If this is a string, it will be looked up as a named + port in the target Pod''s container ports. If this + is not specified, the value of the ''port'' field + is used (an identity map). This field is ignored for + services with clusterIP=None, and should be omitted + or set equal to the ''port'' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service' x-kubernetes-int-or-string: true required: - port @@ -581,41 +941,119 @@ spec: - protocol x-kubernetes-list-type: map publishNotReadyAddresses: - description: publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet's Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered "ready" even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior. + description: publishNotReadyAddresses indicates that any agent + which deals with endpoints for this Service should disregard + any indications of ready/not-ready. The primary use case + for setting this field is for a StatefulSet's Headless Service + to propagate SRV DNS records for its Pods for the purpose + of peer discovery. The Kubernetes controllers that generate + Endpoints and EndpointSlice resources for Services interpret + this to mean that all endpoints are considered "ready" even + if the Pods themselves are not. Agents which consume only + Kubernetes generated endpoints through the Endpoints or + EndpointSlice resources can safely assume this behavior. type: boolean selector: additionalProperties: type: string - description: 'Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/' + description: 'Route service traffic to pods with label keys + and values matching this selector. If empty or not present, + the service is assumed to have an external process managing + its endpoints, which Kubernetes will not modify. Only applies + to types ClusterIP, NodePort, and LoadBalancer. Ignored + if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/' type: object sessionAffinity: - description: 'Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' + description: 'Supports "ClientIP" and "None". Used to maintain + session affinity. Enable client IP based session affinity. + Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' type: string sessionAffinityConfig: - description: sessionAffinityConfig contains the configurations of session affinity. + description: sessionAffinityConfig contains the configurations + of session affinity. properties: clientIP: - description: clientIP contains the configurations of Client IP based session affinity. + description: clientIP contains the configurations of Client + IP based session affinity. properties: timeoutSeconds: - description: timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours). + description: timeoutSeconds specifies the seconds + of ClientIP type session sticky time. The value + must be >0 && <=86400(for 1 day) if ServiceAffinity + == "ClientIP". Default value is 10800(for 3 hours). format: int32 type: integer type: object type: object topologyKeys: - description: topologyKeys is a preference-order list of topology keys which implementations of services should use to preferentially sort endpoints when accessing this Service, it can not be used at the same time as externalTrafficPolicy=Local. Topology keys must be valid label keys and at most 16 keys may be specified. Endpoints are chosen based on the first topology key with available backends. If this field is specified and all entries have no backends that match the topology of the client, the service has no backends for that client and connections should fail. The special value "*" may be used to mean "any topology". This catch-all value, if used, only makes sense as the last value in the list. If this is not specified or empty, no topology constraints will be applied. This field is alpha-level and is only honored by servers that enable the ServiceTopology feature. This field is deprecated and will be removed in a future version. + description: topologyKeys is a preference-order list of topology + keys which implementations of services should use to preferentially + sort endpoints when accessing this Service, it can not be + used at the same time as externalTrafficPolicy=Local. Topology + keys must be valid label keys and at most 16 keys may be + specified. Endpoints are chosen based on the first topology + key with available backends. If this field is specified + and all entries have no backends that match the topology + of the client, the service has no backends for that client + and connections should fail. The special value "*" may be + used to mean "any topology". This catch-all value, if used, + only makes sense as the last value in the list. If this + is not specified or empty, no topology constraints will + be applied. This field is alpha-level and is only honored + by servers that enable the ServiceTopology feature. This + field is deprecated and will be removed in a future version. items: type: string type: array type: - description: 'type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object or EndpointSlice objects. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a virtual IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the same endpoints as the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the same endpoints as the clusterIP. "ExternalName" aliases this service to the specified externalName. Several other fields do not apply to ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types' + description: 'type determines how the Service is exposed. + Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, + NodePort, and LoadBalancer. "ClusterIP" allocates a cluster-internal + IP address for load-balancing to endpoints. Endpoints are + determined by the selector or if that is not specified, + by manual construction of an Endpoints object or EndpointSlice + objects. If clusterIP is "None", no virtual IP is allocated + and the endpoints are published as a set of endpoints rather + than a virtual IP. "NodePort" builds on ClusterIP and allocates + a port on every node which routes to the same endpoints + as the clusterIP. "LoadBalancer" builds on NodePort and + creates an external load-balancer (if supported in the current + cloud) which routes to the same endpoints as the clusterIP. + "ExternalName" aliases this service to the specified externalName. + Several other fields do not apply to ExternalName services. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types' type: string type: object type: object type: object status: description: ResourceExportStatus defines the observed state of ResourceExport + properties: + conditions: + items: + description: ResourceExportCondition indicates the readiness condition + of the ResourceExport + properties: + lastTransitionTime: + description: Last time the condition transited from one status + to another + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition + type: string + reason: + description: Unique, one-word, CamelCase reason for the condition's + last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown + type: string + type: + type: string + type: object + type: array type: object type: object served: true @@ -648,13 +1086,18 @@ spec: - name: v1alpha1 schema: openAPIV3Schema: - description: ResourceImportFilter is the Schema for the ResourceImportFilters API + description: ResourceImportFilter is the Schema for the ResourceImportFilters + API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -662,7 +1105,8 @@ spec: description: ResourceImportFilterSpec defines the desired state of ResourceImportFilter type: object status: - description: ResourceImportFilterStatus defines the observed state of ResourceImportFilter + description: ResourceImportFilterStatus defines the observed state of + ResourceImportFilter type: object type: object served: true @@ -708,10 +1152,14 @@ spec: description: ResourceImport is the Schema for the resourceimports API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -719,7 +1167,8 @@ spec: description: ResourceImportSpec defines the desired state of ResourceImport properties: clusterID: - description: ClusterIDs specifies the member clusters this resource to import to. When not specified, import to all member clusters. + description: ClusterIDs specifies the member clusters this resource + to import to. When not specified, import to all member clusters. items: type: string type: array @@ -728,21 +1177,38 @@ spec: properties: subsets: items: - description: 'EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given: { Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] } The resulting set of endpoints can be viewed as: a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], b: [ 10.10.1.1:309, 10.10.2.2:309 ]' + description: 'EndpointSubset is a group of addresses with a + common set of ports. The expanded set of endpoints is the + Cartesian product of Addresses x Ports. For example, given: { Addresses: + [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], Ports: [{"name": + "a", "port": 8675}, {"name": "b", "port": 309}] } The resulting + set of endpoints can be viewed as: a: [ 10.10.1.1:8675, + 10.10.2.2:8675 ], b: [ 10.10.1.1:309, 10.10.2.2:309 ]' properties: addresses: - description: IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize. + description: IP addresses which offer the related ports + that are marked as ready. These endpoints should be considered + safe for load balancers and clients to utilize. items: - description: EndpointAddress is a tuple that describes single IP address. + description: EndpointAddress is a tuple that describes + single IP address. properties: hostname: description: The Hostname of this endpoint type: string ip: - description: 'The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready. TODO: This should allow hostname or IP, See #4447.' + description: 'The IP of this endpoint. May not be + loopback (127.0.0.0/8), link-local (169.254.0.0/16), + or link-local multicast ((224.0.0.0/24). IPv6 is + also accepted but not fully supported on all platforms. + Also, certain kubernetes components, like kube-proxy, + are not IPv6 ready. TODO: This should allow hostname + or IP, See #4447.' type: string nodeName: - description: 'Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.' + description: 'Optional: Node hosting this endpoint. + This can be used to determine endpoints local to + a node.' type: string targetRef: description: Reference to object providing the endpoint. @@ -751,22 +1217,41 @@ spec: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + description: 'If referring to a piece of an object + instead of an entire object, this string should + contain a valid JSON/Go field access statement, + such as desiredState.manifest.containers[2]. + For example, if the object reference is to a + container within a pod, this would take on a + value like: "spec.containers{name}" (where "name" + refers to the name of the container that triggered + the event) or if no container name is specified + "spec.containers[2]" (container with index 2 + in this pod). This syntax is chosen only to + have some well-defined way of referencing a + part of an object. TODO: this design is not + final and this field is subject to change in + the future.' type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind of the referent. More info: + https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: 'Namespace of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' type: string resourceVersion: - description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: 'Specific resourceVersion to which + this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: 'UID of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' type: string type: object required: @@ -774,18 +1259,30 @@ spec: type: object type: array notReadyAddresses: - description: IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check. + description: IP addresses which offer the related ports + but are not currently marked as ready because they have + not yet finished starting, have recently failed a readiness + check, or have recently failed a liveness check. items: - description: EndpointAddress is a tuple that describes single IP address. + description: EndpointAddress is a tuple that describes + single IP address. properties: hostname: description: The Hostname of this endpoint type: string ip: - description: 'The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready. TODO: This should allow hostname or IP, See #4447.' + description: 'The IP of this endpoint. May not be + loopback (127.0.0.0/8), link-local (169.254.0.0/16), + or link-local multicast ((224.0.0.0/24). IPv6 is + also accepted but not fully supported on all platforms. + Also, certain kubernetes components, like kube-proxy, + are not IPv6 ready. TODO: This should allow hostname + or IP, See #4447.' type: string nodeName: - description: 'Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.' + description: 'Optional: Node hosting this endpoint. + This can be used to determine endpoints local to + a node.' type: string targetRef: description: Reference to object providing the endpoint. @@ -794,22 +1291,41 @@ spec: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + description: 'If referring to a piece of an object + instead of an entire object, this string should + contain a valid JSON/Go field access statement, + such as desiredState.manifest.containers[2]. + For example, if the object reference is to a + container within a pod, this would take on a + value like: "spec.containers{name}" (where "name" + refers to the name of the container that triggered + the event) or if no container name is specified + "spec.containers[2]" (container with index 2 + in this pod). This syntax is chosen only to + have some well-defined way of referencing a + part of an object. TODO: this design is not + final and this field is subject to change in + the future.' type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind of the referent. More info: + https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: 'Namespace of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' type: string resourceVersion: - description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: 'Specific resourceVersion to which + this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: 'UID of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' type: string type: object required: @@ -819,13 +1335,24 @@ spec: ports: description: Port numbers available on the related IP addresses. items: - description: EndpointPort is a tuple that describes a single port. + description: EndpointPort is a tuple that describes a + single port. properties: appProtocol: - description: The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default. + description: The application protocol for this port. + This field follows standard Kubernetes label syntax. + Un-prefixed names are reserved for IANA standard + service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). + Non-standard protocols should use prefixed names + such as mycompany.com/my-custom-protocol. This is + a beta field that is guarded by the ServiceAppProtocol + feature gate and enabled by default. type: string name: - description: The name of this port. This must match the 'name' field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined. + description: The name of this port. This must match + the 'name' field in the corresponding ServicePort. + Must be a DNS_LABEL. Optional only if one port is + defined. type: string port: description: The port number of the endpoint. @@ -833,7 +1360,8 @@ spec: type: integer protocol: default: TCP - description: The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP. + description: The IP protocol for this port. Must be + UDP, TCP, or SCTP. Default is TCP. type: string required: - port @@ -846,28 +1374,35 @@ spec: description: If imported resource is ExternalEntity. properties: externalentityspec: - description: ExternalEntitySpec defines the desired state for ExternalEntity. + description: ExternalEntitySpec defines the desired state for + ExternalEntity. properties: endpoints: - description: Endpoints is a list of external endpoints associated with this entity. + description: Endpoints is a list of external endpoints associated + with this entity. items: - description: Endpoint refers to an endpoint associated with the ExternalEntity. + description: Endpoint refers to an endpoint associated with + the ExternalEntity. properties: ip: description: IP associated with this endpoint. type: string name: - description: Name identifies this endpoint. Could be the network interface name in case of VMs. + description: Name identifies this endpoint. Could be + the network interface name in case of VMs. type: string type: object type: array externalNode: - description: ExternalNode is the opaque identifier of the agent/controller responsible for additional processing or handling of this external entity. + description: ExternalNode is the opaque identifier of the + agent/controller responsible for additional processing or + handling of this external entity. type: string ports: description: Ports maintain the list of named ports. items: - description: NamedPort describes the port and protocol to match in a rule. + description: NamedPort describes the port and protocol to + match in a rule. properties: name: description: Name associated with the Port. @@ -878,7 +1413,9 @@ spec: type: integer protocol: default: TCP - description: The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP. + description: The protocol (TCP, UDP, or SCTP) which + traffic must match. If not specified, this field defaults + to TCP. type: string type: object type: array @@ -894,7 +1431,10 @@ spec: description: Namespace of imported resource. type: string raw: - description: 'If imported resource is ANP. TODO: ANP uses float64 as priority. Type float64 is discouraged by k8s, and is not supported by controller-gen tools. NetworkPolicy *v1alpha1.NetworkPolicySpec `json:"networkpolicy,omitempty"` If imported resource Kind is unknown.' + description: 'If imported resource is ANP. TODO: ANP uses float64 + as priority. Type float64 is discouraged by k8s, and is not supported + by controller-gen tools. NetworkPolicy *v1alpha1.NetworkPolicySpec + `json:"networkpolicy,omitempty"` If imported resource Kind is unknown.' properties: data: format: byte @@ -904,10 +1444,16 @@ spec: description: If imported resource is ServiceImport. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this + representation of an object. Servers should convert recognized + schemas to the latest internal value, and may reject unrecognized + values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -915,20 +1461,33 @@ spec: description: spec defines the behavior of a ServiceImport. properties: ips: - description: ip will be used as the VIP for this service when type is ClusterSetIP. + description: ip will be used as the VIP for this service when + type is ClusterSetIP. items: type: string maxItems: 1 type: array ports: items: - description: ServicePort represents the port on which the service is exposed + description: ServicePort represents the port on which the + service is exposed properties: appProtocol: - description: The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. Field can be enabled with ServiceAppProtocol feature gate. + description: The application protocol for this port. + This field follows standard Kubernetes label syntax. + Un-prefixed names are reserved for IANA standard service + names (as per RFC-6335 and http://www.iana.org/assignments/service-names). + Non-standard protocols should use prefixed names such + as mycompany.com/my-custom-protocol. Field can be + enabled with ServiceAppProtocol feature gate. type: string name: - description: The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service. + description: The name of this port within the service. + This must be a DNS_LABEL. All ports within a ServiceSpec + must have unique names. When considering the endpoints + for a Service, this must match the 'name' field in + the EndpointPort. Optional if only one ServicePort + is defined on this service. type: string port: description: The port that will be exposed by this service. @@ -936,7 +1495,8 @@ spec: type: integer protocol: default: TCP - description: The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". Default is TCP. + description: The IP protocol for this port. Supports + "TCP", "UDP", and "SCTP". Default is TCP. type: string required: - port @@ -944,22 +1504,31 @@ spec: type: array x-kubernetes-list-type: atomic sessionAffinity: - description: 'Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. Ignored when type is Headless More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' + description: 'Supports "ClientIP" and "None". Used to maintain + session affinity. Enable client IP based session affinity. + Must be ClientIP or None. Defaults to None. Ignored when + type is Headless More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies' type: string sessionAffinityConfig: - description: sessionAffinityConfig contains session affinity configuration. + description: sessionAffinityConfig contains session affinity + configuration. properties: clientIP: - description: clientIP contains the configurations of Client IP based session affinity. + description: clientIP contains the configurations of Client + IP based session affinity. properties: timeoutSeconds: - description: timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours). + description: timeoutSeconds specifies the seconds + of ClientIP type session sticky time. The value + must be >0 && <=86400(for 1 day) if ServiceAffinity + == "ClientIP". Default value is 10800(for 3 hours). format: int32 type: integer type: object type: object type: - description: type defines the type of this service. Must be ClusterSetIP or Headless. + description: type defines the type of this service. Must be + ClusterSetIP or Headless. enum: - ClusterSetIP - Headless @@ -969,15 +1538,19 @@ spec: - type type: object status: - description: status contains information about the exported services that form the multi-cluster service referenced by this ServiceImport. + description: status contains information about the exported services + that form the multi-cluster service referenced by this ServiceImport. properties: clusters: - description: clusters is the list of exporting clusters from which this service was derived. + description: clusters is the list of exporting clusters from + which this service was derived. items: - description: ClusterStatus contains service configuration mapped to a specific source cluster + description: ClusterStatus contains service configuration + mapped to a specific source cluster properties: cluster: - description: cluster is the name of the exporting cluster. Must be a valid RFC-1123 DNS label. + description: cluster is the name of the exporting cluster. + Must be a valid RFC-1123 DNS label. type: string required: - cluster @@ -991,6 +1564,43 @@ spec: type: object status: description: ResourceImportStatus defines the observed state of ResourceImport + properties: + clusterStatuses: + items: + description: ResourceImportClusterStatus indicates the readiness + status of the ResourceImport in clusters + properties: + clusterID: + description: ClusterID is the unique identifier of this cluster. + type: string + conditions: + items: + description: ResourceImportCondition indicates the condition + of the ResourceImport in a cluster + properties: + lastTransitionTime: + description: Last time the condition transited from one + status to another + format: date-time + type: string + message: + description: A human readable message indicating details + about the transition + type: string + reason: + description: Unique, one-word, CamelCase reason for the + condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, + Unknown + type: string + type: + type: string + type: object + type: array + type: object + type: array type: object type: object served: true