mirror of https://github.com/docker/cli.git
Merge pull request #1094 from thaJeztah/hide_checkpoint_on_windows
Hide experimental checkpoint features on Windows
This commit is contained in:
commit
63ad0a0e88
|
@ -9,11 +9,15 @@ import (
|
|||
// NewCheckpointCommand returns the `checkpoint` subcommand (only in experimental)
|
||||
func NewCheckpointCommand(dockerCli command.Cli) *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "checkpoint",
|
||||
Short: "Manage checkpoints",
|
||||
Args: cli.NoArgs,
|
||||
RunE: command.ShowHelp(dockerCli.Err()),
|
||||
Annotations: map[string]string{"experimental": "", "version": "1.25"},
|
||||
Use: "checkpoint",
|
||||
Short: "Manage checkpoints",
|
||||
Args: cli.NoArgs,
|
||||
RunE: command.ShowHelp(dockerCli.Err()),
|
||||
Annotations: map[string]string{
|
||||
"experimental": "",
|
||||
"ostype": "linux",
|
||||
"version": "1.25",
|
||||
},
|
||||
}
|
||||
cmd.AddCommand(
|
||||
newCreateCommand(dockerCli),
|
||||
|
|
|
@ -47,8 +47,10 @@ func NewStartCommand(dockerCli command.Cli) *cobra.Command {
|
|||
|
||||
flags.StringVar(&opts.checkpoint, "checkpoint", "", "Restore from this checkpoint")
|
||||
flags.SetAnnotation("checkpoint", "experimental", nil)
|
||||
flags.SetAnnotation("checkpoint", "ostype", []string{"linux"})
|
||||
flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory")
|
||||
flags.SetAnnotation("checkpoint-dir", "experimental", nil)
|
||||
flags.SetAnnotation("checkpoint-dir", "ostype", []string{"linux"})
|
||||
return cmd
|
||||
}
|
||||
|
||||
|
|
|
@ -256,6 +256,9 @@ func hideUnsupportedFeatures(cmd *cobra.Command, details versionDetails) {
|
|||
if subcmdVersion, ok := subcmd.Annotations["version"]; ok && versions.LessThan(clientVersion, subcmdVersion) {
|
||||
subcmd.Hidden = true
|
||||
}
|
||||
if v, ok := subcmd.Annotations["ostype"]; ok && v != osType {
|
||||
subcmd.Hidden = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -282,14 +285,14 @@ func areFlagsSupported(cmd *cobra.Command, details versionDetails) error {
|
|||
return
|
||||
}
|
||||
if !isOSTypeSupported(f, osType) {
|
||||
errs = append(errs, fmt.Sprintf("\"--%s\" requires the Docker daemon to run on %s, but the Docker daemon is running on %s", f.Name, getFlagAnnotation(f, "ostype"), osType))
|
||||
errs = append(errs, fmt.Sprintf("\"--%s\" is only supported on a Docker daemon running on %s, but the Docker daemon is running on %s", f.Name, getFlagAnnotation(f, "ostype"), osType))
|
||||
return
|
||||
}
|
||||
if _, ok := f.Annotations["experimental"]; ok && !hasExperimental {
|
||||
errs = append(errs, fmt.Sprintf("\"--%s\" is only supported on a Docker daemon with experimental features enabled", f.Name))
|
||||
}
|
||||
if _, ok := f.Annotations["experimentalCLI"]; ok && !hasExperimentalCLI {
|
||||
errs = append(errs, fmt.Sprintf("\"--%s\" is only supported when experimental cli features are enabled", f.Name))
|
||||
errs = append(errs, fmt.Sprintf("\"--%s\" is on a Docker cli with experimental cli features enabled", f.Name))
|
||||
}
|
||||
_, isKubernetesAnnotated := f.Annotations["kubernetes"]
|
||||
_, isSwarmAnnotated := f.Annotations["swarm"]
|
||||
|
@ -310,6 +313,7 @@ func areFlagsSupported(cmd *cobra.Command, details versionDetails) error {
|
|||
// Check recursively so that, e.g., `docker stack ls` returns the same output as `docker stack`
|
||||
func areSubcommandsSupported(cmd *cobra.Command, details versionDetails) error {
|
||||
clientVersion := details.Client().ClientVersion()
|
||||
osType := details.ServerInfo().OSType
|
||||
hasExperimental := details.ServerInfo().HasExperimental
|
||||
hasExperimentalCLI := details.ClientInfo().HasExperimental
|
||||
hasKubernetes := details.ClientInfo().HasKubernetes()
|
||||
|
@ -319,11 +323,14 @@ func areSubcommandsSupported(cmd *cobra.Command, details versionDetails) error {
|
|||
if cmdVersion, ok := curr.Annotations["version"]; ok && versions.LessThan(clientVersion, cmdVersion) {
|
||||
return fmt.Errorf("%s requires API version %s, but the Docker daemon API version is %s", cmd.CommandPath(), cmdVersion, clientVersion)
|
||||
}
|
||||
if os, ok := curr.Annotations["ostype"]; ok && os != osType {
|
||||
return fmt.Errorf("%s is only supported on a Docker daemon running on %s, but the Docker daemon is running on %s", cmd.CommandPath(), os, osType)
|
||||
}
|
||||
if _, ok := curr.Annotations["experimental"]; ok && !hasExperimental {
|
||||
return fmt.Errorf("%s is only supported on a Docker daemon with experimental features enabled", cmd.CommandPath())
|
||||
}
|
||||
if _, ok := curr.Annotations["experimentalCLI"]; ok && !hasExperimentalCLI {
|
||||
return fmt.Errorf("%s is only supported when experimental cli features are enabled", cmd.CommandPath())
|
||||
return fmt.Errorf("%s is only supported on a Docker cli with experimental cli features enabled", cmd.CommandPath())
|
||||
}
|
||||
_, isKubernetesAnnotated := curr.Annotations["kubernetes"]
|
||||
_, isSwarmAnnotated := curr.Annotations["swarm"]
|
||||
|
|
|
@ -25,6 +25,7 @@ type cmdOption struct {
|
|||
ExperimentalCLI bool
|
||||
Kubernetes bool
|
||||
Swarm bool
|
||||
OSType string `yaml:"os_type,omitempty"`
|
||||
}
|
||||
|
||||
type cmdDoc struct {
|
||||
|
@ -48,6 +49,7 @@ type cmdDoc struct {
|
|||
ExperimentalCLI bool
|
||||
Kubernetes bool
|
||||
Swarm bool
|
||||
OSType string `yaml:"os_type,omitempty"`
|
||||
}
|
||||
|
||||
// GenYamlTree creates yaml structured ref files
|
||||
|
@ -121,6 +123,9 @@ func GenYamlCustom(cmd *cobra.Command, w io.Writer) error {
|
|||
if _, ok := curr.Annotations["swarm"]; ok && !cliDoc.Swarm {
|
||||
cliDoc.Swarm = true
|
||||
}
|
||||
if os, ok := curr.Annotations["ostype"]; ok && cliDoc.OSType == "" {
|
||||
cliDoc.OSType = os
|
||||
}
|
||||
}
|
||||
|
||||
flags := cmd.NonInheritedFlags()
|
||||
|
@ -207,6 +212,15 @@ func genFlagResult(flags *pflag.FlagSet) []cmdOption {
|
|||
opt.Swarm = true
|
||||
}
|
||||
|
||||
// Note that the annotation can have multiple ostypes set, however, multiple
|
||||
// values are currently not used (and unlikely will).
|
||||
//
|
||||
// To simplify usage of the os_type property in the YAML, and for consistency
|
||||
// with the same property for commands, we're only using the first ostype that's set.
|
||||
if ostypes, ok := flag.Annotations["ostype"]; ok && len(opt.OSType) == 0 && len(ostypes) > 0 {
|
||||
opt.OSType = ostypes[0]
|
||||
}
|
||||
|
||||
result = append(result, opt)
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue