2023-04-13 11:43:03 +02:00

87 lines
3.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cmd
import (
"github.com/rsteube/carapace"
"github.com/rsteube/carapace-bin/pkg/actions/tools/docker"
"github.com/spf13/cobra"
)
var container_lsCmd = &cobra.Command{
Use: "ls [OPTIONS]",
Short: "List containers",
Aliases: []string{"ps", "list"},
Run: func(cmd *cobra.Command, args []string) {},
}
func init() {
carapace.Gen(container_lsCmd).Standalone()
container_lsCmd.Flags().BoolP("all", "a", false, "Show all containers (default shows just running)")
container_lsCmd.Flags().StringP("filter", "f", "", "Filter output based on conditions provided")
container_lsCmd.Flags().String("format", "", "Format output using a custom template:")
container_lsCmd.Flags().IntP("last", "n", 0, "Show n last created containers (includes all states)")
container_lsCmd.Flags().BoolP("latest", "l", false, "Show the latest created container (includes all states)")
container_lsCmd.Flags().Bool("no-trunc", false, "Don't truncate output")
container_lsCmd.Flags().BoolP("quiet", "q", false, "Only display container IDs")
container_lsCmd.Flags().BoolP("size", "s", false, "Display total file sizes")
containerCmd.AddCommand(container_lsCmd)
carapace.Gen(container_lsCmd).FlagCompletion(carapace.ActionMap{
"filter": carapace.ActionMultiParts("=", func(c carapace.Context) carapace.Action {
switch len(c.Parts) {
case 0:
return carapace.ActionValuesDescribed(
"ancestor", "Filters containers which share a given image as an ancestor",
"before", "Filters containers created before or after a given container ID or name",
"exited", "An integer representing the containers exit code",
"expose", "Filters containers which publish or expose a given port",
"health", "Filters containers based on their healthcheck status",
"id", "Containers ID",
"is-task", "Filters containers that are a “task” for a service",
"isolation", "Windows daemon only",
"label", "An arbitrary string representing either a key or a key-value pair",
"name", "Containers name",
"network", "Filters running containers connected to a given network",
"publish", "Filters containers which publish or expose a given port",
"since", "Filters containers created before or after a given container ID or name",
"status", "Container status",
"volume", " Filters running containers which have mounted a given volume or bind mount",
).Invoke(c).Suffix("=").ToA()
case 1:
switch c.Parts[0] {
case "ancestor":
return docker.ActionRepositoryTags()
case "before":
return docker.ActionContainers()
case "expose":
return docker.ActionPorts()
case "health":
return carapace.ActionValues("starting", "healthy", "unhealthy", "none")
case "is-task":
return carapace.ActionValues("true", "false")
case "id":
return docker.ActionContainerIds()
case "isolation":
return carapace.ActionValues("default", "process", "hyperv")
case "name":
return docker.ActionContainers()
case "network":
return docker.ActionNetworks()
case "publish":
return docker.ActionPorts()
case "since":
return docker.ActionContainers()
case "status":
return carapace.ActionValues("created", "restarting", "removing", "running", "paused", "exited", "dead")
case "volume":
return docker.ActionVolumes()
default:
return carapace.ActionValues()
}
default:
return carapace.ActionValues()
}
}),
})
}