diff --git a/Gopkg.lock b/Gopkg.lock index 4ffba03485..a90a4ef62d 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -1,6 +1,12 @@ # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. +[[projects]] + name = "github.com/dave/jennifer" + packages = ["jen"] + revision = "a148b4c5d12536d473460e22b414454522c741cd" + version = "v0.17.0" + [[projects]] name = "github.com/davecgh/go-spew" packages = ["spew"] @@ -154,6 +160,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "ea8e5405c04eb9033cac9e3b2c12053ea5a964d910643aef3ca430ab915c2231" + inputs-digest = "5f7434cdc187fba0f20ba4f9a4efa87e849f19a53e06c8049b954ceb282ae658" solver-name = "gps-cdcl" solver-version = 1 diff --git a/pkg/generator/render_main.go b/pkg/generator/render_main.go new file mode 100644 index 0000000000..313c9faa33 --- /dev/null +++ b/pkg/generator/render_main.go @@ -0,0 +1,66 @@ +package generator + +import ( + "io" + "path/filepath" + + . "github.com/dave/jennifer/jen" +) + +const ( + // sdkImport is the operator-sdk import path. + sdkImport = "github.com/coreos/operator-sdk/pkg/sdk" + main = "main" +) + +// renderMain generates the cmd/main.go with a repo path ("github.com/coreos/play"), apiVersion ("v1alpha1"), +// projectName ("play"), service ("PlayService"), and servicePlural ("PlayServicePlural"). +// +// for example: +// +// renderMain(w, "github.com/coreos/play", "v1alpha1", "play", "PlayService", "PlayServicePlural" ) +// +// Output: +// +// package main +// import ( +// context "context" +// sdk "github.com/coreos/operator-sdk/pkg/sdk" +// v1alpha1 "github.com/coreos/play/pkg/apis/play/v1alpha1" +// stub "github.com/coreos/play/pkg/stub" +// ) + +// func main() { +// namespace := "default" +// sdk.Watch(v1alpha1.PlayServicePlural, namespace, v1alpha1.PlayService) +// stub.Handle(&stub.Handler{}) +// sdk.Run(context.TODO()) +// } +// +func renderMain(w io.Writer, repo, apiVersion, projectName, service, servicePlural string) error { + file := NewFile(main) + + apiImport := filepath.Join(repo, apisDir, projectName, apiVersion) + stubImport := filepath.Join(repo, stubDir) + // func main() {..} + file.Func().Id("main").Params().Block( + // namespace := "default" + Id("namespace").Op(":=").Lit("default"), + // sdk.Watch(...) + Qual(sdkImport, "Watch").Call( + Qual(apiImport, servicePlural), + Id("namespace"), + Qual(apiImport, service), + ), + // sdk.Handle(...) + Qual(stubImport, "Handle").Call( + Op("&").Qual(stubImport, "Handler{}"), + ), + // sdk.Run(...) + Qual(sdkImport, "Run").Call( + Qual("context", "TODO").Call(), + ), + ) + + return file.Render(w) +}