mirror of https://github.com/docker/cli.git
system prune: only warn about volumes if --volumes is given
Signed-off-by: Harald Albers <github@albersweb.de>
This commit is contained in:
parent
92a2a1d539
commit
849b0e96a0
|
@ -1,7 +1,9 @@
|
||||||
package system
|
package system
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"text/template"
|
||||||
|
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
|
@ -44,29 +46,14 @@ func NewPruneCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const confirmationTemplate = `WARNING! This will remove:
|
||||||
warning = `WARNING! This will remove:
|
{{- range $_, $warning := . }}
|
||||||
- all stopped containers
|
- {{ $warning }}
|
||||||
- all volumes not used by at least one container
|
{{- end }}
|
||||||
- all networks not used by at least one container
|
|
||||||
%s
|
|
||||||
- all build cache
|
|
||||||
Are you sure you want to continue?`
|
Are you sure you want to continue?`
|
||||||
|
|
||||||
danglingImageDesc = "- all dangling images"
|
|
||||||
allImageDesc = `- all images without at least one container associated to them`
|
|
||||||
)
|
|
||||||
|
|
||||||
func runPrune(dockerCli command.Cli, options pruneOptions) error {
|
func runPrune(dockerCli command.Cli, options pruneOptions) error {
|
||||||
var message string
|
if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), confirmationMessage(options)) {
|
||||||
|
|
||||||
if options.all {
|
|
||||||
message = fmt.Sprintf(warning, allImageDesc)
|
|
||||||
} else {
|
|
||||||
message = fmt.Sprintf(warning, danglingImageDesc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), message) {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,3 +96,26 @@ func runPrune(dockerCli command.Cli, options pruneOptions) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// confirmationMessage constructs a confirmation message that depends on the cli options.
|
||||||
|
func confirmationMessage(options pruneOptions) string {
|
||||||
|
t := template.Must(template.New("confirmation message").Parse(confirmationTemplate))
|
||||||
|
|
||||||
|
warnings := []string{
|
||||||
|
"all stopped containers",
|
||||||
|
"all networks not used by at least one container",
|
||||||
|
}
|
||||||
|
if options.pruneVolumes {
|
||||||
|
warnings = append(warnings, "all volumes not used by at least one container")
|
||||||
|
}
|
||||||
|
if options.all {
|
||||||
|
warnings = append(warnings, "all images without at least one container associated to them")
|
||||||
|
} else {
|
||||||
|
warnings = append(warnings, "all dangling images")
|
||||||
|
}
|
||||||
|
warnings = append(warnings, "all build cache")
|
||||||
|
|
||||||
|
var buffer bytes.Buffer
|
||||||
|
t.Execute(&buffer, &warnings)
|
||||||
|
return buffer.String()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue