From 80ace33e5ef4c945cd76b0ec2daf89cb5d2db343 Mon Sep 17 00:00:00 2001 From: Tedi Mitiku Date: Thu, 29 Feb 2024 10:01:33 -0500 Subject: [PATCH] finish swapping future ref mostly --- .../server/startosis_engine/plan.yml | 6 ++--- .../startosis_engine/plan_yaml_generator.go | 24 ++++++++----------- .../plan_yaml_generator_test.go | 4 ++-- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/core/server/api_container/server/startosis_engine/plan.yml b/core/server/api_container/server/startosis_engine/plan.yml index 3e0301a898..3aa27a6390 100644 --- a/core/server/api_container/server/startosis_engine/plan.yml +++ b/core/server/api_container/server/startosis_engine/plan.yml @@ -5,18 +5,18 @@ services: image: name: postgres:alpine envVars: - - key: POSTGRES_PASSWORD - value: tedi - key: POSTGRES_DB value: tedi - key: POSTGRES_USER value: tedi + - key: POSTGRES_PASSWORD + value: tedi tasks: - uuid: 2 taskType: exec command: - echo - - Hello, world + - '{{ kurtosis.1.ip_address }}' serviceName: db acceptableCodes: - 156 diff --git a/core/server/api_container/server/startosis_engine/plan_yaml_generator.go b/core/server/api_container/server/startosis_engine/plan_yaml_generator.go index f9faf2a62a..8d867d4cc6 100644 --- a/core/server/api_container/server/startosis_engine/plan_yaml_generator.go +++ b/core/server/api_container/server/startosis_engine/plan_yaml_generator.go @@ -198,8 +198,6 @@ func (pyg *PlanYamlGeneratorImpl) updatePlanYamlFromAddService(addServiceInstruc } pyg.futureReferenceIndex[futureRefHostName] = fmt.Sprintf("{{ kurtosis.%v.hostname }}", uuid) - service.Uuid = uuid - var regErr error serviceName, regErr := builtin_argument.ExtractArgumentValue[starlark.String](arguments, add_service.ServiceNameArgName) if regErr != nil { @@ -421,7 +419,7 @@ func (pyg *PlanYamlGeneratorImpl) updatePlanYamlFromRunSh(runShInstruction *inst if err != nil { return startosis_errors.WrapWithInterpretationError(err, "Unable to extract value for '%s' argument", tasks.RunArgName) } - task.RunCmd = []string{runCommand.GoString()} + task.RunCmd = []string{pyg.swapFutureReference(runCommand.GoString())} var image string if arguments.IsSet(tasks.ImageNameArgName) { @@ -597,6 +595,9 @@ func (pyg *PlanYamlGeneratorImpl) updatePlanYamlFromRunPython(runPythonInstructi if sliceParsingErr != nil { return startosis_errors.WrapWithInterpretationError(err, "error occurred while converting Starlark list of passed arguments to a golang string slice") } + for idx, arg := range argsList { + argsList[idx] = pyg.swapFutureReference(arg) + } task.PythonArgs = append(task.PythonArgs, argsList...) } @@ -748,17 +749,12 @@ func (pyg *PlanYamlGeneratorImpl) updatePlanYamlFromExec(execInstruction *instru return interpretationErr } // Convert Starlark list to Go slice - var cmdList []string - iter := commandStarlarkList.Iterate() - defer iter.Done() - var x starlark.Value - for iter.Next(&x) { - if i, ok := x.(starlark.String); ok { - cmdList = append(cmdList, i.GoString()) - } else { - // Handle the case if the element is not an integer - fmt.Println("Non-string element found in Starlark list") - } + cmdList, sliceParsingErr := kurtosis_types.SafeCastToStringSlice(commandStarlarkList, tasks.PythonArgumentsArgName) + if sliceParsingErr != nil { + return startosis_errors.WrapWithInterpretationError(err, "error occurred while converting Starlark list of passed arguments to a golang string slice") + } + for idx, cmd := range cmdList { + cmdList[idx] = pyg.swapFutureReference(cmd) } task.RunCmd = cmdList diff --git a/core/server/api_container/server/startosis_engine/plan_yaml_generator_test.go b/core/server/api_container/server/startosis_engine/plan_yaml_generator_test.go index 189e2385ca..7032526481 100644 --- a/core/server/api_container/server/startosis_engine/plan_yaml_generator_test.go +++ b/core/server/api_container/server/startosis_engine/plan_yaml_generator_test.go @@ -137,7 +137,7 @@ CMD ["node", "app.js"] relativePathToMainFile := "main.star" serializedScript := `def run(plan, args): - plan.add_service( + database = plan.add_service( name="db", config=ServiceConfig( image="postgres:alpine", @@ -151,7 +151,7 @@ CMD ["node", "app.js"] result = plan.exec( service_name = "db", - recipe = ExecRecipe(command = ["echo", "Hello, world"]), + recipe = ExecRecipe(command = ["echo", database.ip_address]), acceptable_codes=[156], ) plan.print(result)