mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-09-22 18:47:02 +00:00
Fixes a bug that caused tap and install commands to fail silently if Mizu lacked the required permissions to create its k8s resources.
82 lines
3.0 KiB
Go
82 lines
3.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/creasty/defaults"
|
|
"github.com/up9inc/mizu/cli/config"
|
|
"github.com/up9inc/mizu/cli/errormessage"
|
|
"github.com/up9inc/mizu/cli/resources"
|
|
"github.com/up9inc/mizu/cli/uiUtils"
|
|
"github.com/up9inc/mizu/shared"
|
|
"github.com/up9inc/mizu/shared/logger"
|
|
k8serrors "k8s.io/apimachinery/pkg/api/errors"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
func runMizuInstall() {
|
|
kubernetesProvider, err := getKubernetesProviderForCli()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel() // cancel will be called when this function exits
|
|
|
|
var serializedValidationRules string
|
|
var serializedContract string
|
|
|
|
var defaultMaxEntriesDBSizeBytes int64 = 200 * 1000 * 1000
|
|
|
|
defaultResources := shared.Resources{}
|
|
if err := defaults.Set(&defaultResources); err != nil {
|
|
logger.Log.Debug(err)
|
|
}
|
|
|
|
mizuAgentConfig := getInstallMizuAgentConfig(defaultMaxEntriesDBSizeBytes, defaultResources)
|
|
serializedMizuConfig, err := getSerializedMizuAgentConfig(mizuAgentConfig)
|
|
if err != nil {
|
|
logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error serializing mizu config: %v", errormessage.FormatError(err)))
|
|
return
|
|
}
|
|
|
|
if err = resources.CreateInstallMizuResources(ctx, kubernetesProvider, serializedValidationRules,
|
|
serializedContract, serializedMizuConfig, config.Config.IsNsRestrictedMode(),
|
|
config.Config.MizuResourcesNamespace, config.Config.AgentImage,
|
|
config.Config.KratosImage, config.Config.KetoImage,
|
|
nil, defaultMaxEntriesDBSizeBytes, defaultResources, config.Config.ImagePullPolicy(),
|
|
config.Config.LogLevel(), false); err != nil {
|
|
var statusError *k8serrors.StatusError
|
|
if errors.As(err, &statusError) && (statusError.ErrStatus.Reason == metav1.StatusReasonAlreadyExists) {
|
|
logger.Log.Info("Mizu is already running in this namespace, run `mizu clean` to remove the currently running Mizu instance")
|
|
} else {
|
|
defer resources.CleanUpMizuResources(ctx, cancel, kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace)
|
|
logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error creating resources: %v", errormessage.FormatError(err)))
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
logger.Log.Infof(uiUtils.Magenta, "Installation completed, run `mizu view` to connect to the mizu daemon instance")
|
|
}
|
|
|
|
func getInstallMizuAgentConfig(maxDBSizeBytes int64, tapperResources shared.Resources) *shared.MizuAgentConfig {
|
|
mizuAgentConfig := shared.MizuAgentConfig{
|
|
MaxDBSizeBytes: maxDBSizeBytes,
|
|
AgentImage: config.Config.AgentImage,
|
|
PullPolicy: config.Config.ImagePullPolicyStr,
|
|
LogLevel: config.Config.LogLevel(),
|
|
TapperResources: tapperResources,
|
|
MizuResourcesNamespace: config.Config.MizuResourcesNamespace,
|
|
AgentDatabasePath: shared.DataDirPath,
|
|
StandaloneMode: true,
|
|
ServiceMap: config.Config.ServiceMap,
|
|
OAS: config.Config.OAS,
|
|
Elastic: config.Config.Elastic,
|
|
}
|
|
|
|
return &mizuAgentConfig
|
|
}
|