add webhook convert. (#1282)

fix diff

update example and test data version

fix convert function

fix e2e for helm

clean up creationTimestamp in a hack way

fix ci

pending package suit test

fix group version

fix ci

fix ut

rename type to kind

fix example

fix conflicts

Co-authored-by: yangsoon <yangsoonlx@gmail.com>
This commit is contained in:
Jianbo Sun
2021-03-24 17:15:20 -07:00
committed by GitHub
co-authored by yangsoon
parent a4fda31829
commit 53ae9aaa40
146 changed files with 1168 additions and 830 deletions
+21 -1
View File
@@ -208,9 +208,13 @@ core-uninstall: manifests
kubectl delete -f charts/vela-core/crds/
# Generate manifests e.g. CRD, RBAC etc.
manifests:
manifests: kustomize
go generate $(foreach t,pkg apis,./$(t)/...)
# TODO(yangsoon): kustomize will merge all CRD into a whole file, it may not work if we want patch more than one CRD in this way
$(KUSTOMIZE) build config/crd -o config/crd/base/core.oam.dev_applications.yaml
mv config/crd/base/* charts/vela-core/crds
./hack/vela-templates/gen_definitions.sh
./hack/crd/cleanup.sh
GOLANGCILINT_VERSION ?= v1.31.0
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]')
@@ -269,6 +273,22 @@ else
CUE=$(shell which cue)
endif
KUSTOMIZE_VERSION ?= 3.8.2
.PHONY: kustomize
kustomize:
ifeq (, $(shell which kustomize))
@{ \
set -e ;\
echo 'installing kustomize-v$(KUSTOMIZE_VERSION)' ;\
curl -s https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh | bash -s $(KUSTOMIZE_VERSION) $(GOBIN);\
echo 'Install succeed' ;\
}
KUSTOMIZE=$(GOBIN)/kustomize
else
KUSTOMIZE=$(shell which kustomize)
endif
start-dashboard:
go run references/cmd/apiserver/main.go &
cd references/dashboard && npm install && npm start && cd ..
+25 -8
View File
@@ -16,7 +16,12 @@
package common
import "k8s.io/apimachinery/pkg/runtime"
import (
v1alpha12 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
"k8s.io/apimachinery/pkg/runtime"
"github.com/oam-dev/kubevela/apis/standard.oam.dev/v1alpha1"
)
// CUE defines the encapsulation in CUE format
type CUE struct {
@@ -114,13 +119,6 @@ type ApplicationComponentStatus struct {
Traits []ApplicationTraitStatus `json:"traits,omitempty"`
}
// ApplicationTrait defines the trait of application
type ApplicationTrait struct {
Name string `json:"name"`
// +kubebuilder:pruning:PreserveUnknownFields
Properties runtime.RawExtension `json:"properties"`
}
// ApplicationTraitStatus records the trait health status
type ApplicationTraitStatus struct {
Type string `json:"type"`
@@ -143,3 +141,22 @@ type RawComponent struct {
// +kubebuilder:pruning:PreserveUnknownFields
Raw runtime.RawExtension `json:"raw"`
}
// AppStatus defines the observed state of Application
type AppStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
v1alpha1.RolloutStatus `json:",inline"`
Phase ApplicationPhase `json:"status,omitempty"`
// Components record the related Components created by Application Controller
Components []v1alpha12.TypedReference `json:"components,omitempty"`
// Services record the status of the application services
Services []ApplicationComponentStatus `json:"services,omitempty"`
// LatestRevision of the application configuration it generates
// +optional
LatestRevision *Revision `json:"latestRevision,omitempty"`
}
@@ -20,7 +20,42 @@ limitations under the License.
package common
import ()
import (
"github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *AppStatus) DeepCopyInto(out *AppStatus) {
*out = *in
in.RolloutStatus.DeepCopyInto(&out.RolloutStatus)
if in.Components != nil {
in, out := &in.Components, &out.Components
*out = make([]v1alpha1.TypedReference, len(*in))
copy(*out, *in)
}
if in.Services != nil {
in, out := &in.Services, &out.Services
*out = make([]ApplicationComponentStatus, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.LatestRevision != nil {
in, out := &in.LatestRevision, &out.LatestRevision
*out = new(Revision)
**out = **in
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatus.
func (in *AppStatus) DeepCopy() *AppStatus {
if in == nil {
return nil
}
out := new(AppStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApplicationComponentStatus) DeepCopyInto(out *ApplicationComponentStatus) {
@@ -42,22 +77,6 @@ func (in *ApplicationComponentStatus) DeepCopy() *ApplicationComponentStatus {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApplicationTrait) DeepCopyInto(out *ApplicationTrait) {
*out = *in
in.Properties.DeepCopyInto(&out.Properties)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationTrait.
func (in *ApplicationTrait) DeepCopy() *ApplicationTrait {
if in == nil {
return nil
}
out := new(ApplicationTrait)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApplicationTraitStatus) DeepCopyInto(out *ApplicationTraitStatus) {
*out = *in
@@ -48,15 +48,22 @@ type AppStatus struct {
LatestRevision *common.Revision `json:"latestRevision,omitempty"`
}
// ApplicationTrait defines the trait of application
type ApplicationTrait struct {
Name string `json:"name"`
// +kubebuilder:pruning:PreserveUnknownFields
Properties runtime.RawExtension `json:"properties,omitempty"`
}
// ApplicationComponent describe the component of application
type ApplicationComponent struct {
Name string `json:"name"`
WorkloadType string `json:"type"`
// +kubebuilder:pruning:PreserveUnknownFields
Settings runtime.RawExtension `json:"settings"`
Settings runtime.RawExtension `json:"settings,omitempty"`
// Traits define the trait of one component, the type must be array to keep the order.
Traits []common.ApplicationTrait `json:"traits,omitempty"`
Traits []ApplicationTrait `json:"traits,omitempty"`
// +kubebuilder:pruning:PreserveUnknownFields
// scopes in ApplicationComponent defines the component-level scopes
@@ -84,8 +91,8 @@ type Application struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ApplicationSpec `json:"spec,omitempty"`
Status AppStatus `json:"status,omitempty"`
Spec ApplicationSpec `json:"spec,omitempty"`
Status common.AppStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
@@ -44,7 +44,7 @@ type ApplicationRevisionSpec struct {
// Components records the rendered components from Application, it will contains the whole K8s CR of workload in it.
Components map[string]common.RawComponent `json:"components,omitempty"`
Components []common.RawComponent `json:"components,omitempty"`
// ApplicationConfiguration records the rendered applicationConfiguration from Application,
// it will contains the whole K8s CR of trait and the reference component in it.
+85 -49
View File
@@ -18,6 +18,7 @@ package v1alpha2
import (
"fmt"
"reflect"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/conversion"
@@ -25,74 +26,109 @@ import (
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
)
// CovertTo converts this Application to the Hub version (v1beta1).
func (app *Application) CovertTo(dst conversion.Hub) error {
switch t := dst.(type) {
case *v1beta1.Application:
appv1beta1 := dst.(*v1beta1.Application)
klog.Infof("convert *v1alpha.Application [%s] to *v1beta1.Application", app.Name)
appv1beta1.ObjectMeta = app.ObjectMeta
// ApplicationV1alpha2ToV1beta1 will convert v1alpha2 to v1beta1
func ApplicationV1alpha2ToV1beta1(v1a2 *Application, v1b1 *v1beta1.Application) {
// 1) convert metav1.TypeMeta
// apiVersion and Kind automatically converted
if len(app.Spec.Components) > 0 {
componets := make([]v1beta1.ApplicationComponent, len(app.Spec.Components))
for i, component := range app.Spec.Components {
componets[i] = v1beta1.ApplicationComponent{
Name: component.Name,
WorkloadType: component.WorkloadType,
Settings: component.Settings,
Traits: component.Traits,
Scopes: component.Scopes,
}
// 2) convert metav1.ObjectMeta
v1b1.ObjectMeta = *v1a2.ObjectMeta.DeepCopy()
// 3) convert Spec ApplicationSpec
// 3.1) convert Spec.Components
for _, comp := range v1a2.Spec.Components {
// convert trait, especially for `.name` -> `.type`
var traits = make([]v1beta1.ApplicationTrait, len(comp.Traits))
for j, trait := range comp.Traits {
traits[j] = v1beta1.ApplicationTrait{
Type: trait.Name,
Properties: *trait.Properties.DeepCopy(),
}
appv1beta1.Spec.Components = componets
}
appv1beta1.Spec.RolloutPlan = app.Spec.RolloutPlan
// set AppStatus
appv1beta1.Status.RollingState = app.Status.RollingState
appv1beta1.Status.Phase = app.Status.Phase
appv1beta1.Status.Components = app.Status.Components
appv1beta1.Status.Services = app.Status.Services
appv1beta1.Status.LatestRevision = app.Status.LatestRevision
// deep copy scopes
scopes := make(map[string]string)
for k, v := range comp.Scopes {
scopes[k] = v
}
// convert component
// `.settings` -> `.properties`
v1b1.Spec.Components = append(v1b1.Spec.Components, v1beta1.ApplicationComponent{
Name: comp.Name,
Type: comp.WorkloadType,
Properties: *comp.Settings.DeepCopy(),
Traits: traits,
Scopes: scopes,
})
}
// 3.2) convert Spec.RolloutPlan
v1b1.Spec.RolloutPlan = v1a2.Spec.RolloutPlan.DeepCopy()
// 4) convert Status common.AppStatus
v1b1.Status = *v1a2.Status.DeepCopy()
}
// ConvertTo converts this Application to the Hub version (v1beta1 only for now).
func (app *Application) ConvertTo(dst conversion.Hub) error {
switch convertedApp := dst.(type) {
case *v1beta1.Application:
klog.Infof("convert *v1alpha2.Application [%s] to *v1beta1.Application", app.Name)
ApplicationV1alpha2ToV1beta1(app, convertedApp)
return nil
default:
return fmt.Errorf("unsupported type %v", t)
}
return fmt.Errorf("unsupported convertTo object %v", reflect.TypeOf(dst))
}
// ConvertFrom converts from the Hub version (v1beta1) to this version (v1alpha2).
func (app *Application) ConvertFrom(src conversion.Hub) error {
switch t := src.(type) {
switch sourceApp := src.(type) {
case *v1beta1.Application:
appv1beta1 := src.(*v1beta1.Application)
klog.Infof("convert *v1alpha.Application from *v1beta1.Application [%s]", appv1beta1.Name)
app.ObjectMeta = appv1beta1.ObjectMeta
if len(appv1beta1.Spec.Components) > 0 {
componets := make([]ApplicationComponent, len(appv1beta1.Spec.Components))
for i, component := range appv1beta1.Spec.Components {
componets[i] = ApplicationComponent{
Name: component.Name,
WorkloadType: component.WorkloadType,
Settings: component.Settings,
Traits: component.Traits,
Scopes: component.Scopes,
klog.Infof("convert *v1alpha2.Application from *v1beta1.Application [%s]", sourceApp.Name)
// 1) convert metav1.TypeMeta
// apiVersion and Kind automatically converted
// 2) convert metav1.ObjectMeta
app.ObjectMeta = *sourceApp.ObjectMeta.DeepCopy()
// 3) convert Spec ApplicationSpec
// 3.1) convert Spec.Components
for _, comp := range sourceApp.Spec.Components {
// convert trait, especially for `.type` -> `.name`
var traits = make([]ApplicationTrait, len(comp.Traits))
for j, trait := range comp.Traits {
traits[j] = ApplicationTrait{
Name: trait.Type,
Properties: *trait.Properties.DeepCopy(),
}
}
app.Spec.Components = componets
// deep copy scopes
scopes := make(map[string]string)
for k, v := range comp.Scopes {
scopes[k] = v
}
// convert component
// `.properties` -> `.settings`
app.Spec.Components = append(app.Spec.Components, ApplicationComponent{
Name: comp.Name,
WorkloadType: comp.Type,
Settings: *comp.Properties.DeepCopy(),
Traits: traits,
Scopes: scopes,
})
}
app.Spec.RolloutPlan = appv1beta1.Spec.RolloutPlan
// set AppStatus
app.Status.RollingState = appv1beta1.Status.RollingState
app.Status.Phase = appv1beta1.Status.Phase
app.Status.Components = appv1beta1.Status.Components
app.Status.Services = appv1beta1.Status.Services
app.Status.LatestRevision = appv1beta1.Status.LatestRevision
// 3.2) convert Spec.RolloutPlan
app.Spec.RolloutPlan = sourceApp.Spec.RolloutPlan.DeepCopy()
// 4) convert Status common.AppStatus
app.Status = *sourceApp.Status.DeepCopy()
return nil
default:
return fmt.Errorf("unsupported type %v", t)
}
return fmt.Errorf("unsupported ConvertFrom object %v", reflect.TypeOf(src))
}
@@ -83,7 +83,7 @@ type WorkloadHealthCondition struct {
// +kubebuilder:object:root=true
// A HealthScope determines an aggregate health status based of the health of components.
// +kubebuilder:resource:categories={crossplane,oam}
// +kubebuilder:resource:categories={oam}
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:JSONPath=".status.health",name=HEALTH,type=string
type HealthScope struct {
@@ -43,7 +43,7 @@ type ManualScalerTraitStatus struct {
// +kubebuilder:object:root=true
// A ManualScalerTrait determines how many replicas a workload should have.
// +kubebuilder:resource:categories={crossplane,oam}
// +kubebuilder:resource:categories={oam}
// +kubebuilder:subresource:status
type ManualScalerTrait struct {
metav1.TypeMeta `json:",inline"`
+7 -20
View File
@@ -23,6 +23,7 @@ import (
"k8s.io/apimachinery/pkg/util/intstr"
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
"github.com/oam-dev/kubevela/apis/types"
)
// A WorkloadDefinitionSpec defines the desired state of a WorkloadDefinition.
@@ -69,7 +70,7 @@ type WorkloadDefinitionStatus struct {
// is used to validate the schema of the workload when it is embedded in an OAM
// Component.
// +kubebuilder:printcolumn:JSONPath=".spec.definitionRef.name",name=DEFINITION-NAME,type=string
// +kubebuilder:resource:scope=Namespaced,categories={crossplane,oam}
// +kubebuilder:resource:scope=Namespaced,categories={oam}
type WorkloadDefinition struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -158,7 +159,7 @@ type TraitDefinitionStatus struct {
// to validate the schema of the trait when it is embedded in an OAM
// ApplicationConfiguration.
// +kubebuilder:printcolumn:JSONPath=".spec.definitionRef.name",name=DEFINITION-NAME,type=string
// +kubebuilder:resource:scope=Namespaced,categories={crossplane,oam}
// +kubebuilder:resource:scope=Namespaced,categories={oam}
// +kubebuilder:subresource:status
type TraitDefinition struct {
metav1.TypeMeta `json:",inline"`
@@ -212,7 +213,7 @@ type ScopeDefinitionSpec struct {
// to validate the schema of the scope when it is embedded in an OAM
// ApplicationConfiguration.
// +kubebuilder:printcolumn:JSONPath=".spec.definitionRef.name",name=DEFINITION-NAME,type=string
// +kubebuilder:resource:scope=Namespaced,categories={crossplane,oam}
// +kubebuilder:resource:scope=Namespaced,categories={oam}
type ScopeDefinition struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -292,7 +293,7 @@ type ComponentStatus struct {
// +kubebuilder:object:root=true
// A Component describes how an OAM workload kind may be instantiated.
// +kubebuilder:resource:categories={crossplane,oam}
// +kubebuilder:resource:categories={oam}
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:JSONPath=".spec.workload.kind",name=WORKLOAD-KIND,type=string
// +kubebuilder:printcolumn:name="age",type="date",JSONPath=".metadata.creationTimestamp"
@@ -468,20 +469,6 @@ type HistoryWorkload struct {
// A ApplicationStatus represents the state of the entire application.
type ApplicationStatus string
// RollingStatus represents the rollout phases
type RollingStatus string
const (
// RollingTemplating means that the AC is rolling and need template
RollingTemplating RollingStatus = "RollingTemplating"
// RollingTemplated means that the AC is rolling and it already templated
RollingTemplated RollingStatus = "RollingTemplated"
// RollingCompleted means that the AC is the new active revision of the application
RollingCompleted RollingStatus = "RollingCompleted"
// InactiveAfterRollingCompleted means that the AC is the inactive revision after the rolling is finished
InactiveAfterRollingCompleted RollingStatus = "InactiveAfterRollingCompleted"
)
// An ApplicationConfigurationStatus represents the observed state of a
// ApplicationConfiguration.
type ApplicationConfigurationStatus struct {
@@ -494,7 +481,7 @@ type ApplicationConfigurationStatus struct {
Dependency DependencyStatus `json:"dependency,omitempty"`
// RollingStatus indicates what phase are we in the rollout phase
RollingStatus RollingStatus `json:"rollingStatus,omitempty"`
RollingStatus types.RollingStatus `json:"rollingStatus,omitempty"`
// Workloads created by this ApplicationConfiguration.
Workloads []WorkloadStatus `json:"workloads,omitempty"`
@@ -536,7 +523,7 @@ type DependencyToObject struct {
// +kubebuilder:object:root=true
// An ApplicationConfiguration represents an OAM application.
// +kubebuilder:resource:shortName=appconfig,categories={crossplane,oam}
// +kubebuilder:resource:shortName=appconfig,categories={oam}
// +kubebuilder:subresource:status
type ApplicationConfiguration struct {
metav1.TypeMeta `json:",inline"`
@@ -389,7 +389,7 @@ var _ oam.Workload = &ContainerizedWorkload{}
// +kubebuilder:object:root=true
// A ContainerizedWorkload is a workload that runs OCI containers.
// +kubebuilder:resource:categories={crossplane,oam}
// +kubebuilder:resource:categories={oam}
// +kubebuilder:subresource:status
type ContainerizedWorkload struct {
metav1.TypeMeta `json:",inline"`
-11
View File
@@ -21,8 +21,6 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/controller-runtime/pkg/scheme"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
)
// Package type metadata.
@@ -143,14 +141,6 @@ var (
ApplicationRevisionGroupVersionKind = SchemeGroupVersion.WithKind(ApplicationRevisionKind)
)
// AppDeployment type metadata.
var (
AppDeploymentKind = reflect.TypeOf(v1beta1.AppDeployment{}).Name()
AppDeploymentGroupKind = schema.GroupKind{Group: Group, Kind: AppDeploymentKind}.String()
AppDeploymentKindAPIVersion = ApplicationKind + "." + SchemeGroupVersion.String()
AppDeploymentKindVersionKind = SchemeGroupVersion.WithKind(AppDeploymentKind)
)
func init() {
SchemeBuilder.Register(&ComponentDefinition{}, &ComponentDefinitionList{})
SchemeBuilder.Register(&WorkloadDefinition{}, &WorkloadDefinitionList{})
@@ -165,6 +155,5 @@ func init() {
SchemeBuilder.Register(&AppRollout{}, &AppRolloutList{})
SchemeBuilder.Register(&ApplicationRevision{}, &ApplicationRevisionList{})
SchemeBuilder.Register(&ApplicationContext{}, &ApplicationContextList{})
SchemeBuilder.Register(&v1beta1.AppDeployment{}, &v1beta1.AppDeploymentList{})
SchemeBuilder.Register(&Cluster{}, &ClusterList{})
}
@@ -194,7 +194,7 @@ func (in *ApplicationComponent) DeepCopyInto(out *ApplicationComponent) {
in.Settings.DeepCopyInto(&out.Settings)
if in.Traits != nil {
in, out := &in.Traits, &out.Traits
*out = make([]common.ApplicationTrait, len(*in))
*out = make([]ApplicationTrait, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
@@ -572,9 +572,9 @@ func (in *ApplicationRevisionSpec) DeepCopyInto(out *ApplicationRevisionSpec) {
}
if in.Components != nil {
in, out := &in.Components, &out.Components
*out = make(map[string]common.RawComponent, len(*in))
for key, val := range *in {
(*out)[key] = *val.DeepCopy()
*out = make([]common.RawComponent, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
in.ApplicationConfiguration.DeepCopyInto(&out.ApplicationConfiguration)
@@ -617,6 +617,22 @@ func (in *ApplicationSpec) DeepCopy() *ApplicationSpec {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApplicationTrait) DeepCopyInto(out *ApplicationTrait) {
*out = *in
in.Properties.DeepCopyInto(&out.Properties)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationTrait.
func (in *ApplicationTrait) DeepCopy() *ApplicationTrait {
if in == nil {
return nil
}
out := new(ApplicationTrait)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *CPUResources) DeepCopyInto(out *CPUResources) {
*out = *in
+12 -25
View File
@@ -17,7 +17,6 @@
package v1beta1
import (
runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
@@ -28,34 +27,22 @@ import (
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
// AppStatus defines the observed state of Application
type AppStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
v1alpha1.RolloutStatus `json:",inline"`
Phase common.ApplicationPhase `json:"status,omitempty"`
// Components record the related Components created by Application Controller
Components []runtimev1alpha1.TypedReference `json:"components,omitempty"`
// Services record the status of the application services
Services []common.ApplicationComponentStatus `json:"services,omitempty"`
// LatestRevision of the application configuration it generates
// +optional
LatestRevision *common.Revision `json:"latestRevision,omitempty"`
// ApplicationTrait defines the trait of application
type ApplicationTrait struct {
Type string `json:"type"`
// +kubebuilder:pruning:PreserveUnknownFields
Properties runtime.RawExtension `json:"properties,omitempty"`
}
// ApplicationComponent describe the component of application
type ApplicationComponent struct {
Name string `json:"name"`
WorkloadType string `json:"type"`
Name string `json:"name"`
Type string `json:"type"`
// +kubebuilder:pruning:PreserveUnknownFields
Settings runtime.RawExtension `json:"settings"`
Properties runtime.RawExtension `json:"properties,omitempty"`
// Traits define the trait of one component, the type must be array to keep the order.
Traits []common.ApplicationTrait `json:"traits,omitempty"`
Traits []ApplicationTrait `json:"traits,omitempty"`
// +kubebuilder:pruning:PreserveUnknownFields
// scopes in ApplicationComponent defines the component-level scopes
@@ -84,8 +71,8 @@ type Application struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ApplicationSpec `json:"spec,omitempty"`
Status AppStatus `json:"status,omitempty"`
Spec ApplicationSpec `json:"spec,omitempty"`
Status common.AppStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
@@ -100,7 +87,7 @@ type ApplicationList struct {
// GetComponent get the component from the application based on its workload type
func (app *Application) GetComponent(workloadType string) *ApplicationComponent {
for _, c := range app.Spec.Components {
if c.WorkloadType == workloadType {
if c.Type == workloadType {
return &c
}
}
@@ -43,7 +43,7 @@ type ApplicationRevisionSpec struct {
ScopeDefinitions map[string]ScopeDefinition `json:"scopeDefinitions,omitempty"`
// Components records the rendered components from Application, it will contains the whole K8s CR of workload in it.
Components map[string]common.RawComponent `json:"components,omitempty"`
Components []common.RawComponent `json:"components,omitempty"`
// ApplicationConfiguration records the rendered applicationConfiguration from Application,
// it will contains the whole K8s CR of trait and the reference component in it.
+3 -3
View File
@@ -68,7 +68,7 @@ type WorkloadDefinitionStatus struct {
// is used to validate the schema of the workload when it is embedded in an OAM
// Component.
// +kubebuilder:printcolumn:JSONPath=".spec.definitionRef.name",name=DEFINITION-NAME,type=string
// +kubebuilder:resource:scope=Namespaced,categories={crossplane,oam}
// +kubebuilder:resource:scope=Namespaced,categories={oam}
// +kubebuilder:storageversion
type WorkloadDefinition struct {
metav1.TypeMeta `json:",inline"`
@@ -158,7 +158,7 @@ type TraitDefinitionStatus struct {
// to validate the schema of the trait when it is embedded in an OAM
// ApplicationConfiguration.
// +kubebuilder:printcolumn:JSONPath=".spec.definitionRef.name",name=DEFINITION-NAME,type=string
// +kubebuilder:resource:scope=Namespaced,categories={crossplane,oam}
// +kubebuilder:resource:scope=Namespaced,categories={oam}
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
type TraitDefinition struct {
@@ -213,7 +213,7 @@ type ScopeDefinitionSpec struct {
// to validate the schema of the scope when it is embedded in an OAM
// ApplicationConfiguration.
// +kubebuilder:printcolumn:JSONPath=".spec.definitionRef.name",name=DEFINITION-NAME,type=string
// +kubebuilder:resource:scope=Namespaced,categories={crossplane,oam}
// +kubebuilder:resource:scope=Namespaced,categories={oam}
// +kubebuilder:storageversion
type ScopeDefinition struct {
metav1.TypeMeta `json:",inline"`
+10
View File
@@ -93,11 +93,21 @@ var (
ScopeDefinitionGroupVersionKind = SchemeGroupVersion.WithKind(ScopeDefinitionKind)
)
// AppDeployment type metadata.
var (
AppDeploymentKind = reflect.TypeOf(AppDeployment{}).Name()
AppDeploymentGroupKind = schema.GroupKind{Group: Group, Kind: AppDeploymentKind}.String()
AppDeploymentKindAPIVersion = ApplicationKind + "." + SchemeGroupVersion.String()
AppDeploymentKindVersionKind = SchemeGroupVersion.WithKind(AppDeploymentKind)
)
func init() {
SchemeBuilder.Register(&ComponentDefinition{}, &ComponentDefinitionList{})
SchemeBuilder.Register(&WorkloadDefinition{}, &WorkloadDefinitionList{})
SchemeBuilder.Register(&TraitDefinition{}, &TraitDefinitionList{})
SchemeBuilder.Register(&ScopeDefinition{}, &ScopeDefinitionList{})
SchemeBuilder.Register(&Application{}, &ApplicationList{})
SchemeBuilder.Register(&AppRollout{}, &AppRolloutList{})
SchemeBuilder.Register(&ApplicationRevision{}, &ApplicationRevisionList{})
SchemeBuilder.Register(&AppDeployment{}, &AppDeploymentList{})
}
@@ -21,9 +21,8 @@ limitations under the License.
package v1beta1
import (
"github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
standard_oam_devv1alpha1 "github.com/oam-dev/kubevela/apis/standard.oam.dev/v1alpha1"
"github.com/oam-dev/kubevela/apis/standard.oam.dev/v1alpha1"
"k8s.io/apimachinery/pkg/runtime"
)
@@ -255,39 +254,6 @@ func (in *AppRolloutStatus) DeepCopy() *AppRolloutStatus {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *AppStatus) DeepCopyInto(out *AppStatus) {
*out = *in
in.RolloutStatus.DeepCopyInto(&out.RolloutStatus)
if in.Components != nil {
in, out := &in.Components, &out.Components
*out = make([]v1alpha1.TypedReference, len(*in))
copy(*out, *in)
}
if in.Services != nil {
in, out := &in.Services, &out.Services
*out = make([]common.ApplicationComponentStatus, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.LatestRevision != nil {
in, out := &in.LatestRevision, &out.LatestRevision
*out = new(common.Revision)
**out = **in
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatus.
func (in *AppStatus) DeepCopy() *AppStatus {
if in == nil {
return nil
}
out := new(AppStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Application) DeepCopyInto(out *Application) {
*out = *in
@@ -318,10 +284,10 @@ func (in *Application) DeepCopyObject() runtime.Object {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApplicationComponent) DeepCopyInto(out *ApplicationComponent) {
*out = *in
in.Settings.DeepCopyInto(&out.Settings)
in.Properties.DeepCopyInto(&out.Properties)
if in.Traits != nil {
in, out := &in.Traits, &out.Traits
*out = make([]common.ApplicationTrait, len(*in))
*out = make([]ApplicationTrait, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
@@ -469,9 +435,9 @@ func (in *ApplicationRevisionSpec) DeepCopyInto(out *ApplicationRevisionSpec) {
}
if in.Components != nil {
in, out := &in.Components, &out.Components
*out = make(map[string]common.RawComponent, len(*in))
for key, val := range *in {
(*out)[key] = *val.DeepCopy()
*out = make([]common.RawComponent, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
in.ApplicationConfiguration.DeepCopyInto(&out.ApplicationConfiguration)
@@ -499,7 +465,7 @@ func (in *ApplicationSpec) DeepCopyInto(out *ApplicationSpec) {
}
if in.RolloutPlan != nil {
in, out := &in.RolloutPlan, &out.RolloutPlan
*out = new(standard_oam_devv1alpha1.RolloutPlan)
*out = new(v1alpha1.RolloutPlan)
(*in).DeepCopyInto(*out)
}
}
@@ -514,6 +480,22 @@ func (in *ApplicationSpec) DeepCopy() *ApplicationSpec {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApplicationTrait) DeepCopyInto(out *ApplicationTrait) {
*out = *in
in.Properties.DeepCopyInto(&out.Properties)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationTrait.
func (in *ApplicationTrait) DeepCopy() *ApplicationTrait {
if in == nil {
return nil
}
out := new(ApplicationTrait)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterPlacement) DeepCopyInto(out *ClusterPlacement) {
*out = *in
+1 -1
View File
@@ -6,7 +6,7 @@
// NOTE(@wonderflow) We don't remove existing CRDs here, because the crd folders contain not only auto generated.
// Generate deepcopy methodsets and CRD manifests
//go:generate go run -tags generate sigs.k8s.io/controller-tools/cmd/controller-gen object:headerFile=../hack/boilerplate.go.txt paths=./... crd:crdVersions=v1 output:artifacts:config=../charts/vela-core/crds
//go:generate go run -tags generate sigs.k8s.io/controller-tools/cmd/controller-gen object:headerFile=../hack/boilerplate.go.txt paths=./... crd:crdVersions=v1 output:artifacts:config=../config/crd/base
// Generate legacy_support for K8s 1.12~1.15 versions CRD manifests
//go:generate go run -tags generate sigs.k8s.io/controller-tools/cmd/controller-gen object:headerFile=../hack/boilerplate.go.txt paths=./... crd:trivialVersions=true output:artifacts:config=../legacy/charts/vela-core-legacy/crds
+31
View File
@@ -0,0 +1,31 @@
/*
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 types
// RollingStatus represents the rollout phases
type RollingStatus string
const (
// RollingTemplating means that the AC is rolling and need template
RollingTemplating RollingStatus = "RollingTemplating"
// RollingTemplated means that the AC is rolling and it already templated
RollingTemplated RollingStatus = "RollingTemplated"
// RollingCompleted means that the AC is the new active revision of the application
RollingCompleted RollingStatus = "RollingCompleted"
// InactiveAfterRollingCompleted means that the AC is the inactive revision after the rolling is finished
InactiveAfterRollingCompleted RollingStatus = "InactiveAfterRollingCompleted"
)
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: appdeployments.core.oam.dev
spec:
group: core.oam.dev
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applicationconfigurations.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ApplicationConfiguration
listKind: ApplicationConfigurationList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applicationcontexts.core.oam.dev
spec:
group: core.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applicationrevisions.core.oam.dev
spec:
group: core.oam.dev
@@ -73,14 +72,12 @@ spec:
x-kubernetes-preserve-unknown-fields: true
required:
- name
- properties
type: object
type: array
type:
type: string
required:
- name
- settings
- type
type: object
type: array
@@ -592,7 +589,7 @@ spec:
description: ComponentDefinitions records the snapshot of the componentDefinitions related with the created/modified Application
type: object
components:
additionalProperties:
items:
description: RawComponent record raw component
properties:
raw:
@@ -602,7 +599,7 @@ spec:
required:
- raw
type: object
type: object
type: array
scopeDefinitions:
additionalProperties:
description: A ScopeDefinition registers a kind of Kubernetes custom resource as a valid OAM scope kind by referencing its CustomResourceDefinition. The CRD is used to validate the schema of the scope when it is embedded in an OAM ApplicationConfiguration.
@@ -948,35 +945,33 @@ spec:
properties:
name:
type: string
properties:
type: object
x-kubernetes-preserve-unknown-fields: true
scopes:
additionalProperties:
type: string
description: scopes in ApplicationComponent defines the component-level scopes the format is <scope-type:scope-instance-name> pairs, the key represents type of `ScopeDefinition` while the value represent the name of scope instance.
type: object
x-kubernetes-preserve-unknown-fields: true
settings:
type: object
x-kubernetes-preserve-unknown-fields: true
traits:
description: Traits define the trait of one component, the type must be array to keep the order.
items:
description: ApplicationTrait defines the trait of application
properties:
name:
type: string
properties:
type: object
x-kubernetes-preserve-unknown-fields: true
type:
type: string
required:
- name
- properties
- type
type: object
type: array
type:
type: string
required:
- name
- settings
- type
type: object
type: array
@@ -1488,7 +1483,8 @@ spec:
description: ComponentDefinitions records the snapshot of the componentDefinitions related with the created/modified Application
type: object
components:
additionalProperties:
description: Components records the rendered components from Application, it will contains the whole K8s CR of workload in it.
items:
description: RawComponent record raw component
properties:
raw:
@@ -1498,8 +1494,7 @@ spec:
required:
- raw
type: object
description: Components records the rendered components from Application, it will contains the whole K8s CR of workload in it.
type: object
type: array
scopeDefinitions:
additionalProperties:
description: A ScopeDefinition registers a kind of Kubernetes custom resource as a valid OAM scope kind by referencing its CustomResourceDefinition. The CRD is used to validate the schema of the scope when it is embedded in an OAM ApplicationConfiguration.
@@ -1,13 +1,23 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
cert-manager.io/inject-ca-from: vela-system/kubevela-vela-core-root-cert
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applications.core.oam.dev
spec:
conversion:
strategy: Webhook
webhook:
clientConfig:
service:
name: vela-core-webhook
namespace: vela-system
path: /convert
port: 443
conversionReviewVersions:
- v1beta1
- v1alpha2
group: core.oam.dev
names:
categories:
@@ -24,10 +34,14 @@ spec:
description: Application is the Schema for the applications 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
@@ -43,14 +57,18 @@ spec:
scopes:
additionalProperties:
type: string
description: scopes in ApplicationComponent defines the component-level scopes the format is <scope-type:scope-instance-name> pairs, the key represents type of `ScopeDefinition` while the value represent the name of scope instance.
description: scopes in ApplicationComponent defines the component-level
scopes the format is <scope-type:scope-instance-name> pairs,
the key represents type of `ScopeDefinition` while the value
represent the name of scope instance.
type: object
x-kubernetes-preserve-unknown-fields: true
settings:
type: object
x-kubernetes-preserve-unknown-fields: true
traits:
description: Traits define the trait of one component, the type must be array to keep the order.
description: Traits define the trait of one component, the type
must be array to keep the order.
items:
description: ApplicationTrait defines the trait of application
properties:
@@ -61,28 +79,34 @@ spec:
x-kubernetes-preserve-unknown-fields: true
required:
- name
- properties
type: object
type: array
type:
type: string
required:
- name
- settings
- type
type: object
type: array
rolloutPlan:
description: RolloutPlan is the details on how to rollout the resources The controller simply replace the old resources with the new one if there is no rollout plan involved
description: RolloutPlan is the details on how to rollout the resources
The controller simply replace the old resources with the new one
if there is no rollout plan involved
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
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
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
description: CanaryMetric holds the reference to metrics used
for canary analysis
properties:
interval:
description: Interval represents the windows size
@@ -138,17 +162,26 @@ spec:
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
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
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
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
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
description: ExpectedStatus contains all the expected
http status code that we will accept as success
items:
type: integer
type: array
@@ -158,7 +191,8 @@ spec:
description: Metadata (key-value pairs) for this webhook
type: object
method:
description: Method the HTTP call method, default is POST
description: Method the HTTP call method, default
is POST
type: string
name:
description: Name of this webhook
@@ -176,9 +210,12 @@ spec:
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
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
description: CanaryMetric holds the reference to metrics
used for canary analysis
properties:
interval:
description: Interval represents the windows size
@@ -203,7 +240,8 @@ spec:
description: Name of the metric
type: string
templateRef:
description: TemplateRef references a metric template object
description: TemplateRef references a metric template
object
properties:
apiVersion:
description: APIVersion of the referenced object.
@@ -227,17 +265,23 @@ spec:
type: object
type: array
instanceInterval:
description: The wait time, in seconds, between instances upgrades, default = 0
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
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
description: The list of Pods to get upgraded it is mutually
exclusive with the Replicas field
items:
type: string
type: array
@@ -245,20 +289,28 @@ spec:
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'
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
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
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
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
description: ExpectedStatus contains all the expected http
status code that we will accept as success
items:
type: integer
type: array
@@ -286,7 +338,8 @@ spec:
type: object
type: array
targetSize:
description: The size of the target resource. The default is the same as the size of the source resource.
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
@@ -297,12 +350,16 @@ spec:
description: AppStatus defines the observed state of Application
properties:
batchRollingState:
description: BatchRollingState only meaningful when the Status is rolling
description: BatchRollingState only meaningful when the Status is
rolling
type: string
components:
description: Components record the related Components created by Application Controller
description: Components record the related Components created by Application
Controller
items:
description: A TypedReference refers to an object by Name, Kind, and APIVersion. It is commonly used to reference cluster-scoped objects or objects where the namespace is already known.
description: A TypedReference refers to an object by Name, Kind,
and APIVersion. It is commonly used to reference cluster-scoped
objects or objects where the namespace is already known.
properties:
apiVersion:
description: APIVersion of the referenced object.
@@ -328,20 +385,25 @@ spec:
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.
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.
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.
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?
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.
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
@@ -351,11 +413,15 @@ spec:
type: object
type: array
currentBatch:
description: The current batch the rollout is working on/blocked it starts from 0
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
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
latestRevision:
description: LatestRevision of the application configuration it generates
@@ -366,7 +432,8 @@ spec:
format: int64
type: integer
revisionHash:
description: RevisionHash record the hash value of the spec of ApplicationRevision object.
description: RevisionHash record the hash value of the spec of
ApplicationRevision object.
type: string
required:
- name
@@ -376,13 +443,16 @@ spec:
description: RollingState is the Rollout State
type: string
rolloutTargetSize:
description: RolloutTargetTotalSize is the size of the target resources. This is determined once the initial spec verification and does not change until the rollout is restarted
description: RolloutTargetTotalSize 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
services:
description: Services record the status of the application services
items:
description: ApplicationComponentStatus record the health status of App component
description: ApplicationComponentStatus record the health status
of App component
properties:
healthy:
type: boolean
@@ -392,7 +462,8 @@ spec:
type: string
traits:
items:
description: ApplicationTraitStatus records the trait health status
description: ApplicationTraitStatus records the trait health
status
properties:
healthy:
type: boolean
@@ -411,17 +482,22 @@ spec:
type: object
type: array
status:
description: ApplicationPhase is a label for the condition of a application at the current time
description: ApplicationPhase is a label for the condition of a application
at the current time
type: string
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
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.
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
description: UpgradedReplicas is the number of Pods upgraded by the
rollout controller
format: int32
type: integer
required:
@@ -441,10 +517,14 @@ spec:
description: Application is the Schema for the applications 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
@@ -457,49 +537,59 @@ spec:
properties:
name:
type: string
properties:
type: object
x-kubernetes-preserve-unknown-fields: true
scopes:
additionalProperties:
type: string
description: scopes in ApplicationComponent defines the component-level scopes the format is <scope-type:scope-instance-name> pairs, the key represents type of `ScopeDefinition` while the value represent the name of scope instance.
type: object
x-kubernetes-preserve-unknown-fields: true
settings:
description: scopes in ApplicationComponent defines the component-level
scopes the format is <scope-type:scope-instance-name> pairs,
the key represents type of `ScopeDefinition` while the value
represent the name of scope instance.
type: object
x-kubernetes-preserve-unknown-fields: true
traits:
description: Traits define the trait of one component, the type must be array to keep the order.
description: Traits define the trait of one component, the type
must be array to keep the order.
items:
description: ApplicationTrait defines the trait of application
properties:
name:
type: string
properties:
type: object
x-kubernetes-preserve-unknown-fields: true
type:
type: string
required:
- name
- properties
- type
type: object
type: array
type:
type: string
required:
- name
- settings
- type
type: object
type: array
rolloutPlan:
description: RolloutPlan is the details on how to rollout the resources The controller simply replace the old resources with the new one if there is no rollout plan involved
description: RolloutPlan is the details on how to rollout the resources
The controller simply replace the old resources with the new one
if there is no rollout plan involved
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
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
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
description: CanaryMetric holds the reference to metrics used
for canary analysis
properties:
interval:
description: Interval represents the windows size
@@ -555,17 +645,26 @@ spec:
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
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
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
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
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
description: ExpectedStatus contains all the expected
http status code that we will accept as success
items:
type: integer
type: array
@@ -575,7 +674,8 @@ spec:
description: Metadata (key-value pairs) for this webhook
type: object
method:
description: Method the HTTP call method, default is POST
description: Method the HTTP call method, default
is POST
type: string
name:
description: Name of this webhook
@@ -593,9 +693,12 @@ spec:
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
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
description: CanaryMetric holds the reference to metrics
used for canary analysis
properties:
interval:
description: Interval represents the windows size
@@ -620,7 +723,8 @@ spec:
description: Name of the metric
type: string
templateRef:
description: TemplateRef references a metric template object
description: TemplateRef references a metric template
object
properties:
apiVersion:
description: APIVersion of the referenced object.
@@ -644,17 +748,23 @@ spec:
type: object
type: array
instanceInterval:
description: The wait time, in seconds, between instances upgrades, default = 0
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
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
description: The list of Pods to get upgraded it is mutually
exclusive with the Replicas field
items:
type: string
type: array
@@ -662,20 +772,28 @@ spec:
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'
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
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
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
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
description: ExpectedStatus contains all the expected http
status code that we will accept as success
items:
type: integer
type: array
@@ -703,7 +821,8 @@ spec:
type: object
type: array
targetSize:
description: The size of the target resource. The default is the same as the size of the source resource.
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
@@ -714,12 +833,16 @@ spec:
description: AppStatus defines the observed state of Application
properties:
batchRollingState:
description: BatchRollingState only meaningful when the Status is rolling
description: BatchRollingState only meaningful when the Status is
rolling
type: string
components:
description: Components record the related Components created by Application Controller
description: Components record the related Components created by Application
Controller
items:
description: A TypedReference refers to an object by Name, Kind, and APIVersion. It is commonly used to reference cluster-scoped objects or objects where the namespace is already known.
description: A TypedReference refers to an object by Name, Kind,
and APIVersion. It is commonly used to reference cluster-scoped
objects or objects where the namespace is already known.
properties:
apiVersion:
description: APIVersion of the referenced object.
@@ -745,20 +868,25 @@ spec:
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.
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.
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.
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?
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.
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
@@ -768,11 +896,15 @@ spec:
type: object
type: array
currentBatch:
description: The current batch the rollout is working on/blocked it starts from 0
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
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
latestRevision:
description: LatestRevision of the application configuration it generates
@@ -783,7 +915,8 @@ spec:
format: int64
type: integer
revisionHash:
description: RevisionHash record the hash value of the spec of ApplicationRevision object.
description: RevisionHash record the hash value of the spec of
ApplicationRevision object.
type: string
required:
- name
@@ -793,13 +926,16 @@ spec:
description: RollingState is the Rollout State
type: string
rolloutTargetSize:
description: RolloutTargetTotalSize is the size of the target resources. This is determined once the initial spec verification and does not change until the rollout is restarted
description: RolloutTargetTotalSize 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
services:
description: Services record the status of the application services
items:
description: ApplicationComponentStatus record the health status of App component
description: ApplicationComponentStatus record the health status
of App component
properties:
healthy:
type: boolean
@@ -809,7 +945,8 @@ spec:
type: string
traits:
items:
description: ApplicationTraitStatus records the trait health status
description: ApplicationTraitStatus records the trait health
status
properties:
healthy:
type: boolean
@@ -828,17 +965,22 @@ spec:
type: object
type: array
status:
description: ApplicationPhase is a label for the condition of a application at the current time
description: ApplicationPhase is a label for the condition of a application
at the current time
type: string
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
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.
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
description: UpgradedReplicas is the number of Pods upgraded by the
rollout controller
format: int32
type: integer
required:
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: approllouts.core.oam.dev
spec:
group: core.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: clusters.core.oam.dev
spec:
group: core.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: componentdefinitions.core.oam.dev
spec:
group: core.oam.dev
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: components.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: Component
listKind: ComponentList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: containerizedworkloads.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ContainerizedWorkload
listKind: ContainerizedWorkloadList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: healthscopes.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: HealthScope
listKind: HealthScopeList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: manualscalertraits.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ManualScalerTrait
listKind: ManualScalerTraitList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: scopedefinitions.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ScopeDefinition
listKind: ScopeDefinitionList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: traitdefinitions.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: TraitDefinition
listKind: TraitDefinitionList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: workloaddefinitions.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: WorkloadDefinition
listKind: WorkloadDefinitionList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: podspecworkloads.standard.oam.dev
spec:
group: standard.oam.dev
@@ -754,7 +753,6 @@ spec:
description: If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.
type: string
protocol:
default: TCP
description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".
type: string
required:
@@ -1484,7 +1482,6 @@ spec:
description: If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.
type: string
protocol:
default: TCP
description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".
type: string
required:
@@ -2222,7 +2219,6 @@ spec:
description: If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.
type: string
protocol:
default: TCP
description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".
type: string
required:
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: rollouttraits.standard.oam.dev
spec:
group: standard.oam.dev
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: WorkloadDefinition
metadata:
name: containerizedworkloads.core.oam.dev
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ScopeDefinition
metadata:
name: healthscopes.core.oam.dev
@@ -1,5 +1,5 @@
# Code generated by KubeVela templates. DO NOT EDIT.
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
@@ -1,5 +1,5 @@
# Code generated by KubeVela templates. DO NOT EDIT.
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
@@ -1,5 +1,5 @@
# Code generated by KubeVela templates. DO NOT EDIT.
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: task
@@ -1,5 +1,5 @@
# Code generated by KubeVela templates. DO NOT EDIT.
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: webservice
@@ -1,5 +1,5 @@
# Code generated by KubeVela templates. DO NOT EDIT.
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: worker
+20
View File
@@ -0,0 +1,20 @@
# This kustomization.yaml is not intended to be run by itself,
# since it depends on service name and namespace that are out of this kustomize package.
# It should be run by config/default
resources:
- base/core.oam.dev_applications.yaml
# +kubebuilder:scaffold:crdkustomizeresource
patchesStrategicMerge:
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
- patches/webhook_in_applications.yaml
# +kubebuilder:scaffold:crdkustomizewebhookpatch
# [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix.
# patches here are for enabling the CA injection for each CRD
- patches/cainjection_in_applications.yaml
# +kubebuilder:scaffold:crdkustomizecainjectionpatch
# the following config is for teaching kustomize how to do kustomization for CRDs.
#configurations:
# - kustomizeconfig.yaml
@@ -0,0 +1,7 @@
# The following patch adds a directive for certmanager to inject CA into the CRD
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
cert-manager.io/inject-ca-from: vela-system/kubevela-vela-core-root-cert
name: applications.core.oam.dev
@@ -0,0 +1,16 @@
# The following patch enables a conversion webhook for the CRD
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: applications.core.oam.dev
spec:
conversion:
strategy: Webhook
webhook:
clientConfig:
service:
namespace: vela-system
name: vela-core-webhook
path: /convert
port: 443
conversionReviewVersions: ["v1beta1","v1alpha2"]
+3 -3
View File
@@ -1,18 +1,18 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: testapp
spec:
components:
- name: express-server
settings:
properties:
cmd:
- node
- server.js
image: oamdev/testapp:v1
port: 8080
traits:
- name: ingress
- type: ingress
properties:
domain: test.my.domain
http:
+3 -3
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: testapp
@@ -6,14 +6,14 @@ spec:
components:
- name: express-server
type: webservice
settings:
properties:
cmd:
- node
- server.js
image: oamdev/testapp:v1
port: 8080
traits:
- name: expose
- type: expose
properties:
http:
myservice1: 8080
+3 -3
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: testapp
@@ -6,14 +6,14 @@ spec:
components:
- name: express-server
type: webservice
settings:
properties:
cmd:
- node
- server.js
image: oamdev/testapp:v1
port: 8080
traits:
- name: "init-container"
- type: "init-container"
properties:
name: "install-container"
image: "busybox"
+2 -2
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: testapp4
@@ -6,7 +6,7 @@ spec:
components:
- name: express-server4
type: webservice
settings:
properties:
cmd:
- node
- server.js
+3 -3
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: application-sample
@@ -6,7 +6,7 @@ spec:
components:
- name: myweb
type: worker
settings:
properties:
image: "busybox"
cmd:
- sleep
@@ -14,7 +14,7 @@ spec:
lives: "3"
enemies: "alien"
traits:
- name: ingress
- type: ingress
properties:
domain: "www.example.com"
http:
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: application-sample
@@ -6,20 +6,20 @@ spec:
components:
- name: myweb
type: worker
settings:
properties:
image: "busybox"
cmd:
- sleep
- "1000"
traits:
- name: scaler
- type: scaler
properties:
replicas: 10
- name: sidecar
- kind: sidecar
properties:
name: "sidecar-test"
image: "nginx"
- name: kservice
- kind: kservice
properties:
http:
server: 80
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: AppRollout
metadata:
name: rolling-test
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: AppRollout
metadata:
name: rolling-test
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: AppRollout
metadata:
name: rolling-test
@@ -0,0 +1,18 @@
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
annotations:
"app.oam.dev/rolling-components": "metrics-provider"
"app.oam.dev/rollout-template": "true"
spec:
components:
- name: metrics-provider
type: clonesetservice
properties:
cmd:
- ./podinfo
- stress-cpu=1
image: stefanprodan/podinfo:4.0.6
port: 8080
updateStrategyType: InPlaceIfPossible
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
@@ -9,7 +9,7 @@ spec:
components:
- name: metrics-provider
type: clonesetservice
settings:
properties:
cmd:
- ./podinfo
- stress-cpu=1
@@ -0,0 +1,15 @@
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
spec:
components:
- name: metrics-provider
type: clonesetservice
properties:
cmd:
- ./podinfo
- stress-cpu=1
image: stefanprodan/podinfo:5.0.2
port: 8080
updateStrategyType: InPlaceIfPossible
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
@@ -9,7 +9,7 @@ spec:
components:
- name: metrics-provider
type: clonesetservice
settings:
properties:
cmd:
- ./podinfo
- stress-cpu=1
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: AppRollout
metadata:
name: rolling-test
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: AppRollout
metadata:
name: rolling-test
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
@@ -9,7 +9,7 @@ spec:
components:
- name: metrics-provider
type: webservice
settings:
properties:
cmd:
- ./podinfo
- stress-cpu=1
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
@@ -6,7 +6,7 @@ spec:
components:
- name: metrics-provider
type: webservice
settings:
properties:
cmd:
- ./podinfo
- stress-cpu=1
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
@@ -6,7 +6,7 @@ spec:
components:
- name: metrics-provider
type: webservice
settings:
properties:
cmd:
- ./podinfo
- stress-cpu=1
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: test-rolling
@@ -9,7 +9,7 @@ spec:
components:
- name: metrics-provider
type: webservice
settings:
properties:
cmd:
- ./podinfo
- stress-cpu=1
+3 -3
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: application-sample
@@ -6,7 +6,7 @@ spec:
components:
- name: myweb
type: myworker
settings:
properties:
image: "busybox"
cmd:
- sleep
@@ -14,7 +14,7 @@ spec:
lives: "3"
enemies: "alien"
traits:
- name: myingress
- type: myingress
properties:
domain: "www.example.com"
http:
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: myapp
@@ -6,15 +6,15 @@ metadata:
spec:
components:
- name: demo-podinfo
type: webapp-chart
settings:
type: webapp-chart
properties:
image:
tag: "5.1.2"
traits:
- name: scaler
- type: patch-scaler
properties:
replicas: 2
- name: virtualgroup
- type: virtualgroup
properties:
group: "my-group1"
type: "cluster"
+17
View File
@@ -0,0 +1,17 @@
apiVersion: core.oam.dev/v1alpha2
kind: TraitDefinition
metadata:
annotations:
definition.oam.dev/description: "Manually scale the app"
name: patch-scaler
spec:
appliesToWorkloads:
- deployments.apps
extension:
template: |-
patch: {
spec: replicas: parameter.replicas
}
parameter: {
replicas: *1 | int
}
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: webapp-chart
+1 -10
View File
@@ -7,13 +7,4 @@ metadata:
spec:
definitionRef:
name: deployments.apps
version: v1
schematic:
helm:
release:
chart:
spec:
chart: "podinfo"
version: "5.1.4"
repository:
url: "http://oam.dev/catalog/"
version: v1
+2 -2
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: first-vela-app
@@ -6,7 +6,7 @@ spec:
components:
- name: express-server
type: webservice
settings:
properties:
image: crccheck/hello-world
port: 8000
traits:
+31
View File
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
set -e
SCRIPT_DIR=$(dirname "$0")
pushd $SCRIPT_DIR
TEMPLATE_DIR="../../charts/vela-core/crds"
echo "clean up unused fields of CRDs"
for filename in `ls $TEMPLATE_DIR`; do
sed -i.bak '/creationTimestamp: null/d' ${TEMPLATE_DIR}/$filename
done
rm ${TEMPLATE_DIR}/*.bak
TEMPLATE_DIR="../../legacy/charts/vela-core-legacy/crds"
for filename in `ls $TEMPLATE_DIR`; do
sed -i.bak '/creationTimestamp: null/d' ${TEMPLATE_DIR}/$filename
done
rm ${TEMPLATE_DIR}/*.bak
popd
+1 -1
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
+1 -1
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: task
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: webservice
+1 -1
View File
@@ -1,4 +1,4 @@
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: worker
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: appdeployments.core.oam.dev
spec:
group: core.oam.dev
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applicationconfigurations.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ApplicationConfiguration
listKind: ApplicationConfigurationList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applicationcontexts.core.oam.dev
spec:
group: core.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applicationrevisions.core.oam.dev
spec:
group: core.oam.dev
@@ -50,35 +49,33 @@ spec:
properties:
name:
type: string
properties:
type: object
scopes:
additionalProperties:
type: string
description: scopes in ApplicationComponent defines the component-level scopes the format is <scope-type:scope-instance-name> pairs, the key represents type of `ScopeDefinition` while the value represent the name of scope instance.
type: object
settings:
type: object
traits:
description: Traits define the trait of one component, the type must be array to keep the order.
items:
description: ApplicationTrait defines the trait of application
properties:
name:
type: string
properties:
type: object
type:
type: string
required:
- name
- properties
- type
type: object
type: array
type:
type: string
required:
- name
- settings
- type
type: object
type: array
@@ -590,7 +587,8 @@ spec:
description: ComponentDefinitions records the snapshot of the componentDefinitions related with the created/modified Application
type: object
components:
additionalProperties:
description: Components records the rendered components from Application, it will contains the whole K8s CR of workload in it.
items:
description: RawComponent record raw component
properties:
raw:
@@ -600,8 +598,7 @@ spec:
required:
- raw
type: object
description: Components records the rendered components from Application, it will contains the whole K8s CR of workload in it.
type: object
type: array
scopeDefinitions:
additionalProperties:
description: A ScopeDefinition registers a kind of Kubernetes custom resource as a valid OAM scope kind by referencing its CustomResourceDefinition. The CRD is used to validate the schema of the scope when it is embedded in an OAM ApplicationConfiguration.
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: applications.core.oam.dev
spec:
group: core.oam.dev
@@ -17,8 +16,6 @@ spec:
plural: applications
singular: application
scope: Namespaced
subresources:
status: {}
validation:
openAPIV3Schema:
description: Application is the Schema for the applications API
@@ -40,35 +37,33 @@ spec:
properties:
name:
type: string
properties:
type: object
scopes:
additionalProperties:
type: string
description: scopes in ApplicationComponent defines the component-level scopes the format is <scope-type:scope-instance-name> pairs, the key represents type of `ScopeDefinition` while the value represent the name of scope instance.
type: object
settings:
type: object
traits:
description: Traits define the trait of one component, the type must be array to keep the order.
items:
description: ApplicationTrait defines the trait of application
properties:
name:
type: string
properties:
type: object
type:
type: string
required:
- name
- properties
- type
type: object
type: array
type:
type: string
required:
- name
- settings
- type
type: object
type: array
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: approllouts.core.oam.dev
spec:
group: core.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: clusters.core.oam.dev
spec:
group: core.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: componentdefinitions.core.oam.dev
spec:
group: core.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: components.core.oam.dev
spec:
additionalPrinterColumns:
@@ -18,7 +17,6 @@ spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: Component
listKind: ComponentList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: containerizedworkloads.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ContainerizedWorkload
listKind: ContainerizedWorkloadList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: healthscopes.core.oam.dev
spec:
additionalPrinterColumns:
@@ -15,7 +14,6 @@ spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: HealthScope
listKind: HealthScopeList
@@ -5,13 +5,11 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: manualscalertraits.core.oam.dev
spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ManualScalerTrait
listKind: ManualScalerTraitList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: scopedefinitions.core.oam.dev
spec:
additionalPrinterColumns:
@@ -15,7 +14,6 @@ spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: ScopeDefinition
listKind: ScopeDefinitionList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: traitdefinitions.core.oam.dev
spec:
additionalPrinterColumns:
@@ -15,7 +14,6 @@ spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: TraitDefinition
listKind: TraitDefinitionList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: workloaddefinitions.core.oam.dev
spec:
additionalPrinterColumns:
@@ -15,7 +14,6 @@ spec:
group: core.oam.dev
names:
categories:
- crossplane
- oam
kind: WorkloadDefinition
listKind: WorkloadDefinitionList
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: podspecworkloads.standard.oam.dev
spec:
group: standard.oam.dev
@@ -5,7 +5,6 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.4
creationTimestamp: null
name: rollouttraits.standard.oam.dev
spec:
group: standard.oam.dev
+9 -8
View File
@@ -14,6 +14,7 @@ import (
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
"github.com/oam-dev/kubevela/apis/types"
"github.com/oam-dev/kubevela/pkg/appfile/config"
"github.com/oam-dev/kubevela/pkg/appfile/helm"
@@ -146,7 +147,7 @@ func NewApplicationParser(cli client.Client, dm discoverymapper.DiscoveryMapper,
}
// GenerateAppFile converts an application to an Appfile
func (p *Parser) GenerateAppFile(ctx context.Context, name string, app *v1alpha2.Application) (*Appfile, error) {
func (p *Parser) GenerateAppFile(ctx context.Context, name string, app *v1beta1.Application) (*Appfile, error) {
appfile := new(Appfile)
appfile.Name = name
var wds []*Workload
@@ -161,20 +162,20 @@ func (p *Parser) GenerateAppFile(ctx context.Context, name string, app *v1alpha2
return appfile, nil
}
func (p *Parser) parseWorkload(ctx context.Context, comp v1alpha2.ApplicationComponent) (*Workload, error) {
func (p *Parser) parseWorkload(ctx context.Context, comp v1beta1.ApplicationComponent) (*Workload, error) {
templ, err := util.LoadTemplate(ctx, p.dm, p.client, comp.WorkloadType, types.TypeComponentDefinition)
templ, err := util.LoadTemplate(ctx, p.dm, p.client, comp.Type, types.TypeComponentDefinition)
if err != nil && !kerrors.IsNotFound(err) {
return nil, errors.WithMessagef(err, "fetch type of %s", comp.Name)
}
settings, err := util.RawExtension2Map(&comp.Settings)
settings, err := util.RawExtension2Map(&comp.Properties)
if err != nil {
return nil, errors.WithMessagef(err, "fail to parse settings for %s", comp.Name)
}
workload := &Workload{
Traits: []*Trait{},
Name: comp.Name,
Type: comp.WorkloadType,
Type: comp.Type,
CapabilityCategory: templ.CapabilityCategory,
Template: templ.TemplateStr,
HealthCheckPolicy: templ.Health,
@@ -188,11 +189,11 @@ func (p *Parser) parseWorkload(ctx context.Context, comp v1alpha2.ApplicationCom
for _, traitValue := range comp.Traits {
properties, err := util.RawExtension2Map(&traitValue.Properties)
if err != nil {
return nil, errors.Errorf("fail to parse properties of %s for %s", traitValue.Name, comp.Name)
return nil, errors.Errorf("fail to parse properties of %s for %s", traitValue.Type, comp.Name)
}
trait, err := p.parseTrait(ctx, traitValue.Name, properties)
trait, err := p.parseTrait(ctx, traitValue.Type, properties)
if err != nil {
return nil, errors.WithMessagef(err, "component(%s) parse trait(%s)", comp.Name, traitValue.Name)
return nil, errors.WithMessagef(err, "component(%s) parse trait(%s)", comp.Name, traitValue.Type)
}
workload.Traits = append(workload.Traits, trait)
+10 -10
View File
@@ -37,6 +37,7 @@ import (
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
oamtypes "github.com/oam-dev/kubevela/apis/types"
"github.com/oam-dev/kubevela/pkg/dsl/definition"
"github.com/oam-dev/kubevela/pkg/oam"
@@ -118,7 +119,7 @@ var expectedExceptApp = &Appfile{
}
const traitDefinition = `
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: TraitDefinition
metadata:
annotations:
@@ -146,7 +147,7 @@ spec:
}`
const componenetDefinition = `
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: worker
@@ -199,7 +200,7 @@ spec:
}`
const appfileYaml = `
apiVersion: core.oam.dev/v1alpha2
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: application-sample
@@ -207,20 +208,20 @@ spec:
components:
- name: myweb
type: worker
settings:
properties:
image: "busybox"
cmd:
- sleep
- "1000"
traits:
- name: scaler
- type: scaler
properties:
replicas: 10
`
var _ = Describe("Test application parser", func() {
It("Test we can parse an application to an appFile", func() {
o := v1alpha2.Application{}
o := v1beta1.Application{}
err := yaml.Unmarshal([]byte(appfileYaml), &o)
Expect(err).ShouldNot(HaveOccurred())
@@ -228,13 +229,13 @@ var _ = Describe("Test application parser", func() {
tclient := test.MockClient{
MockGet: func(ctx context.Context, key types.NamespacedName, obj runtime.Object) error {
switch o := obj.(type) {
case *v1alpha2.ComponentDefinition:
case *v1beta1.ComponentDefinition:
wd, err := util.UnMarshalStringToComponentDefinition(componenetDefinition)
if err != nil {
return err
}
*o = *wd
case *v1alpha2.TraitDefinition:
case *v1beta1.TraitDefinition:
td, err := util.UnMarshalStringToTraitDefinition(traitDefinition)
if err != nil {
return err
@@ -247,7 +248,6 @@ var _ = Describe("Test application parser", func() {
appfile, err := NewApplicationParser(&tclient, dm, pd).GenerateAppFile(context.TODO(), "test", &o)
Expect(err).ShouldNot(HaveOccurred())
Expect(equal(expectedExceptApp, appfile)).Should(BeTrue())
})
})
@@ -268,13 +268,13 @@ func equal(af, dest *Appfile) bool {
for j, td := range wd.Traits {
destTd := destWd.Traits[j]
if td.Name != destTd.Name {
fmt.Printf("td:%s dest%s", td.Name, destTd.Name)
return false
}
if !reflect.DeepEqual(td.Params, destTd.Params) {
fmt.Printf("%#v | %#v\n", td.Params, destTd.Params)
return false
}
}
}
return true
+2 -2
View File
@@ -16,7 +16,7 @@ import (
logf "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
corev1alpha2 "github.com/oam-dev/kubevela/apis/core.oam.dev"
coreoam "github.com/oam-dev/kubevela/apis/core.oam.dev"
"github.com/oam-dev/kubevela/pkg/dsl/definition"
"github.com/oam-dev/kubevela/pkg/oam/discoverymapper"
// +kubebuilder:scaffold:imports
@@ -51,7 +51,7 @@ var _ = BeforeSuite(func(done Done) {
Expect(err).ToNot(HaveOccurred())
Expect(cfg).ToNot(BeNil())
scheme = runtime.NewScheme()
Expect(corev1alpha2.AddToScheme(scheme)).NotTo(HaveOccurred())
Expect(coreoam.AddToScheme(scheme)).NotTo(HaveOccurred())
Expect(clientgoscheme.AddToScheme(scheme)).NotTo(HaveOccurred())
Expect(v1beta1.AddToScheme(scheme)).NotTo(HaveOccurred())
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme})
@@ -13,7 +13,7 @@ import (
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
"github.com/oam-dev/kubevela/apis/standard.oam.dev/v1alpha1"
"github.com/oam-dev/kubevela/pkg/oam"
)
@@ -106,7 +106,7 @@ func (c *CloneSetController) Initialize(ctx context.Context) (bool, error) {
}
if controller := metav1.GetControllerOf(c.cloneSet); controller != nil {
if controller.Kind == v1alpha2.AppRolloutKind && controller.APIVersion == v1alpha2.SchemeGroupVersion.String() {
if controller.Kind == v1beta1.AppRolloutKind && controller.APIVersion == v1beta1.SchemeGroupVersion.String() {
// it's already there
return true, nil
}
@@ -114,7 +114,7 @@ func (c *CloneSetController) Initialize(ctx context.Context) (bool, error) {
// add the parent controller to the owner of the cloneset
// before kicking start the update and start from every pod in the old version
clonePatch := client.MergeFrom(c.cloneSet.DeepCopyObject())
ref := metav1.NewControllerRef(c.parentController, v1alpha2.AppRolloutKindVersionKind)
ref := metav1.NewControllerRef(c.parentController, v1beta1.AppRolloutKindVersionKind)
c.cloneSet.SetOwnerReferences(append(c.cloneSet.GetOwnerReferences(), *ref))
c.cloneSet.Spec.UpdateStrategy.Paused = false
c.cloneSet.Spec.UpdateStrategy.Partition = &intstr.IntOrString{Type: intstr.Int, IntVal: totalReplicas}
@@ -200,7 +200,7 @@ func (c *CloneSetController) Finalize(ctx context.Context, succeed bool) bool {
// remove the parent controller from the resources' owner list
var newOwnerList []metav1.OwnerReference
for _, owner := range c.cloneSet.GetOwnerReferences() {
if owner.Kind == v1alpha2.AppRolloutKind && owner.APIVersion == v1alpha2.SchemeGroupVersion.String() {
if owner.Kind == v1beta1.AppRolloutKind && owner.APIVersion == v1beta1.SchemeGroupVersion.String() {
continue
}
newOwnerList = append(newOwnerList, owner)
@@ -14,7 +14,7 @@ import (
"k8s.io/utils/pointer"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
"github.com/oam-dev/kubevela/apis/standard.oam.dev/v1alpha1"
"github.com/oam-dev/kubevela/pkg/controller/common"
"github.com/oam-dev/kubevela/pkg/controller/utils"
@@ -318,7 +318,7 @@ func (c *DeploymentController) fetchDeployments(ctx context.Context) error {
func (c *DeploymentController) claimDeployment(ctx context.Context, deploy *apps.Deployment, initSize bool) error {
deployPatch := client.MergeFrom(deploy.DeepCopyObject())
if controller := metav1.GetControllerOf(deploy); controller == nil {
ref := metav1.NewControllerRef(c.parentController, v1alpha2.AppRolloutKindVersionKind)
ref := metav1.NewControllerRef(c.parentController, v1beta1.AppRolloutKindVersionKind)
deploy.SetOwnerReferences(append(deploy.GetOwnerReferences(), *ref))
}
deploy.Spec.Paused = false
@@ -459,7 +459,7 @@ func (c *DeploymentController) releaseDeployment(ctx context.Context, deploy *ap
var newOwnerList []metav1.OwnerReference
found := false
for _, owner := range deploy.GetOwnerReferences() {
if owner.Kind == v1alpha2.AppRolloutKind && owner.APIVersion == v1alpha2.SchemeGroupVersion.String() {
if owner.Kind == v1beta1.AppRolloutKind && owner.APIVersion == v1beta1.SchemeGroupVersion.String() {
found = true
continue
}
@@ -32,7 +32,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/oam-dev/kubevela/apis/core.oam.dev/common"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
"github.com/oam-dev/kubevela/pkg/appfile"
core "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev"
"github.com/oam-dev/kubevela/pkg/dsl/definition"
@@ -61,7 +61,7 @@ type Reconciler struct {
func (r *Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
ctx := context.Background()
applog := r.Log.WithValues("application", req.NamespacedName)
app := new(v1alpha2.Application)
app := new(v1beta1.Application)
if err := r.Get(ctx, client.ObjectKey{
Name: req.Name,
Namespace: req.Namespace,
@@ -161,12 +161,12 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error {
// If Application Own these two child objects, AC status change will notify application controller and recursively update AC again, and trigger application event again...
return ctrl.NewControllerManagedBy(mgr).
For(&v1alpha2.Application{}).
For(&v1beta1.Application{}).
Complete(r)
}
// UpdateStatus updates v1alpha2.Application's Status with retry.RetryOnConflict
func (r *Reconciler) UpdateStatus(ctx context.Context, app *v1alpha2.Application, opts ...client.UpdateOption) error {
// UpdateStatus updates v1beta1.Application's Status with retry.RetryOnConflict
func (r *Reconciler) UpdateStatus(ctx context.Context, app *v1beta1.Application, opts ...client.UpdateOption) error {
status := app.DeepCopy().Status
return retry.RetryOnConflict(retry.DefaultBackoff, func() (err error) {
if err = r.Get(ctx, types.NamespacedName{Namespace: app.Namespace, Name: app.Name}, app); err != nil {

Some files were not shown because too many files have changed in this diff Show More