diff --git a/apis/standard.oam.dev/v1alpha1/rollouttrait_types.go b/apis/standard.oam.dev/v1alpha1/rollouttrait_types.go deleted file mode 100644 index 53309348b..000000000 --- a/apis/standard.oam.dev/v1alpha1/rollouttrait_types.go +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2021 The KubeVela Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/oam-dev/kubevela/apis/core.oam.dev/condition" - - "github.com/oam-dev/kubevela/pkg/oam" -) - -// RolloutTraitSpec defines the desired state of RolloutTrait -type RolloutTraitSpec struct { - // TargetRef references a target resource that contains the newer version - // of the software. We assumed that new resource already exists. - // This is the only resource we work on if the resource is a stateful resource (cloneset/statefulset) - TargetRef corev1.ObjectReference `json:"targetRef"` - - // SourceRef references the list of resources that contains the older version - // of the software. We assume that it's the first time to deploy when we cannot find any source. - // +optional - SourceRef []corev1.ObjectReference `json:"sourceRef,omitempty"` - - // RolloutPlan is the details on how to rollout the resources - RolloutPlan RolloutPlan `json:"rolloutPlan"` -} - -// RolloutTrait is the Schema for the RolloutTrait API -// +kubebuilder:object:root=true -// +genclient -// +kubebuilder:resource:categories={oam} -// +kubebuilder:subresource:status -type RolloutTrait struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec RolloutTraitSpec `json:"spec,omitempty"` - Status RolloutStatus `json:"status,omitempty"` -} - -// RolloutTraitList contains a list of RolloutTrait -// +kubebuilder:object:root=true -// +genclient -type RolloutTraitList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []RolloutTrait `json:"items"` -} - -func init() { - SchemeBuilder.Register(&RolloutTrait{}, &RolloutTraitList{}) -} - -var _ oam.Trait = &RolloutTrait{} - -// SetConditions for set CR condition -func (tr *RolloutTrait) SetConditions(c ...condition.Condition) { - tr.Status.SetConditions(c...) -} - -// GetCondition for get CR condition -func (tr *RolloutTrait) GetCondition(c condition.ConditionType) condition.Condition { - return tr.Status.GetCondition(c) -} - -// GetWorkloadReference of this MetricsTrait. -func (tr *RolloutTrait) GetWorkloadReference() corev1.ObjectReference { - return tr.Spec.TargetRef -} - -// SetWorkloadReference of this MetricsTrait. -func (tr *RolloutTrait) SetWorkloadReference(r corev1.ObjectReference) { - tr.Spec.TargetRef = r -} diff --git a/apis/standard.oam.dev/v1alpha1/zz_generated.deepcopy.go b/apis/standard.oam.dev/v1alpha1/zz_generated.deepcopy.go index 330bde953..0958a8521 100644 --- a/apis/standard.oam.dev/v1alpha1/zz_generated.deepcopy.go +++ b/apis/standard.oam.dev/v1alpha1/zz_generated.deepcopy.go @@ -380,87 +380,6 @@ func (in *RolloutStatus) DeepCopy() *RolloutStatus { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RolloutTrait) DeepCopyInto(out *RolloutTrait) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutTrait. -func (in *RolloutTrait) DeepCopy() *RolloutTrait { - if in == nil { - return nil - } - out := new(RolloutTrait) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RolloutTrait) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RolloutTraitList) DeepCopyInto(out *RolloutTraitList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]RolloutTrait, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutTraitList. -func (in *RolloutTraitList) DeepCopy() *RolloutTraitList { - if in == nil { - return nil - } - out := new(RolloutTraitList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RolloutTraitList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RolloutTraitSpec) DeepCopyInto(out *RolloutTraitSpec) { - *out = *in - out.TargetRef = in.TargetRef - if in.SourceRef != nil { - in, out := &in.SourceRef, &out.SourceRef - *out = make([]v1.ObjectReference, len(*in)) - copy(*out, *in) - } - in.RolloutPlan.DeepCopyInto(&out.RolloutPlan) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutTraitSpec. -func (in *RolloutTraitSpec) DeepCopy() *RolloutTraitSpec { - if in == nil { - return nil - } - out := new(RolloutTraitSpec) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RolloutWebhook) DeepCopyInto(out *RolloutWebhook) { *out = *in diff --git a/charts/vela-core/crds/standard.oam.dev_rollouttraits.yaml b/charts/vela-core/crds/standard.oam.dev_rollouttraits.yaml deleted file mode 100644 index 3881c5767..000000000 --- a/charts/vela-core/crds/standard.oam.dev_rollouttraits.yaml +++ /dev/null @@ -1,540 +0,0 @@ - ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.6.2 - name: rollouttraits.standard.oam.dev -spec: - group: standard.oam.dev - names: - categories: - - oam - kind: RolloutTrait - listKind: RolloutTraitList - plural: rollouttraits - singular: rollouttrait - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: RolloutTrait is the Schema for the RolloutTrait 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' - 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: RolloutTraitSpec defines the desired state of RolloutTrait - properties: - rolloutPlan: - description: RolloutPlan is the details on how to rollout the resources - properties: - batchPartition: - description: All pods in the batches up to the batchPartition - (included) will have the target resource specification while - the rest still have the source resource This is designed for - the operators to manually rollout Default is the the number - of batches which will rollout all the batches - format: int32 - type: integer - canaryMetric: - description: CanaryMetric provides a way for the rollout process - to automatically check certain metrics before complete the process - items: - description: CanaryMetric holds the reference to metrics used - for canary analysis - properties: - interval: - description: Interval represents the windows size - type: string - metricsRange: - description: Range value accepted for this metric - properties: - max: - anyOf: - - type: integer - - type: string - description: Maximum value - x-kubernetes-int-or-string: true - min: - anyOf: - - type: integer - - type: string - description: Minimum value - x-kubernetes-int-or-string: true - type: object - name: - description: Name of the metric - type: string - templateRef: - description: TemplateRef references a metric template object - properties: - apiVersion: - 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.' - type: string - kind: - 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' - type: string - namespace: - 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' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - type: object - required: - - name - type: object - type: array - numBatches: - description: The number of batches, default = 1 - format: int32 - type: integer - paused: - description: Paused the rollout, default is false - type: boolean - rolloutBatches: - description: The exact distribution among batches. its size has - to be exactly the same as the NumBatches (if set) The total - number cannot exceed the targetSize or the size of the source - resource We will IGNORE the last batch's replica field if it's - a percentage since round errors can lead to inaccurate sum We - highly recommend to leave the last batch's replica field empty - items: - description: RolloutBatch is used to describe how the each batch - rollout should be - properties: - batchRolloutWebhooks: - description: RolloutWebhooks provides a way for the batch - rollout to interact with an external process - items: - description: RolloutWebhook holds the reference to external - checks used for canary analysis - properties: - expectedStatus: - description: ExpectedStatus contains all the expected - http status code that we will accept as success - items: - type: integer - type: array - metadata: - additionalProperties: - type: string - description: Metadata (key-value pairs) for this webhook - type: object - method: - description: Method the HTTP call method, default - is POST - type: string - name: - description: Name of this webhook - type: string - type: - description: Type of this webhook - type: string - url: - description: URL address of this webhook - type: string - required: - - name - - type - - url - type: object - type: array - canaryMetric: - description: CanaryMetric provides a way for the batch rollout - process to automatically check certain metrics before - moving to the next batch - items: - description: CanaryMetric holds the reference to metrics - used for canary analysis - properties: - interval: - description: Interval represents the windows size - type: string - metricsRange: - description: Range value accepted for this metric - properties: - max: - anyOf: - - type: integer - - type: string - description: Maximum value - x-kubernetes-int-or-string: true - min: - anyOf: - - type: integer - - type: string - description: Minimum value - x-kubernetes-int-or-string: true - type: object - name: - description: Name of the metric - type: string - templateRef: - description: TemplateRef references a metric template - object - properties: - apiVersion: - 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.' - type: string - kind: - 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' - type: string - namespace: - 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' - type: string - uid: - description: 'UID of the referent. More info: - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - type: object - required: - - name - type: object - type: array - instanceInterval: - description: The wait time, in seconds, between instances - upgrades, default = 0 - format: int32 - type: integer - maxUnavailable: - anyOf: - - type: integer - - type: string - description: MaxUnavailable is the max allowed number of - pods that is unavailable during the upgrade. We will mark - the batch as ready as long as there are less or equal - number of pods unavailable than this number. default = - 0 - x-kubernetes-int-or-string: true - podList: - description: The list of Pods to get upgraded it is mutually - exclusive with the Replicas field - items: - type: string - type: array - replicas: - anyOf: - - type: integer - - type: string - description: 'Replicas is the number of pods to upgrade - in this batch it can be an absolute number (ex: 5) or - a percentage of total pods we will ignore the percentage - of the last batch to just fill the gap it is mutually - exclusive with the PodList field' - x-kubernetes-int-or-string: true - type: object - type: array - rolloutStrategy: - description: RolloutStrategy defines strategies for the rollout - plan The default is IncreaseFirstRolloutStrategyType - type: string - rolloutWebhooks: - description: RolloutWebhooks provide a way for the rollout to - interact with an external process - items: - description: RolloutWebhook holds the reference to external - checks used for canary analysis - properties: - expectedStatus: - description: ExpectedStatus contains all the expected http - status code that we will accept as success - items: - type: integer - type: array - metadata: - additionalProperties: - type: string - description: Metadata (key-value pairs) for this webhook - type: object - method: - description: Method the HTTP call method, default is POST - type: string - name: - description: Name of this webhook - type: string - type: - description: Type of this webhook - type: string - url: - description: URL address of this webhook - type: string - required: - - name - - type - - url - type: object - type: array - targetSize: - description: The size of the target resource. The default is the - same as the size of the source resource. - format: int32 - type: integer - type: object - sourceRef: - description: SourceRef references the list of resources that contains - the older version of the software. We assume that it's the first - time to deploy when we cannot find any source. - items: - description: 'ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. - Invalid usage help. It is impossible to add specific help for - individual usage. In most embedded usages, there are particular restrictions - like, "must refer only to types A and B" or "UID not honored" - or "name must be restricted". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual - struct is irrelevant. 5. We cannot easily change it. Because - this type is embedded in many locations, updates to this type will - affect numerous schemas. Don''t make new APIs embed an underspecified - API type they do not control. Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - .' - properties: - apiVersion: - 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.' - type: string - kind: - 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' - type: string - namespace: - 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' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - type: object - type: array - targetRef: - description: TargetRef references a target resource that contains - the newer version of the software. We assumed that new resource - already exists. This is the only resource we work on if the resource - is a stateful resource (cloneset/statefulset) - properties: - apiVersion: - 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.' - type: string - kind: - 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' - type: string - namespace: - 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' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - type: object - required: - - rolloutPlan - - targetRef - type: object - status: - description: RolloutStatus defines the observed state of a rollout plan - properties: - batchRollingState: - description: BatchRollingState only meaningful when the Status is - rolling - type: string - conditions: - description: Conditions of the resource. - items: - description: A Condition that may apply to a resource. - properties: - lastTransitionTime: - description: LastTransitionTime is the last time this condition - transitioned from one status to another. - format: date-time - type: string - message: - description: A Message containing details about this condition's - last transition from one status to another, if any. - type: string - reason: - description: A Reason for this condition's last transition from - one status to another. - type: string - status: - description: Status of this condition; is it currently True, - False, or Unknown? - type: string - type: - description: Type of this condition. At most one of each condition - type may apply to a resource at any point in time. - type: string - required: - - lastTransitionTime - - reason - - status - - type - type: object - type: array - currentBatch: - description: The current batch the rollout is working on/blocked it - starts from 0 - format: int32 - type: integer - lastAppliedPodTemplateIdentifier: - description: lastAppliedPodTemplateIdentifier is a string that uniquely - represent the last pod template each workload type could use different - ways to identify that so we cannot compare between resources We - update this field only after a successful rollout - type: string - rollingState: - description: RollingState is the Rollout State - type: string - rolloutOriginalSize: - description: RolloutTargetSize is the size of the target resources. - This is determined once the initial spec verification and does not - change until the rollout is restarted - format: int32 - type: integer - rolloutTargetSize: - description: RolloutTargetSize is the size of the target resources. - This is determined once the initial spec verification and does not - change until the rollout is restarted - format: int32 - type: integer - targetGeneration: - description: NewPodTemplateIdentifier is a string that uniquely represent - the new pod template each workload type could use different ways - to identify that so we cannot compare between resources - type: string - upgradedReadyReplicas: - description: UpgradedReadyReplicas is the number of Pods upgraded - by the rollout controller that have a Ready Condition. - format: int32 - type: integer - upgradedReplicas: - description: UpgradedReplicas is the number of Pods upgraded by the - rollout controller - format: int32 - type: integer - required: - - currentBatch - - rollingState - - upgradedReadyReplicas - - upgradedReplicas - type: object - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: []