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)
|
// NewCheckpointCommand returns the `checkpoint` subcommand (only in experimental)
|
||||||
func NewCheckpointCommand(dockerCli command.Cli) *cobra.Command {
|
func NewCheckpointCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "checkpoint",
|
Use: "checkpoint",
|
||||||
Short: "Manage checkpoints",
|
Short: "Manage checkpoints",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
RunE: command.ShowHelp(dockerCli.Err()),
|
RunE: command.ShowHelp(dockerCli.Err()),
|
||||||
Annotations: map[string]string{"experimental": "", "version": "1.25"},
|
Annotations: map[string]string{
|
||||||
|
"experimental": "",
|
||||||
|
"ostype": "linux",
|
||||||
|
"version": "1.25",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
cmd.AddCommand(
|
cmd.AddCommand(
|
||||||
newCreateCommand(dockerCli),
|
newCreateCommand(dockerCli),
|
||||||
|
|
|
@ -47,8 +47,10 @@ func NewStartCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
|
|
||||||
flags.StringVar(&opts.checkpoint, "checkpoint", "", "Restore from this checkpoint")
|
flags.StringVar(&opts.checkpoint, "checkpoint", "", "Restore from this checkpoint")
|
||||||
flags.SetAnnotation("checkpoint", "experimental", nil)
|
flags.SetAnnotation("checkpoint", "experimental", nil)
|
||||||
|
flags.SetAnnotation("checkpoint", "ostype", []string{"linux"})
|
||||||
flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory")
|
flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory")
|
||||||
flags.SetAnnotation("checkpoint-dir", "experimental", nil)
|
flags.SetAnnotation("checkpoint-dir", "experimental", nil)
|
||||||
|
flags.SetAnnotation("checkpoint-dir", "ostype", []string{"linux"})
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -256,6 +256,9 @@ func hideUnsupportedFeatures(cmd *cobra.Command, details versionDetails) {
|
||||||
if subcmdVersion, ok := subcmd.Annotations["version"]; ok && versions.LessThan(clientVersion, subcmdVersion) {
|
if subcmdVersion, ok := subcmd.Annotations["version"]; ok && versions.LessThan(clientVersion, subcmdVersion) {
|
||||||
subcmd.Hidden = true
|
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
|
return
|
||||||
}
|
}
|
||||||
if !isOSTypeSupported(f, osType) {
|
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
|
return
|
||||||
}
|
}
|
||||||
if _, ok := f.Annotations["experimental"]; ok && !hasExperimental {
|
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))
|
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 {
|
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"]
|
_, isKubernetesAnnotated := f.Annotations["kubernetes"]
|
||||||
_, isSwarmAnnotated := f.Annotations["swarm"]
|
_, 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`
|
// Check recursively so that, e.g., `docker stack ls` returns the same output as `docker stack`
|
||||||
func areSubcommandsSupported(cmd *cobra.Command, details versionDetails) error {
|
func areSubcommandsSupported(cmd *cobra.Command, details versionDetails) error {
|
||||||
clientVersion := details.Client().ClientVersion()
|
clientVersion := details.Client().ClientVersion()
|
||||||
|
osType := details.ServerInfo().OSType
|
||||||
hasExperimental := details.ServerInfo().HasExperimental
|
hasExperimental := details.ServerInfo().HasExperimental
|
||||||
hasExperimentalCLI := details.ClientInfo().HasExperimental
|
hasExperimentalCLI := details.ClientInfo().HasExperimental
|
||||||
hasKubernetes := details.ClientInfo().HasKubernetes()
|
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) {
|
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)
|
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 {
|
if _, ok := curr.Annotations["experimental"]; ok && !hasExperimental {
|
||||||
return fmt.Errorf("%s is only supported on a Docker daemon with experimental features enabled", cmd.CommandPath())
|
return fmt.Errorf("%s is only supported on a Docker daemon with experimental features enabled", cmd.CommandPath())
|
||||||
}
|
}
|
||||||
if _, ok := curr.Annotations["experimentalCLI"]; ok && !hasExperimentalCLI {
|
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"]
|
_, isKubernetesAnnotated := curr.Annotations["kubernetes"]
|
||||||
_, isSwarmAnnotated := curr.Annotations["swarm"]
|
_, isSwarmAnnotated := curr.Annotations["swarm"]
|
||||||
|
|
|
@ -25,6 +25,7 @@ type cmdOption struct {
|
||||||
ExperimentalCLI bool
|
ExperimentalCLI bool
|
||||||
Kubernetes bool
|
Kubernetes bool
|
||||||
Swarm bool
|
Swarm bool
|
||||||
|
OSType string `yaml:"os_type,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type cmdDoc struct {
|
type cmdDoc struct {
|
||||||
|
@ -48,6 +49,7 @@ type cmdDoc struct {
|
||||||
ExperimentalCLI bool
|
ExperimentalCLI bool
|
||||||
Kubernetes bool
|
Kubernetes bool
|
||||||
Swarm bool
|
Swarm bool
|
||||||
|
OSType string `yaml:"os_type,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenYamlTree creates yaml structured ref files
|
// 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 {
|
if _, ok := curr.Annotations["swarm"]; ok && !cliDoc.Swarm {
|
||||||
cliDoc.Swarm = true
|
cliDoc.Swarm = true
|
||||||
}
|
}
|
||||||
|
if os, ok := curr.Annotations["ostype"]; ok && cliDoc.OSType == "" {
|
||||||
|
cliDoc.OSType = os
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.NonInheritedFlags()
|
flags := cmd.NonInheritedFlags()
|
||||||
|
@ -207,6 +212,15 @@ func genFlagResult(flags *pflag.FlagSet) []cmdOption {
|
||||||
opt.Swarm = true
|
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)
|
result = append(result, opt)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue