From 2e54ddc35acb9e6c5f70411d12b8d3c5fa05ca75 Mon Sep 17 00:00:00 2001 From: Eric Stroczynski Date: Tue, 30 Oct 2018 12:31:55 -0700 Subject: [PATCH] internal/util/projutil: add function to exit if not a Go project commands/operator-sdk/{add,generate}: exit if not a Go project for 'add {api,controller}', 'generate k8s' sub-commands --- commands/operator-sdk/cmd/add/api.go | 3 +++ commands/operator-sdk/cmd/add/controller.go | 3 +++ commands/operator-sdk/cmd/generate/k8s.go | 5 +++++ internal/util/projutil/project_util.go | 17 ++++++++++++++--- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/commands/operator-sdk/cmd/add/api.go b/commands/operator-sdk/cmd/add/api.go index 7a5dc6fe83f..aef9980d494 100644 --- a/commands/operator-sdk/cmd/add/api.go +++ b/commands/operator-sdk/cmd/add/api.go @@ -63,6 +63,9 @@ Example: } func apiRun(cmd *cobra.Command, args []string) { + // Only Go projects can add apis. + projutil.MustGoProjectCmd(cmd) + // Create and validate new resource projutil.MustInProjectRoot() r, err := scaffold.NewResource(apiVersion, kind) diff --git a/commands/operator-sdk/cmd/add/controller.go b/commands/operator-sdk/cmd/add/controller.go index dff0303a686..269b3b7c618 100644 --- a/commands/operator-sdk/cmd/add/controller.go +++ b/commands/operator-sdk/cmd/add/controller.go @@ -57,6 +57,9 @@ Example: } func controllerRun(cmd *cobra.Command, args []string) { + // Only Go projects can add controllers. + projutil.MustGoProjectCmd(cmd) + projutil.MustInProjectRoot() // Create and validate new resource r, err := scaffold.NewResource(apiVersion, kind) diff --git a/commands/operator-sdk/cmd/generate/k8s.go b/commands/operator-sdk/cmd/generate/k8s.go index 6ab093caaed..6ed3dbf3597 100644 --- a/commands/operator-sdk/cmd/generate/k8s.go +++ b/commands/operator-sdk/cmd/generate/k8s.go @@ -43,11 +43,16 @@ func k8sFunc(cmd *cobra.Command, args []string) { if len(args) != 0 { log.Fatalf("k8s command doesn't accept any arguments.") } + + // Only Go projects can generate k8s deepcopy code. + projutil.MustGoProjectCmd(cmd) + K8sCodegen() } // K8sCodegen performs deepcopy code-generation for all custom resources under pkg/apis func K8sCodegen() { + projutil.MustInProjectRoot() repoPkg := projutil.CheckAndGetCurrPkg() outputPkg := filepath.Join(repoPkg, "pkg/generated") diff --git a/internal/util/projutil/project_util.go b/internal/util/projutil/project_util.go index 502cfa9e5de..80987f79852 100644 --- a/internal/util/projutil/project_util.go +++ b/internal/util/projutil/project_util.go @@ -19,11 +19,13 @@ import ( "os" "path/filepath" "strings" + + "github.com/spf13/cobra" ) const ( SrcDir = "src" - gopkgToml = "./Gopkg.toml" + mainFile = "./cmd/manager/main.go" buildDockerfile = "./build/Dockerfile" ) @@ -52,6 +54,15 @@ func MustInProjectRoot() { } } +func MustGoProjectCmd(cmd *cobra.Command) { + t := GetOperatorType() + switch t { + case OperatorTypeGo: + default: + log.Fatalf("'%s' can only be run for Go operators.", cmd.CommandPath()) + } +} + func MustGetwd() string { wd, err := os.Getwd() if err != nil { @@ -82,8 +93,8 @@ func CheckAndGetCurrPkg() string { // This function should be called after verifying the user is in project root // e.g: "go", "ansible" func GetOperatorType() OperatorType { - // Assuming that if Gopkg.toml exists then this is a Go operator - _, err := os.Stat(gopkgToml) + // Assuming that if main.go exists then this is a Go operator + _, err := os.Stat(mainFile) if err != nil && os.IsNotExist(err) { return OperatorTypeAnsible }