diff --git a/stages/terraform-module-promise/main.go b/stages/terraform-module-promise/main.go index 6c48a0b..1b1f73c 100644 --- a/stages/terraform-module-promise/main.go +++ b/stages/terraform-module-promise/main.go @@ -15,8 +15,8 @@ func main() { yamlFile := GetEnv("KRATIX_INPUT_FILE", "/kratix/input/object.yaml") outputDir := GetEnv("KRATIX_OUTPUT_DIR", "/kratix/output") moduleSource := MustHaveEnv("MODULE_SOURCE") - moduleVersion := MustHaveEnv("MODULE_VERSION") - modulePath := os.Getenv("MODULE_PATH") // optional + moduleVersion := os.Getenv("MODULE_VERSION") // optional as can be set with ?ref= in source + modulePath := os.Getenv("MODULE_PATH") // optional yamlContent, err := os.ReadFile(yamlFile) if err != nil { @@ -44,9 +44,14 @@ func main() { uniqueFileName := strings.ToLower(fmt.Sprintf("%s_%s_%s", kind, namespace, name)) - source := fmt.Sprintf("%s//%s?ref=%s", moduleSource, modulePath, moduleVersion) + version := "" + if moduleVersion != "" { + version = fmt.Sprintf("?ref=%s", moduleVersion) + } + + source := fmt.Sprintf("%s//%s%s", moduleSource, modulePath, version) if modulePath == "" { - source = fmt.Sprintf("%s?ref=%s", moduleSource, moduleVersion) + source = fmt.Sprintf("%s%s", moduleSource, version) } module := map[string]map[string]map[string]any{ diff --git a/stages/terraform-module-promise/test/stage_test.go b/stages/terraform-module-promise/test/stage_test.go index 1dcfc28..0060626 100644 --- a/stages/terraform-module-promise/test/stage_test.go +++ b/stages/terraform-module-promise/test/stage_test.go @@ -105,3 +105,36 @@ var _ = Describe("From TF module to Promise Stage", func() { Expect(string(output)).To(MatchJSON(expectedOutputNoSpec)) }) }) + +var _ = Describe("Different variable inputs", func() { + var ( + envVars map[string]string + tmpDir string + ) + + BeforeEach(func() { + var err error + tmpDir, err = os.MkdirTemp("", "kratix") + Expect(err).NotTo(HaveOccurred()) + }) + + AfterEach(func() { + os.RemoveAll(tmpDir) + }) + + It("No version provided", func() { + envVars = map[string]string{ + "KRATIX_INPUT_FILE": "assets/test-object.yaml", + "KRATIX_OUTPUT_DIR": tmpDir, + "MODULE_SOURCE": "git::example.com?ref=1.0.0", + } + + session := runWithEnv(envVars) + Eventually(session).Should(gexec.Exit()) + Expect(session.Buffer()).To(gbytes.Say("Terraform JSON configuration written to %s/testobject_non-default_test-object.tf.json", tmpDir)) + Expect(session).To(gexec.Exit(0)) + output, err := os.ReadFile(filepath.Join(tmpDir, "testobject_non-default_test-object.tf.json")) + Expect(err).NotTo(HaveOccurred()) + Expect(string(output)).To(MatchJSON(expectedOutput)) + }) +})