mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-09-02 03:00:41 +00:00
added support of slice in set, removed support of allowed set flags (#191)
This commit is contained in:
@@ -114,11 +114,9 @@ You can always override the defaults or config file with CLI flags.
|
|||||||
To get the default config params run `mizu config` <br />
|
To get the default config params run `mizu config` <br />
|
||||||
To generate a new config file with default values use `mizu config -r`
|
To generate a new config file with default values use `mizu config -r`
|
||||||
|
|
||||||
Mizu has several undocumented flags which can be set by using --set flag (e.g., `mizu tap --set dump-logs=true`)
|
### Telemetry
|
||||||
* **mizu-resources-namespace**: Type - String, See [Namespace-Restricted Mode](#namespace-restricted-mode)
|
|
||||||
* **telemetry**: Type - Boolean, Reports telemetry
|
By default, mizu reports usage telemetry. It can be disabled by adding a line of telemetry: false in the ${HOME}/.mizu/config.yaml file
|
||||||
* **dump-logs**: Type - Boolean, At the end of the execution it creates a zip file with logs (in .mizu folder)
|
|
||||||
* **kube-config-path**: Type - String, Setting the path to kube config (which isn't in standard path)
|
|
||||||
|
|
||||||
## Advanced Usage
|
## Advanced Usage
|
||||||
|
|
||||||
|
@@ -60,10 +60,10 @@ func init() {
|
|||||||
defaults.Set(&defaultTapConfig)
|
defaults.Set(&defaultTapConfig)
|
||||||
|
|
||||||
tapCmd.Flags().Uint16P(configStructs.GuiPortTapName, "p", defaultTapConfig.GuiPort, "Provide a custom port for the web interface webserver")
|
tapCmd.Flags().Uint16P(configStructs.GuiPortTapName, "p", defaultTapConfig.GuiPort, "Provide a custom port for the web interface webserver")
|
||||||
tapCmd.Flags().StringArrayP(configStructs.NamespacesTapName, "n", defaultTapConfig.Namespaces, "Namespaces selector")
|
tapCmd.Flags().StringSliceP(configStructs.NamespacesTapName, "n", defaultTapConfig.Namespaces, "Namespaces selector")
|
||||||
tapCmd.Flags().Bool(configStructs.AnalysisTapName, defaultTapConfig.Analysis, "Uploads traffic to UP9 for further analysis (Beta)")
|
tapCmd.Flags().Bool(configStructs.AnalysisTapName, defaultTapConfig.Analysis, "Uploads traffic to UP9 for further analysis (Beta)")
|
||||||
tapCmd.Flags().BoolP(configStructs.AllNamespacesTapName, "A", defaultTapConfig.AllNamespaces, "Tap all namespaces")
|
tapCmd.Flags().BoolP(configStructs.AllNamespacesTapName, "A", defaultTapConfig.AllNamespaces, "Tap all namespaces")
|
||||||
tapCmd.Flags().StringArrayP(configStructs.PlainTextFilterRegexesTapName, "r", defaultTapConfig.PlainTextFilterRegexes, "List of regex expressions that are used to filter matching values from text/plain http bodies")
|
tapCmd.Flags().StringSliceP(configStructs.PlainTextFilterRegexesTapName, "r", defaultTapConfig.PlainTextFilterRegexes, "List of regex expressions that are used to filter matching values from text/plain http bodies")
|
||||||
tapCmd.Flags().Bool(configStructs.DisableRedactionTapName, defaultTapConfig.DisableRedaction, "Disables redaction of potentially sensitive request/response headers and body values")
|
tapCmd.Flags().Bool(configStructs.DisableRedactionTapName, defaultTapConfig.DisableRedaction, "Disables redaction of potentially sensitive request/response headers and body values")
|
||||||
tapCmd.Flags().String(configStructs.HumanMaxEntriesDBSizeTapName, defaultTapConfig.HumanMaxEntriesDBSize, "Override the default max entries db size")
|
tapCmd.Flags().String(configStructs.HumanMaxEntriesDBSizeTapName, defaultTapConfig.HumanMaxEntriesDBSize, "Override the default max entries db size")
|
||||||
tapCmd.Flags().String(configStructs.DirectionTapName, defaultTapConfig.Direction, "Record traffic that goes in this direction (relative to the tapped pod): in/any")
|
tapCmd.Flags().String(configStructs.DirectionTapName, defaultTapConfig.Direction, "Record traffic that goes in this direction (relative to the tapped pod): in/any")
|
||||||
|
@@ -70,7 +70,7 @@ func RunMizuTap() {
|
|||||||
targetNamespaces := getNamespaces(kubernetesProvider)
|
targetNamespaces := getNamespaces(kubernetesProvider)
|
||||||
|
|
||||||
var namespacesStr string
|
var namespacesStr string
|
||||||
if targetNamespaces[0] != mizu.K8sAllNamespaces {
|
if !mizu.Contains(targetNamespaces, mizu.K8sAllNamespaces) {
|
||||||
namespacesStr = fmt.Sprintf("namespaces \"%s\"", strings.Join(targetNamespaces, "\", \""))
|
namespacesStr = fmt.Sprintf("namespaces \"%s\"", strings.Join(targetNamespaces, "\", \""))
|
||||||
} else {
|
} else {
|
||||||
namespacesStr = "all namespaces"
|
namespacesStr = "all namespaces"
|
||||||
@@ -85,7 +85,7 @@ func RunMizuTap() {
|
|||||||
|
|
||||||
if len(state.currentlyTappedPods) == 0 {
|
if len(state.currentlyTappedPods) == 0 {
|
||||||
var suggestionStr string
|
var suggestionStr string
|
||||||
if targetNamespaces[0] != mizu.K8sAllNamespaces {
|
if !mizu.Contains(targetNamespaces, mizu.K8sAllNamespaces) {
|
||||||
suggestionStr = ". Select a different namespace with -n or tap all namespaces with -A"
|
suggestionStr = ". Select a different namespace with -n or tap all namespaces with -A"
|
||||||
}
|
}
|
||||||
mizu.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Did not find any pods matching the regex argument%s", suggestionStr))
|
mizu.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Did not find any pods matching the regex argument%s", suggestionStr))
|
||||||
|
@@ -120,23 +120,36 @@ func initFlag(f *pflag.Flag) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func mergeSetFlag(configElem reflect.Value, setValues []string) {
|
func mergeSetFlag(configElem reflect.Value, setValues []string) {
|
||||||
|
setMap := map[string][]string{}
|
||||||
|
|
||||||
for _, setValue := range setValues {
|
for _, setValue := range setValues {
|
||||||
if !strings.Contains(setValue, Separator) {
|
if !strings.Contains(setValue, Separator) {
|
||||||
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Ignoring set argument %s (set argument format: <flag name>=<flag value>)", setValue))
|
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Ignoring set argument %s (set argument format: <flag name>=<flag value>)", setValue))
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
split := strings.SplitN(setValue, Separator, 2)
|
split := strings.SplitN(setValue, Separator, 2)
|
||||||
if len(split) != 2 {
|
if len(split) != 2 {
|
||||||
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Ignoring set argument %s (set argument format: <flag name>=<flag value>)", setValue))
|
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Ignoring set argument %s (set argument format: <flag name>=<flag value>)", setValue))
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
argumentKey, argumentValue := split[0], split[1]
|
argumentKey, argumentValue := split[0], split[1]
|
||||||
|
|
||||||
|
setMap[argumentKey] = append(setMap[argumentKey], argumentValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
for argumentKey, argumentValues := range setMap {
|
||||||
if !Contains(allowedSetFlags, argumentKey) {
|
if !Contains(allowedSetFlags, argumentKey) {
|
||||||
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Ignoring set argument %s, flag name must be one of the following: \"%s\"", setValue, strings.Join(allowedSetFlags, "\", \"")))
|
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Ignoring set argument name \"%s\", flag name must be one of the following: \"%s\"", argumentKey, strings.Join(allowedSetFlags, "\", \"")))
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
mergeFlagValue(configElem, argumentKey, argumentValue)
|
if len(argumentValues) > 1 {
|
||||||
|
mergeFlagValues(configElem, argumentKey, argumentValues)
|
||||||
|
} else {
|
||||||
|
mergeFlagValue(configElem, argumentKey, argumentValues[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,8 +157,9 @@ func mergeFlagValue(currentElem reflect.Value, flagKey string, flagValue string)
|
|||||||
for i := 0; i < currentElem.NumField(); i++ {
|
for i := 0; i < currentElem.NumField(); i++ {
|
||||||
currentField := currentElem.Type().Field(i)
|
currentField := currentElem.Type().Field(i)
|
||||||
currentFieldByName := currentElem.FieldByName(currentField.Name)
|
currentFieldByName := currentElem.FieldByName(currentField.Name)
|
||||||
|
currentFieldKind := currentField.Type.Kind()
|
||||||
|
|
||||||
if currentField.Type.Kind() == reflect.Struct {
|
if currentFieldKind == reflect.Struct {
|
||||||
mergeFlagValue(currentFieldByName, flagKey, flagValue)
|
mergeFlagValue(currentFieldByName, flagKey, flagValue)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -154,11 +168,14 @@ func mergeFlagValue(currentElem reflect.Value, flagKey string, flagValue string)
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
flagValueKind := currentField.Type.Kind()
|
if currentFieldKind == reflect.Slice {
|
||||||
|
mergeFlagValues(currentElem, flagKey, []string{flagValue})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
parsedValue, err := getParsedValue(flagValueKind, flagValue)
|
parsedValue, err := getParsedValue(currentFieldKind, flagValue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Log.Warningf(uiUtils.Red, fmt.Sprintf("Invalid value %v for flag name %s, expected %s", flagValue, flagKey, flagValueKind))
|
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Invalid value %s for flag name %s, expected %s", flagValue, flagKey, currentFieldKind))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,8 +187,9 @@ func mergeFlagValues(currentElem reflect.Value, flagKey string, flagValues []str
|
|||||||
for i := 0; i < currentElem.NumField(); i++ {
|
for i := 0; i < currentElem.NumField(); i++ {
|
||||||
currentField := currentElem.Type().Field(i)
|
currentField := currentElem.Type().Field(i)
|
||||||
currentFieldByName := currentElem.FieldByName(currentField.Name)
|
currentFieldByName := currentElem.FieldByName(currentField.Name)
|
||||||
|
currentFieldKind := currentField.Type.Kind()
|
||||||
|
|
||||||
if currentField.Type.Kind() == reflect.Struct {
|
if currentFieldKind == reflect.Struct {
|
||||||
mergeFlagValues(currentFieldByName, flagKey, flagValues)
|
mergeFlagValues(currentFieldByName, flagKey, flagValues)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -180,13 +198,18 @@ func mergeFlagValues(currentElem reflect.Value, flagKey string, flagValues []str
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if currentFieldKind != reflect.Slice {
|
||||||
|
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Invalid values %s for flag name %s, expected %s", strings.Join(flagValues, ","), flagKey, currentFieldKind))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
flagValueKind := currentField.Type.Elem().Kind()
|
flagValueKind := currentField.Type.Elem().Kind()
|
||||||
|
|
||||||
parsedValues := reflect.MakeSlice(reflect.SliceOf(currentField.Type.Elem()), 0, 0)
|
parsedValues := reflect.MakeSlice(reflect.SliceOf(currentField.Type.Elem()), 0, 0)
|
||||||
for _, flagValue := range flagValues {
|
for _, flagValue := range flagValues {
|
||||||
parsedValue, err := getParsedValue(flagValueKind, flagValue)
|
parsedValue, err := getParsedValue(flagValueKind, flagValue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Log.Warningf(uiUtils.Red, fmt.Sprintf("Invalid value %v for flag name %s, expected %s", flagValue, flagKey, flagValueKind))
|
Log.Warningf(uiUtils.Warning, fmt.Sprintf("Invalid value %s for flag name %s, expected %s", flagValue, flagKey, flagValueKind))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user