mirror of
https://github.com/containers/podman.git
synced 2025-09-28 01:04:28 +08:00

InfraContainer should go through the same creation process as regular containers. This change was from the cmd level down, involving new container CLI opts and specgen creating functions. What now happens is that both container and pod cli options are populated in cmd and used to create a podSpecgen and a containerSpecgen. The process then goes as follows FillOutSpecGen (infra) -> MapSpec (podOpts -> infraOpts) -> PodCreate -> MakePod -> createPodOptions -> NewPod -> CompleteSpec (infra) -> MakeContainer -> NewContainer -> newContainer -> AddInfra (to pod state) Signed-off-by: cdoern <cdoern@redhat.com>
90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package network
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/containers/podman/v3/cmd/podman/common"
|
|
"github.com/containers/podman/v3/cmd/podman/registry"
|
|
"github.com/containers/podman/v3/cmd/podman/utils"
|
|
"github.com/containers/podman/v3/cmd/podman/validate"
|
|
"github.com/containers/podman/v3/pkg/domain/entities"
|
|
"github.com/containers/podman/v3/pkg/specgenutil"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/pflag"
|
|
)
|
|
|
|
var (
|
|
networkPruneDescription = `Prune unused networks`
|
|
networkPruneCommand = &cobra.Command{
|
|
Use: "prune [options]",
|
|
Short: "network prune",
|
|
Long: networkPruneDescription,
|
|
RunE: networkPrune,
|
|
Example: `podman network prune`,
|
|
Args: validate.NoArgs,
|
|
ValidArgsFunction: common.AutocompleteNetworks,
|
|
}
|
|
)
|
|
|
|
var (
|
|
networkPruneOptions entities.NetworkPruneOptions
|
|
force bool
|
|
filter = []string{}
|
|
)
|
|
|
|
func networkPruneFlags(cmd *cobra.Command, flags *pflag.FlagSet) {
|
|
flags.BoolVarP(&force, "force", "f", false, "do not prompt for confirmation")
|
|
filterFlagName := "filter"
|
|
flags.StringArrayVar(&filter, filterFlagName, []string{}, "Provide filter values (e.g. 'label=<key>=<value>')")
|
|
_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePruneFilters)
|
|
}
|
|
|
|
func init() {
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: networkPruneCommand,
|
|
Parent: networkCmd,
|
|
})
|
|
flags := networkPruneCommand.Flags()
|
|
networkPruneFlags(networkPruneCommand, flags)
|
|
}
|
|
|
|
func networkPrune(cmd *cobra.Command, _ []string) error {
|
|
var (
|
|
errs utils.OutputErrors
|
|
err error
|
|
)
|
|
if !force {
|
|
reader := bufio.NewReader(os.Stdin)
|
|
fmt.Println("WARNING! This will remove all networks not used by at least one container.")
|
|
fmt.Print("Are you sure you want to continue? [y/N] ")
|
|
answer, err := reader.ReadString('\n')
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if strings.ToLower(answer)[0] != 'y' {
|
|
return nil
|
|
}
|
|
}
|
|
networkPruneOptions.Filters, err = specgenutil.ParseFilters(filter)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
responses, err := registry.ContainerEngine().NetworkPrune(registry.Context(), networkPruneOptions)
|
|
if err != nil {
|
|
setExitCode(err)
|
|
return err
|
|
}
|
|
for _, r := range responses {
|
|
if r.Error == nil {
|
|
fmt.Println(r.Name)
|
|
} else {
|
|
setExitCode(r.Error)
|
|
errs = append(errs, r.Error)
|
|
}
|
|
}
|
|
return errs.PrintErrors()
|
|
}
|