Merge pull request #4509 from thaJeztah/23.0_backport_lazy_ping

[23.0 backport] cmd/docker: areFlagsSupported: don't Ping if not needed
This commit is contained in:
Sebastiaan van Stijn 2023-08-23 11:47:12 +02:00 committed by GitHub
commit 7e32d44867
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 3 deletions

View File

@ -402,14 +402,22 @@ func areFlagsSupported(cmd *cobra.Command, details versionDetails) error {
errs := []string{} errs := []string{}
cmd.Flags().VisitAll(func(f *pflag.Flag) { cmd.Flags().VisitAll(func(f *pflag.Flag) {
if !f.Changed { if !f.Changed || len(f.Annotations) == 0 {
return return
} }
if !isVersionSupported(f, details.CurrentVersion()) { // Important: in the code below, calls to "details.CurrentVersion()" and
// "details.ServerInfo()" are deliberately executed inline to make them
// be executed "lazily". This is to prevent making a connection with the
// daemon to perform a "ping" (even for flags that do not require a
// daemon connection).
//
// See commit b39739123b845f872549e91be184cc583f5b387c for details.
if _, ok := f.Annotations["version"]; ok && !isVersionSupported(f, details.CurrentVersion()) {
errs = append(errs, fmt.Sprintf(`"--%s" requires API version %s, but the Docker daemon API version is %s`, f.Name, getFlagAnnotation(f, "version"), details.CurrentVersion())) errs = append(errs, fmt.Sprintf(`"--%s" requires API version %s, but the Docker daemon API version is %s`, f.Name, getFlagAnnotation(f, "version"), details.CurrentVersion()))
return return
} }
if !isOSTypeSupported(f, details.ServerInfo().OSType) { if _, ok := f.Annotations["ostype"]; ok && !isOSTypeSupported(f, details.ServerInfo().OSType) {
errs = append(errs, fmt.Sprintf( errs = append(errs, fmt.Sprintf(
`"--%s" is only supported on a Docker daemon running on %s, but the Docker daemon is running on %s`, `"--%s" is only supported on a Docker daemon running on %s, but the Docker daemon is running on %s`,
f.Name, f.Name,