From 0d04467be476361ee50dca22dcd1b6f3a267036c Mon Sep 17 00:00:00 2001 From: Dejan Pejchev Date: Wed, 15 May 2024 11:07:35 +0200 Subject: [PATCH] add new flags for run command --- cmd/simulator/cmd/run.go | 8 +++++ cmd/simulator/config/config.go | 5 +++ internal/simulator/resources/resources.go | 39 +++++++++++++---------- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/cmd/simulator/cmd/run.go b/cmd/simulator/cmd/run.go index 769f29e..f5bd217 100644 --- a/cmd/simulator/cmd/run.go +++ b/cmd/simulator/cmd/run.go @@ -86,6 +86,10 @@ The process is designed to mimic real-world Kubernetes environments for testing pterm.Info.Printf("setting the default env vars type to %s type\n", config.DefaultEnvVarsType) resources.SetDefaultEnvVarsType(config.DefaultEnvVarsType) + pterm.Success.Printf("setting env var count to %d\n", config.EnvVarCount) + resources.EnvVarCount = config.EnvVarCount + pterm.Success.Printf("setting max env var size to %d bytes\n", config.MaxEnvVarSize) + resources.MaxEnvVarSize = config.MaxEnvVarSize if config.Remote { pterm.Success.Println("running simulation in remote Kubernetes cluster") @@ -118,6 +122,8 @@ func runRemote(ctx context.Context, client kubernetes.Interface) error { "--job-creator-limit", fmt.Sprintf("%d", config.JobCreatorLimit), "--random-env-vars", fmt.Sprintf("%t", config.RandomEnvVars), "--default-env-vars-type", config.DefaultEnvVarsType, + "--env-var-count", fmt.Sprintf("%d", config.EnvVarCount), + "--max-env-var-size", fmt.Sprintf("%d", config.MaxEnvVarSize), "--namespace", config.Namespace, "--no-gui", "--verbose", @@ -177,6 +183,8 @@ func NewRunCmd() *cobra.Command { runCmd.Flags().BoolVar(&config.RandomEnvVars, "random-env-vars", config.RandomEnvVars, "use random env vars") runCmd.Flags().StringVar(&config.DefaultEnvVarsType, "default-env-vars-type", config.DefaultEnvVarsType, "default env vars type") runCmd.Flags().StringVar(&config.SimulatorNamespace, "simulator-namespace", config.SimulatorNamespace, "namespace in which to create simulator resources") + runCmd.Flags().IntVar(&config.EnvVarCount, "env-var-count", config.EnvVarCount, "number of env vars in a pod spec") + runCmd.Flags().IntVar(&config.MaxEnvVarSize, "max-env-var-size", config.MaxEnvVarSize, "maximum size of an env var in bytes") return runCmd } diff --git a/cmd/simulator/config/config.go b/cmd/simulator/config/config.go index de89d6a..afc6308 100644 --- a/cmd/simulator/config/config.go +++ b/cmd/simulator/config/config.go @@ -61,4 +61,9 @@ var ( RandomEnvVars = false // DefaultEnvVarsType is the default envvar type which are generated when creating fake pods. DefaultEnvVarsType = "medium" + // EnvVarCount is the number of envvars in a pod spec. + EnvVarCount = 5 + // MaxEnvVarSize is maximum size of an env var in bytes. + // It is used only when RandomEnvVars is set to true. + MaxEnvVarSize = 10 * 1024 ) diff --git a/internal/simulator/resources/resources.go b/internal/simulator/resources/resources.go index 820f736..59e2698 100644 --- a/internal/simulator/resources/resources.go +++ b/internal/simulator/resources/resources.go @@ -15,47 +15,52 @@ import ( ) const ( - defaultEnvVarCount = 5 LabelKeyApp = "app" LabelValueFakeJob = "fake-job" LabelValueFakePod = "fake-pod" LabelSelectorFakePod = LabelKeyApp + "=" + LabelValueFakePod ) - -var DefaultEnvVarsType = newEnvVars(defaultEnvVarCount, 2*1024, "SOME_ENV_VAR_MEDIUM") +var ( + // EnvVarCount is the number of envvars in a pod spec. + EnvVarCount = 5 + // MaxEnvVarSize is the maximum size of an env var in bytes. + MaxEnvVarSize = 10 * 1024 + // EnvVarsType is the type of env vars that should be used when creating fake pods (nano, micro, xsmall...). + EnvVarsType = newEnvVars(EnvVarCount, 2*1024, "SOME_ENV_VAR_MEDIUM") +) func SetDefaultEnvVarsType(envVarType string) { - DefaultEnvVarsType = GetEnvVars(envVarType) + EnvVarsType = GetEnvVars(envVarType) } func GetEnvVars(envVarType string) []corev1.EnvVar { switch envVarType { case "nano": - return newEnvVars(defaultEnvVarCount, 100, "SOME_ENV_VAR_NANO") + return newEnvVars(EnvVarCount, 100, "SOME_ENV_VAR_NANO") case "micro": - return newEnvVars(defaultEnvVarCount, 200, "SOME_ENV_VAR_MICRO") + return newEnvVars(EnvVarCount, 200, "SOME_ENV_VAR_MICRO") case "xsmall": - return newEnvVars(defaultEnvVarCount, 500, "SOME_ENV_VAR_XSMALL") + return newEnvVars(EnvVarCount, 500, "SOME_ENV_VAR_XSMALL") case "small": - return newEnvVars(defaultEnvVarCount, 1024, "SOME_ENV_VAR_SMALL") + return newEnvVars(EnvVarCount, 1024, "SOME_ENV_VAR_SMALL") case "medium": - return newEnvVars(defaultEnvVarCount, 2*1024, "SOME_ENV_VAR_MEDIUM") + return newEnvVars(EnvVarCount, 2*1024, "SOME_ENV_VAR_MEDIUM") case "large": - return newEnvVars(defaultEnvVarCount, 4*1024, "SOME_ENV_VAR_LARGE") + return newEnvVars(EnvVarCount, 4*1024, "SOME_ENV_VAR_LARGE") case "xlarge": - return newEnvVars(defaultEnvVarCount, 8*1024, "SOME_ENV_VAR_XLARGE") + return newEnvVars(EnvVarCount, 8*1024, "SOME_ENV_VAR_XLARGE") case "xlarge2": - return newEnvVars(defaultEnvVarCount, 10*1024, "SOME_ENV_VAR_XLARGE2") + return newEnvVars(EnvVarCount, 10*1024, "SOME_ENV_VAR_XLARGE2") case "xlarge8": - return newEnvVars(defaultEnvVarCount, 40*1024, "SOME_ENV_VAR_XLARGE8") + return newEnvVars(EnvVarCount, 40*1024, "SOME_ENV_VAR_XLARGE8") default: - return newEnvVars(defaultEnvVarCount, 2*1024, "SOME_ENV_VAR_MEDIUM") + return newEnvVars(EnvVarCount, 2*1024, "SOME_ENV_VAR_MEDIUM") } } func GetRandomEnvVarType() []corev1.EnvVar { - size := 1 + rand.Intn(40*1024) - return newEnvVars(defaultEnvVarCount, size, "SOME_ENV_VAR_RANDOM") + size := 1 + rand.Intn(MaxEnvVarSize) + return newEnvVars(EnvVarCount, size, "SOME_ENV_VAR_RANDOM") } // newEnvVars creates a slice of envvars with the specified count and size. @@ -194,7 +199,7 @@ func NewFakePod(name, namespace string, randomEnvVars bool) *corev1.Pod { // newPodSpec creates a new pod spec. // If randomEnvVars is true, a random envvar slice will be used, otherwise the default (large) envvar slice will be used. func newPodSpec(randomEnvVars bool) corev1.PodSpec { - envVars := DefaultEnvVarsType + envVars := EnvVarsType if randomEnvVars { envVars = GetRandomEnvVarType() }