mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-08-08 23:37:11 +00:00
Manually read verbosity before kubectl command construction
kubectl command construction is slowly getting more functionality which sometimes requires to log certain actions. Currently we parse the verbosity only when actually running the command, so all of construction code is not able to use -v=5. This commit adds the manual parsing and loglevel setting berore we even start creating the kubectl command. Signed-off-by: Maciej Szulik <soltysh@gmail.com>
This commit is contained in:
@@ -17,7 +17,10 @@ limitations under the License.
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"k8s.io/component-base/cli"
|
||||
"k8s.io/component-base/logs"
|
||||
"k8s.io/kubectl/pkg/cmd"
|
||||
"k8s.io/kubectl/pkg/cmd/util"
|
||||
|
||||
@@ -26,6 +29,13 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
// We need to manually parse the arguments looking for verbosity flag and
|
||||
// set appropriate level here, because in the normal flow the flag parsing,
|
||||
// including the logging verbosity, happens inside cli.RunNoErrOutput.
|
||||
// Doing it here ensures we can continue using klog during kubectl command
|
||||
// construction, which includes handling plugins and parsing .kuberc file,
|
||||
// for example.
|
||||
logs.GlogSetter(cmd.GetLogVerbosity(os.Args)) // nolint:errcheck
|
||||
command := cmd.NewDefaultKubectlCommand()
|
||||
if err := cli.RunNoErrOutput(command); err != nil {
|
||||
// Pretty-print the error and exit with an error.
|
||||
|
||||
@@ -583,3 +583,29 @@ func registerCompletionFuncForGlobalFlags(cmd *cobra.Command, f cmdutil.Factory)
|
||||
return utilcomp.ListUsersInConfig(toComplete), cobra.ShellCompDirectiveNoFileComp
|
||||
}))
|
||||
}
|
||||
|
||||
// GetLogVerbosity parses the provided command-line arguments to determine
|
||||
// the verbosity level for logging. Returns string representing the verbosity
|
||||
// level, or 0 if no verbosity flag is specified.
|
||||
func GetLogVerbosity(args []string) string {
|
||||
for i, arg := range args {
|
||||
if arg == "--" {
|
||||
// flags after "--" does not represent any flag of
|
||||
// the command. We should short cut the iteration in here.
|
||||
break
|
||||
}
|
||||
|
||||
if arg == "--v" || arg == "-v" {
|
||||
if i+1 < len(args) {
|
||||
return args[i+1]
|
||||
}
|
||||
} else if strings.Contains(arg, "--v=") || strings.Contains(arg, "-v=") {
|
||||
parg := strings.Split(arg, "=")
|
||||
if len(parg) > 1 && parg[1] != "" {
|
||||
return parg[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "0"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user