From 16946d20b97654a2d310e7fd8ad2f6c922863cfd Mon Sep 17 00:00:00 2001 From: Dayuan Date: Mon, 5 Dec 2022 21:02:12 +0800 Subject: [PATCH] fix: unsupported resource type (#186) --- pkg/kusionctl/cmd/apply/options.go | 11 +++++++++-- pkg/kusionctl/cmd/destroy/options.go | 14 ++++++++++---- pkg/kusionctl/cmd/preview/options.go | 8 +++++++- pkg/kusionctl/cmd/util/helpers.go | 16 ++++++++++++++++ 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/pkg/kusionctl/cmd/apply/options.go b/pkg/kusionctl/cmd/apply/options.go index d4e0bde0..05475b37 100644 --- a/pkg/kusionctl/cmd/apply/options.go +++ b/pkg/kusionctl/cmd/apply/options.go @@ -21,6 +21,7 @@ import ( runtimeInit "kusionstack.io/kusion/pkg/engine/runtime/init" "kusionstack.io/kusion/pkg/engine/states" previewcmd "kusionstack.io/kusion/pkg/kusionctl/cmd/preview" + "kusionstack.io/kusion/pkg/kusionctl/cmd/util" "kusionstack.io/kusion/pkg/log" "kusionstack.io/kusion/pkg/projectstack" "kusionstack.io/kusion/pkg/status" @@ -94,13 +95,19 @@ func (o *ApplyOptions) Run() error { return err } - // Compute changes for preview runtimes := runtimeInit.InitRuntime() - r, err := runtimes[planResources.Resources[0].Type]() + // validate resource type + runtimeInitFun, err := util.ValidateResourceType(runtimes, planResources.Resources[0].Type) + if err != nil { + return err + } + + r, err := runtimeInitFun() if err != nil { return err } + // Compute changes for preview changes, err := previewcmd.Preview(&o.PreviewOptions, r, stateStorage, planResources, project, stack) if err != nil { return err diff --git a/pkg/kusionctl/cmd/destroy/options.go b/pkg/kusionctl/cmd/destroy/options.go index be805749..7f84af93 100644 --- a/pkg/kusionctl/cmd/destroy/options.go +++ b/pkg/kusionctl/cmd/destroy/options.go @@ -19,6 +19,7 @@ import ( runtimeInit "kusionstack.io/kusion/pkg/engine/runtime/init" "kusionstack.io/kusion/pkg/engine/states" compilecmd "kusionstack.io/kusion/pkg/kusionctl/cmd/compile" + "kusionstack.io/kusion/pkg/kusionctl/cmd/util" "kusionstack.io/kusion/pkg/log" "kusionstack.io/kusion/pkg/projectstack" "kusionstack.io/kusion/pkg/status" @@ -76,19 +77,24 @@ func (o *DestroyOptions) Run() error { } runtimes := runtimeInit.InitRuntime() - runtime, err := runtimes[planResources.Resources[0].Type]() + runtimeInitFun, err := util.ValidateResourceType(runtimes, planResources.Resources[0].Type) + if err != nil { + return err + } + + r, err := runtimeInitFun() if err != nil { return nil } - // Get stateStroage from backend config to manage state + // Get stateStorage from backend config to manage state stateStorage, err := backend.BackendFromConfig(project.Backend, o.BackendOps, o.WorkDir) if err != nil { return err } // Compute changes for preview - changes, err := o.preview(planResources, project, stack, runtime, stateStorage) + changes, err := o.preview(planResources, project, stack, r, stateStorage) if err != nil { return err } @@ -126,7 +132,7 @@ func (o *DestroyOptions) Run() error { // Destroy fmt.Println("Start destroying resources......") - if err := o.destroy(planResources, changes, runtime, stateStorage); err != nil { + if err := o.destroy(planResources, changes, r, stateStorage); err != nil { return err } return nil diff --git a/pkg/kusionctl/cmd/preview/options.go b/pkg/kusionctl/cmd/preview/options.go index a66820bd..71c6e540 100644 --- a/pkg/kusionctl/cmd/preview/options.go +++ b/pkg/kusionctl/cmd/preview/options.go @@ -16,6 +16,7 @@ import ( runtimeInit "kusionstack.io/kusion/pkg/engine/runtime/init" "kusionstack.io/kusion/pkg/engine/states" compilecmd "kusionstack.io/kusion/pkg/kusionctl/cmd/compile" + "kusionstack.io/kusion/pkg/kusionctl/cmd/util" "kusionstack.io/kusion/pkg/log" "kusionstack.io/kusion/pkg/projectstack" "kusionstack.io/kusion/pkg/status" @@ -92,7 +93,12 @@ func (o *PreviewOptions) Run() error { // Compute changes for preview runtimes := runtimeInit.InitRuntime() - r, err := runtimes[planResources.Resources[0].Type]() + runtimeInitFun, err := util.ValidateResourceType(runtimes, planResources.Resources[0].Type) + if err != nil { + return err + } + + r, err := runtimeInitFun() if err != nil { return err } diff --git a/pkg/kusionctl/cmd/util/helpers.go b/pkg/kusionctl/cmd/util/helpers.go index 4d2ebd31..a6001743 100644 --- a/pkg/kusionctl/cmd/util/helpers.go +++ b/pkg/kusionctl/cmd/util/helpers.go @@ -2,6 +2,10 @@ package util import ( "errors" + "fmt" + + "kusionstack.io/kusion/pkg/engine/models" + runtimeInit "kusionstack.io/kusion/pkg/engine/runtime/init" ) func RecoverErr(err *error) { @@ -22,3 +26,15 @@ func CheckErr(err error) { panic(err) } } + +func ValidateResourceType(runtimes map[models.Type]runtimeInit.InitFn, t models.Type) (runtimeInit.InitFn, error) { + supportTypes := make([]models.Type, 0, len(runtimes)) + for k := range runtimes { + supportTypes = append(supportTypes, k) + } + typeFun := runtimes[t] + if typeFun == nil { + return nil, fmt.Errorf("unknow resource type: %s. Currently supported resource types are: %v", t, supportTypes) + } + return typeFun, nil +}