-
Notifications
You must be signed in to change notification settings - Fork 42k
kube-apiserver: fix missing global flags for --help #70204
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
kube-apiserver: fix missing global flags for --help #70204
Conversation
|
/assign @nikhiljindal |
|
/ok-to-test |
|
Thank you! Hmm, looks like there are some dependency issues. Will look into them. |
d6e087d to
83c25d9
Compare
|
/retest. This should work now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it should belong to another pull i suppose
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we have to register these by hardcoding their name here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I couldn't think of a better way since the flags are initialized the moment the glog package is used:
kubernetes/vendor/github.com/golang/glog/glog.go
Lines 399 to 404 in 5336866
| flag.BoolVar(&logging.toStderr, "logtostderr", false, "log to standard error instead of files") | |
| flag.BoolVar(&logging.alsoToStderr, "alsologtostderr", false, "log to standard error as well as files") | |
| flag.Var(&logging.verbosity, "v", "log level for V logs") | |
| flag.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr") | |
| flag.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging") | |
| flag.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace") |
We're doing the same thing in #68054 too. Previously without the named sections, we added everything from the global flag set:
| pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) |
With the named logical sections, we will need to extract out relevant flags so that we could group them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dont panic, return an error instead
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
scattering multiple local functions makes it hard to read. lumping them into one is fine. also, plz keep a minimal change and put unrelated changes into another pull if u want.
|
cc @logicalhan |
|
/hold #68054 is trying to add in |
|
/milestone v1.13 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is the logic different from a77652e#diff-2fd8f885c4e1d904b7d678e5991aade4R68 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sttts @imjching @stewart-yu we need both to match.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sttts @dims Originally I removed the normalize part because we don't need it. It was there to ensure that all globally registered flags that use underscores will be normalized to use hyphens instead.
klog registers flags using underscores:
https://github.com/dims/klog/blob/master/klog.go#L411-L419
Those cloud provider and admission packages register flags using hyphens instead. I have updated the code and added the normalize part back. Do we actually need both files to match? The commit that was provided above was for klog flags and therefore we need to normalize those flags.
Also, from documentation, the two snippets of code below are equivalent:
pflagFlag := pflag.PFlagFromGoFlag(f)
local.AddFlag(pflagFlag)local.AddGoFlag(f)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @stewart-yu
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
seems below enough in here @dims
f.Name = normalize(f.Name)
local.AddFlag(f)
but add
pflagFlag := pflag.PFlagFromGoFlag(f)
i'm not obey also, but seems no need for component flag now, may be need for future
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
how do we know we did not forget flags? We need a test for that, or if that is tricky due to globals in tests, we should at least have a check with a glog.Error here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel that doing a panic here rather than returning an error would be better since it would alert us that we failed to allow libraries to globally register their flags. What do you think? @yue9944882
@imjching iiuc, assuming any flag required by register here got deprecated in the vendored dependency, then we would be surprised w/ a panic, amiright? if u notice, we seldom do panic thru the codebase, which imho is neither user-friendly nor developer-friendly.
while i see we've been already doing that in controller, so...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sttts @yue9944882 Updated the patch by adding in tests. (It's similar to the other one that was merged earlier.) Are those sufficient?
1d7d26e to
85b794e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why add Line72? no need
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@imjching i am ok with "remove it" with a tracking issue (or PR) for the other piece of code for 1.14
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dims Sorry, I'm not quite sure if I understand you. If we were to remove Line 72 temporarily, i.e. pflagFlag := pflag.PFlagFromGoFlag(f), what should the issue track and what does the "other piece of code" refer to?
|
add test look much better now
2、combine WDYT? @imjching |
|
Thank you for your prompt review, @stewart-yu! Here are my thoughts for your summary:
Would like to hear thoughts from everyone else as well 😄 |
85b794e to
103066c
Compare
Signed-off-by: Jay Lim <[email protected]>
103066c to
7fbdcf8
Compare
|
@imjching I see the other two related PRs got closed but this is still going in, are the other two dropped for a later time (1.14) ? |
|
/assign @sttts |
|
/lgtm |
|
/approve |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: imjching, sttts The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
/test pull-kubernetes-verify |
|
/test pull-kubernetes-integration |
What type of PR is this?
/kind bug
What this PR does / why we need it: In #64517, we introduced logical sections for the
--helpoutput in thekube-apiserverbinary. It seems like it does not consider global flags that were registered through theflagpackage. This PR fixes that issue. We will output glog related and version flags in the "global" section and everything else in the "generic" section.Which issue(s) this PR fixes (optional, in
fixes #<issue number>(, fixes #<issue_number>, ...)format, will close the issue(s) when PR gets merged):See #70145.
Special notes for your reviewer: The original PR is in #70164. The plan to is to break it down into individual PRs.
Here's the simplified result of
kube-apiserver --help. It now shows the appropriate global flags and generic flags that were missing.Does this PR introduce a user-facing change?:
/sig cli
/cc @stewart-yu