Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: stop all services first to update the service status in the service registration during a kurtosis enclave stop execution #1712

Merged
merged 4 commits into from
Nov 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions cli/cli/commands/enclave/stop/stop.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import (
"context"
"fmt"
"github.com/kurtosis-tech/kurtosis/api/golang/engine/kurtosis_engine_rpc_api_bindings"
"github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context"
leoporoli marked this conversation as resolved.
Show resolved Hide resolved
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/highlevel/enclave_id_arg"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/highlevel/engine_consuming_kurtosis_command"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/lowlevel/args"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/lowlevel/flags"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_str_consts"
"github.com/kurtosis-tech/kurtosis/cli/cli/helpers/shared_starlark_calls"
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface"
"github.com/kurtosis-tech/kurtosis/metrics-library/golang/lib/metrics_client"
"github.com/kurtosis-tech/stacktrace"
Expand Down Expand Up @@ -66,6 +68,11 @@ func run(
if err = metricsClient.TrackStopEnclave(enclaveIdentifier); err != nil {
logrus.Warnf("An error occurred while logging the stop enclave event for enclave '%v'", enclaveIdentifier)
}

if err = stopAllEnclaveServices(ctx, enclaveIdentifier); err != nil {
return stacktrace.Propagate(err, "An error occurred stopping all enclave services")
}

if _, err := engineClient.StopEnclave(ctx, stopArgs); err != nil {
wrappedErr := stacktrace.Propagate(err, "An error occurred stopping enclave '%v'", enclaveIdentifier)
stopEnclaveErrorStrs = append(stopEnclaveErrorStrs, wrappedErr.Error())
Expand All @@ -88,3 +95,27 @@ func run(

return nil
}

func stopAllEnclaveServices(ctx context.Context, enclaveIdentifier string) error {
kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine()
if err != nil {
return stacktrace.Propagate(err, "An error occurred creating Kurtosis Context from local engine")
}

enclaveCtx, err := kurtosisCtx.GetEnclaveContext(ctx, enclaveIdentifier)
if err != nil {
return stacktrace.Propagate(err, "An error occurred getting an enclave context from enclave info for enclave '%v'", enclaveIdentifier)
}

allEnclaveServices, err := enclaveCtx.GetServices()
if err != nil {
return stacktrace.Propagate(err, "An error occurred getting all enclave services")
}

for serviceName := range allEnclaveServices {
if err := shared_starlark_calls.StopServiceStarlarkCommand(ctx, enclaveCtx, serviceName); err != nil {
return stacktrace.Propagate(err, "An error occurred stopping service '%s'", serviceName)
}
}
return nil
}
30 changes: 2 additions & 28 deletions cli/cli/commands/service/stop/stop.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@ package stop

import (
"context"
"fmt"
"github.com/kurtosis-tech/kurtosis/api/golang/core/lib/enclaves"
"github.com/kurtosis-tech/kurtosis/api/golang/core/lib/services"
"github.com/kurtosis-tech/kurtosis/api/golang/core/lib/starlark_run_config"
"github.com/kurtosis-tech/kurtosis/api/golang/engine/kurtosis_engine_rpc_api_bindings"
"github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/highlevel/enclave_id_arg"
Expand All @@ -14,6 +10,7 @@ import (
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/lowlevel/args"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/lowlevel/flags"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_str_consts"
"github.com/kurtosis-tech/kurtosis/cli/cli/helpers/shared_starlark_calls"
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface"
"github.com/kurtosis-tech/kurtosis/metrics-library/golang/lib/metrics_client"
"github.com/kurtosis-tech/stacktrace"
Expand All @@ -31,11 +28,6 @@ const (

kurtosisBackendCtxKey = "kurtosis-backend"
engineClientCtxKey = "engine-client"

starlarkScript = `
def run(plan, args):
plan.stop_service(name=args["service_name"])
`
)

var ServiceStopCmd = &engine_consuming_kurtosis_command.EngineConsumingKurtosisCommand{
Expand Down Expand Up @@ -99,27 +91,9 @@ func run(

serviceName := serviceContext.GetServiceName()

if err := stopServiceStarlarkCommand(ctx, enclaveCtx, serviceName); err != nil {
if err := shared_starlark_calls.StopServiceStarlarkCommand(ctx, enclaveCtx, serviceName); err != nil {
return stacktrace.Propagate(err, "An error occurred stopping service '%v' from enclave '%v'", serviceIdentifier, enclaveIdentifier)
}
}
return nil
}

func stopServiceStarlarkCommand(ctx context.Context, enclaveCtx *enclaves.EnclaveContext, serviceName services.ServiceName) error {
params := fmt.Sprintf(`{"service_name": "%s"}`, serviceName)
runResult, err := enclaveCtx.RunStarlarkScriptBlocking(ctx, starlarkScript, starlark_run_config.NewRunStarlarkConfig(starlark_run_config.WithSerializedParams(params)))
if err != nil {
return stacktrace.Propagate(err, "An unexpected error occurred on Starlark for stopping service")
}
if runResult.ExecutionError != nil {
return stacktrace.NewError("An error occurred during Starlark script execution for stopping service: %s", runResult.ExecutionError.GetErrorMessage())
}
if runResult.InterpretationError != nil {
return stacktrace.NewError("An error occurred during Starlark script interpretation for stopping service: %s", runResult.InterpretationError.GetErrorMessage())
}
if len(runResult.ValidationErrors) > 0 {
return stacktrace.NewError("An error occurred during Starlark script validation for stopping service: %v", runResult.ValidationErrors)
}
return nil
}
35 changes: 35 additions & 0 deletions cli/cli/helpers/shared_starlark_calls/shared_starlark_calls.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package shared_starlark_calls

import (
"context"
"fmt"
"github.com/kurtosis-tech/kurtosis/api/golang/core/lib/enclaves"
"github.com/kurtosis-tech/kurtosis/api/golang/core/lib/services"
"github.com/kurtosis-tech/kurtosis/api/golang/core/lib/starlark_run_config"
"github.com/kurtosis-tech/stacktrace"
)

const (
stopServiceStarlarkScript = `
def run(plan, args):
plan.stop_service(name=args["service_name"])
`
)

func StopServiceStarlarkCommand(ctx context.Context, enclaveCtx *enclaves.EnclaveContext, serviceName services.ServiceName) error {
params := fmt.Sprintf(`{"service_name": "%s"}`, serviceName)
runResult, err := enclaveCtx.RunStarlarkScriptBlocking(ctx, stopServiceStarlarkScript, starlark_run_config.NewRunStarlarkConfig(starlark_run_config.WithSerializedParams(params)))
if err != nil {
return stacktrace.Propagate(err, "An unexpected error occurred on Starlark for stopping service")
}
if runResult.ExecutionError != nil {
return stacktrace.NewError("An error occurred during Starlark script execution for stopping service: %s", runResult.ExecutionError.GetErrorMessage())
}
if runResult.InterpretationError != nil {
return stacktrace.NewError("An error occurred during Starlark script interpretation for stopping service: %s", runResult.InterpretationError.GetErrorMessage())
}
if len(runResult.ValidationErrors) > 0 {
return stacktrace.NewError("An error occurred during Starlark script validation for stopping service: %v", runResult.ValidationErrors)
}
return nil
}