diff --git a/artifacts/deploy/crd_binding.yaml b/artifacts/deploy/crd_binding.yaml deleted file mode 100644 index 0e0fdde11..000000000 --- a/artifacts/deploy/crd_binding.yaml +++ /dev/null @@ -1,28 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - annotations: - "helm.sh/hook": crd-install - creationTimestamp: null - name: propagationbindings.propagationstrategy.karmada.io -spec: - group: propagationstrategy.karmada.io - names: - kind: PropagationBinding - listKind: PropagationBindingList - plural: propagationbindings - singular: propagationbinding - scope: Namespaced - version: v1alpha1 - versions: - - name: v1alpha1 - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] ---- \ No newline at end of file diff --git a/artifacts/deploy/crd_membercluster.yaml b/artifacts/deploy/crd_membercluster.yaml deleted file mode 100644 index bea9a18a2..000000000 --- a/artifacts/deploy/crd_membercluster.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: memberclusters.membercluster.karmada.io -spec: - group: membercluster.karmada.io - version: v1alpha1 - names: - kind: MemberCluster - plural: memberclusters - scope: Namespaced diff --git a/artifacts/deploy/crd_work.yaml b/artifacts/deploy/crd_work.yaml deleted file mode 100644 index 5de259a4e..000000000 --- a/artifacts/deploy/crd_work.yaml +++ /dev/null @@ -1,28 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - annotations: - "helm.sh/hook": crd-install - creationTimestamp: null - name: propagationworks.propagationstrategy.karmada.io -spec: - group: propagationstrategy.karmada.io - names: - kind: PropagationWork - listKind: PropagationWorkList - plural: propagationworks - singular: propagationwork - scope: Namespaced - version: v1alpha1 - versions: - - name: v1alpha1 - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] ---- \ No newline at end of file diff --git a/artifacts/deploy/membercluster.karmada.io_memberclusters.yaml b/artifacts/deploy/membercluster.karmada.io_memberclusters.yaml new file mode 100644 index 000000000..2b75bafed --- /dev/null +++ b/artifacts/deploy/membercluster.karmada.io_memberclusters.yaml @@ -0,0 +1,239 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.3.0 + creationTimestamp: null + name: memberclusters.membercluster.karmada.io +spec: + group: membercluster.karmada.io + names: + kind: MemberCluster + listKind: MemberClusterList + plural: memberclusters + singular: membercluster + scope: Namespaced + validation: + openAPIV3Schema: + description: MemberCluster represents the desire state and status of a member + cluster. + 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' + 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' + type: string + metadata: + type: object + spec: + description: Spec represents the specification of the desired behavior of + member cluster. + properties: + accepted: + description: Accepted represents if the member cluster has been accepted + by control plane. Default value is false. If member cluster working + in 'Delegation' mode, this always be true. If member cluster working + in 'SelfManagement' mode, this will turn to true only after administrator + accepted the request from member cluster. + type: boolean + apiEndpoint: + description: The API endpoint of the member cluster. This can be a hostname, + hostname:port, IP or IP:port. + type: string + manageMode: + description: ManageMode specifies the relationship between control plane + and member cluster, the mode determines how to reach each other. + type: string + provider: + description: Provider represents the cloud provider name of the member + cluster. + type: string + region: + description: Region represents the region of the member cluster locate + in. + type: string + secretRef: + description: 'SecretRef represents the secret contains mandatory credentials + to access the member cluster. The secret should hold credentials as + follows: - secret.data.token - secret.data.caBundle' + properties: + name: + description: Name is the name of resource being referenced. + type: string + namespace: + description: Namespace is the namespace for the resource being referenced. + type: string + required: + - name + - namespace + type: object + taints: + description: Taints attached to the member cluster. Taints on the cluster + have the "effect" on any resource that does not tolerate the Taint. + items: + description: The node this Taint is attached to has the "effect" on + any pod that does not tolerate the Taint. + properties: + effect: + description: Required. The effect of the taint on pods that do + not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule + and NoExecute. + type: string + key: + description: Required. The taint key to be applied to a node. + type: string + timeAdded: + description: TimeAdded represents the time at which the taint + was added. It is only written for NoExecute taints. + format: date-time + type: string + value: + description: The taint value corresponding to the taint key. + type: string + required: + - effect + - key + type: object + type: array + zone: + description: Zone represents the zone of the member cluster locate in. + type: string + type: object + status: + description: Status represents the status of member cluster. + properties: + apiEnablement: + description: APIEnablement represents the list of APIs installed in + the member cluster. + items: + description: GroupVersionKind unambiguously identifies a kind. It + doesn't anonymously include GroupVersion to avoid automatic coercion. It + doesn't use a GroupVersion to avoid custom marshalling + type: object + type: array + conditions: + description: Conditions is an array of current cluster conditions. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a foo's + current state. // Known .status.conditions.type are: \"Available\", + \"Progressing\", and \"Degraded\" // +patchMergeKey=type // + +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating details + about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers of + specific condition types may define expected values and meanings + for this field, and whether the values are considered a guaranteed + API. The value should be a CamelCase string. This field may + not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + kubernetesVersion: + description: KubernetesVersion represents version of the member cluster. + type: string + nodeSummary: + description: NodeSummary represents the summary of nodes status in the + member cluster. + properties: + allocatable: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Allocatable represents the allocatable resources across + all nodes. + type: object + readyNum: + description: ReadyNum is the number of ready nodes in the cluster. + type: integer + totalNum: + description: TotalNum is the total number of nodes in the cluster. + type: integer + used: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Used represents the resources have been used across + all nodes. + type: object + type: object + type: object + required: + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/artifacts/deploy/propagationstrategy.karmada.io_propagationbindings.yaml b/artifacts/deploy/propagationstrategy.karmada.io_propagationbindings.yaml new file mode 100644 index 000000000..01c3e3899 --- /dev/null +++ b/artifacts/deploy/propagationstrategy.karmada.io_propagationbindings.yaml @@ -0,0 +1,225 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.3.0 + creationTimestamp: null + name: propagationbindings.propagationstrategy.karmada.io +spec: + group: propagationstrategy.karmada.io + names: + kind: PropagationBinding + listKind: PropagationBindingList + plural: propagationbindings + singular: propagationbinding + scope: Namespaced + validation: + openAPIV3Schema: + description: PropagationBinding represents a binding of a kubernetes resource + with a propagation policy. + 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' + 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' + type: string + metadata: + type: object + spec: + description: Spec represents the desired behavior. + properties: + clusters: + description: Clusters represents target member clusters where the resource + to be deployed. + items: + description: TargetCluster represents the identifier of a member cluster. + properties: + name: + description: Name of target cluster. + type: string + required: + - name + type: object + type: array + resource: + description: Resource represents the Kubernetes resource to be propagated. + properties: + apiVersion: + description: APIVersion represents the API version of the referent. + type: string + kind: + description: Kind represents the Kind of the referent. + type: string + name: + description: Name represents the name of the referent. + type: string + namespace: + description: Namespace represents the namespace for the referent. + For non-namespace scoped resources(e.g. 'ClusterRole'),do not + need specify Namespace, and for namespace scoped resources, Namespace + is required. If Namespace is not specified, means the resource + is non-namespace scoped. + type: string + resourceVersion: + description: ResourceVersion represents the internal version of + the referenced object, that can be used by clients to determine + when object has changed. + type: string + required: + - apiVersion + - kind + - name + type: object + required: + - resource + type: object + status: + description: Status represents the most recently observed status of the + PropagationBinding. + properties: + aggregatedStatus: + description: AggregatedStatus represents status list of the resource + running in each member cluster. + items: + description: AggregatedStatusItem represents status of the resource + running in a member cluster. + properties: + clusterName: + description: ClusterName represents the member cluster name which + the resource deployed on. + type: string + resourceStatus: + description: ResourceStatus represents the status of the resource. + properties: + deploymentStatus: + description: Deployment represents the deployment status in + the member cluster, only available when the resource kind + is Deployment. + properties: + availableReplicas: + description: Total number of available pods (ready for + at least minReadySeconds) targeted by this deployment. + format: int32 + type: integer + readyReplicas: + description: Total number of ready pods targeted by this + deployment. + format: int32 + type: integer + replicas: + description: Total number of non-terminated pods targeted + by this deployment (their labels match the selector). + format: int32 + type: integer + unavailableReplicas: + description: Total number of unavailable pods targeted + by this deployment. This is the total number of pods + that are still required for the deployment to have 100% + available capacity. They may either be pods that are + running but not yet available or pods that still have + not been created. + format: int32 + type: integer + updatedReplicas: + description: Total number of non-terminated pods targeted + by this deployment that have the desired template spec. + format: int32 + type: integer + type: object + type: object + required: + - clusterName + type: object + type: array + conditions: + description: Conditions contain the different condition statuses. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a foo's + current state. // Known .status.conditions.type are: \"Available\", + \"Progressing\", and \"Degraded\" // +patchMergeKey=type // + +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating details + about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers of + specific condition types may define expected values and meanings + for this field, and whether the values are considered a guaranteed + API. The value should be a CamelCase string. This field may + not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + type: object + required: + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/artifacts/deploy/propagationstrategy.karmada.io_propagationpolicies.yaml b/artifacts/deploy/propagationstrategy.karmada.io_propagationpolicies.yaml new file mode 100644 index 000000000..3d90fa0b2 --- /dev/null +++ b/artifacts/deploy/propagationstrategy.karmada.io_propagationpolicies.yaml @@ -0,0 +1,321 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.3.0 + creationTimestamp: null + name: propagationpolicies.propagationstrategy.karmada.io +spec: + group: propagationstrategy.karmada.io + names: + kind: PropagationPolicy + listKind: PropagationPolicyList + plural: propagationpolicies + singular: propagationpolicy + scope: Namespaced + validation: + openAPIV3Schema: + description: PropagationPolicy represents the policy that propagates a group + of resources to one or more clusters. + 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' + 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' + type: string + metadata: + type: object + spec: + description: Spec represents the desired behavior of PropagationPolicy. + properties: + association: + description: Association tells if relevant resources should be selected + automatically. e.g. a ConfigMap referred by a Deployment. default + false. + type: boolean + placement: + description: Placement represents the rule for select clusters to propagate + resources. + properties: + clusterAffinity: + description: ClusterAffinity represents scheduling restrictions + to a certain set of clusters. If not set, any cluster can be scheduling + candidate. + properties: + clusterNames: + description: ClusterNames is the list of clusters to be selected. + items: + type: string + type: array + exclude: + description: ExcludedClusters is the list of clusters to be + ignored. + items: + type: string + type: array + fieldSelector: + description: FieldSelector is a filter to select member clusters + by fields. If non-nil and non-empty, only the clusters match + this filter will be selected. + properties: + matchExpressions: + description: A list of field selector requirements. + items: + description: A node selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the selector applies + to. + type: string + operator: + description: Represents a key's relationship to a + set of values. Valid operators are In, NotIn, Exists, + DoesNotExist. Gt, and Lt. + type: string + values: + description: An array of string values. If the operator + is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. If the operator is Gt or Lt, + the values array must have a single element, which + will be interpreted as an integer. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + labelSelector: + description: LabelSelector is a filter to select member clusters + by labels. If non-nil and non-empty, only the clusters match + this filter will be selected. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + type: object + clusterTolerations: + description: ClusterTolerations represents the tolerations. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using the + matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. Empty + means match all taint effects. When specified, allowed values + are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match + all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to the + value. Valid operators are Exists and Equal. Defaults to + Equal. Exists is equivalent to wildcard for value, so that + a pod can tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of time + the toleration (which must be of effect NoExecute, otherwise + this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do + not evict). Zero and negative values will be treated as + 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + spreadConstraints: + description: SpreadConstraints represents a list of the scheduling + constraints. + items: + description: SpreadConstraint represents the spread constraints + on resources. + properties: + maximumClusters: + description: Maximum restricts the maximum number of cluster + units to be selected. + type: integer + minimumClusters: + description: Minimum restricts the minimum number of cluster + units to be selected. + type: integer + spreadByField: + description: 'SpreadByField represents the field used for + grouping member clusters into units. Resources will be spread + among different cluster units. Available field for spreading + are: region, zone, cluster and provider.' + type: string + spreadByLabel: + description: SpreadByLabel represents the label key used for + grouping member clusters into units. Resources will be spread + among different cluster units. + type: string + type: object + type: array + type: object + resourceSelector: + description: ResourceSelectors used to select resources. nil represents + all resources. + items: + description: ResourceSelector the resources will be selected. + properties: + apiVersion: + description: APIVersion represents the API version of the target + resources. + type: string + excludeNamespaces: + description: ExcludeNamespaces is a list of namespaces that the + ResourceSelector will ignore. Default is empty, which means + don't ignore any namespace. + items: + type: string + type: array + kind: + description: Kind represents the Kind of the target resources. + type: string + labelSelector: + description: A label query over a set of resources. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If + the operator is In or NotIn, the values array must + be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. A + single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is "key", + the operator is "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + names: + description: Names restricts a list of referent names that the + ResourceSelector will only select. Default is empty, which means + selecting all resources. + items: + type: string + type: array + namespaces: + description: Namespaces restricts a list of namespaces that the + ResourceSelector will only select. If set, only resources in + the listed namespaces will be selected. Default is empty, which + means selecting all namespaces. + items: + type: string + type: array + required: + - apiVersion + - kind + type: object + type: array + schedulerName: + description: SchedulerName represents which scheduler to proceed the + scheduling. If specified, the policy will be dispatched by specified + scheduler. If not specified, the policy will be dispatched by default + scheduler. + type: string + type: object + required: + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/artifacts/deploy/propagationstrategy.karmada.io_propagationworks.yaml b/artifacts/deploy/propagationstrategy.karmada.io_propagationworks.yaml new file mode 100644 index 000000000..c8a98db92 --- /dev/null +++ b/artifacts/deploy/propagationstrategy.karmada.io_propagationworks.yaml @@ -0,0 +1,268 @@ + +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.3.0 + creationTimestamp: null + name: propagationworks.propagationstrategy.karmada.io +spec: + group: propagationstrategy.karmada.io + names: + kind: PropagationWork + listKind: PropagationWorkList + plural: propagationworks + singular: propagationwork + scope: Namespaced + validation: + openAPIV3Schema: + description: PropagationWork defines a list of resources to be deployed on the + member cluster. + 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' + 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' + type: string + metadata: + type: object + spec: + description: Spec represents the desired behavior of PropagationWork. + properties: + workload: + description: Workload represents the manifest workload to be deployed + on managed cluster. + properties: + manifests: + description: Manifests represents a list of Kubernetes resources + to be deployed on the managed cluster. + items: + description: Manifest represents a resource to be deployed on + managed cluster. + type: object + type: array + type: object + type: object + status: + description: Status represents the status of PropagationStatus. + properties: + conditions: + description: 'Conditions contain the different condition statuses for + this work. Valid condition types are: 1. Applied represents workload + in PropagationWork is applied successfully on a managed cluster. 2. + Progressing represents workload in PropagationWork is being applied + on a managed cluster. 3. Available represents workload in PropagationWork + exists on the managed cluster. 4. Degraded represents the current + state of workload does not match the desired state for a certain period.' + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a foo's + current state. // Known .status.conditions.type are: \"Available\", + \"Progressing\", and \"Degraded\" // +patchMergeKey=type // + +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating details + about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers of + specific condition types may define expected values and meanings + for this field, and whether the values are considered a guaranteed + API. The value should be a CamelCase string. This field may + not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + manifestConditions: + description: ManifestConditions represents the conditions of each Kubernetes + resource in work deployed on managed cluster. + items: + description: ManifestCondition represents the conditions of the resources + deployed on managed cluster + properties: + conditions: + description: Conditions represents the conditions of this resource + on the managed cluster + items: + description: "Condition contains details for one aspect of the + current state of this API Resource. --- This struct is intended + for direct use as an array at the field path .status.conditions. + \ For example, type FooStatus struct{ // Represents the + observations of a foo's current state. // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\" // + +patchMergeKey=type // +patchStrategy=merge // +listType=map + \ // +listMapKey=type Conditions []metav1.Condition + `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" + protobuf:\"bytes,1,rep,name=conditions\"` \n // other + fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be + when the underlying condition changed. If that is not + known, then using the time when the API field changed + is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if + .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the + current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values + and meanings for this field, and whether the values are + considered a guaranteed API. The value should be a CamelCase + string. This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across + resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability + to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + identifier: + description: Identifier represents the identity of a resource + linking to manifests in spec. + properties: + group: + description: Group is the group of the resource. + type: string + kind: + description: Kind is the kind of the resource. + type: string + name: + description: Name is the name of the resource + type: string + namespace: + description: Namespace is the namespace of the resource, the + resource is cluster scoped if the value is empty + type: string + ordinal: + description: Ordinal represents an index in manifests list, + so the condition can still be linked to a manifest even + though manifest cannot be parsed successfully. + type: integer + resource: + description: Resource is the resource type of the resource + type: string + version: + description: Version is the version of the resource. + type: string + required: + - kind + - name + - ordinal + - resource + - version + type: object + required: + - conditions + - identifier + type: object + type: array + required: + - conditions + type: object + required: + - spec + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/hack/update-crdgen.sh b/hack/update-crdgen.sh new file mode 100755 index 000000000..7273704f8 --- /dev/null +++ b/hack/update-crdgen.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +controller-gen crd paths=./pkg/apis/... output:crd:dir=./artifacts/deploy \ No newline at end of file diff --git a/hack/verify-crdgen.sh b/hack/verify-crdgen.sh new file mode 100755 index 000000000..a23bf17c6 --- /dev/null +++ b/hack/verify-crdgen.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. + +DIFFROOT="${SCRIPT_ROOT}/artifacts/deploy" +TMP_DIFFROOT="${SCRIPT_ROOT}/_tmp/artifacts/deploy" +_tmp="${SCRIPT_ROOT}/_tmp" + +cleanup() { + rm -rf "${_tmp}" +} +trap "cleanup" EXIT SIGINT + +cleanup + +mkdir -p "${TMP_DIFFROOT}" +cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}" + +"${SCRIPT_ROOT}/hack/update-crdgen.sh" +echo "diffing ${DIFFROOT} against freshly generated files" +ret=0 +diff -Naupr "${DIFFROOT}" "${TMP_DIFFROOT}" || ret=$? +cp -a "${TMP_DIFFROOT}"/* "${DIFFROOT}" +if [[ $ret -eq 0 ]] +then + echo "${DIFFROOT} up to date." +else + echo "${DIFFROOT} is out of date. Please run hack/update-crdgen.sh" + exit 1 +fi