Skip to content

Commit

Permalink
fix: stop all services first to update the service status in the serv…
Browse files Browse the repository at this point in the history
…ice registration during a `kurtosis enclave stop` execution (#1712)

## Description:
unregister the enclave services during a `kurtosis enclave stop`
execution

## Is this change user-facing?
NO

## References (if applicable):
Fix #1711
  • Loading branch information
leoporoli committed Nov 8, 2023
1 parent 02ee9b8 commit 3d1e142
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 28 deletions.
31 changes: 31 additions & 0 deletions cli/cli/commands/enclave/stop/stop.go
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"
"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
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
@@ -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
}

0 comments on commit 3d1e142

Please sign in to comment.