mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-08-18 22:37:52 +00:00
The PodmanOptionsKey is never used anywhere so it is pointless to add this. Second having several functions to return the same context makes no sense so fold them all into one. Lastly create the context once and always return the same one instead of having to nil check each time. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
71 lines
2 KiB
Go
71 lines
2 KiB
Go
package generate
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/containers/common/pkg/completion"
|
|
"github.com/containers/podman/v5/cmd/podman/common"
|
|
"github.com/containers/podman/v5/cmd/podman/registry"
|
|
"github.com/containers/podman/v5/cmd/podman/utils"
|
|
"github.com/containers/podman/v5/pkg/domain/entities"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
specCmd = &cobra.Command{
|
|
Use: "spec [options] {CONTAINER|POD}",
|
|
Short: "Generate Specgen JSON based on containers or pods",
|
|
Long: "Generate Specgen JSON based on containers or pods",
|
|
RunE: spec,
|
|
Args: cobra.ExactArgs(1),
|
|
ValidArgsFunction: common.AutocompleteContainersAndPods,
|
|
Example: `podman generate spec ctrID`,
|
|
}
|
|
)
|
|
|
|
var (
|
|
opts *entities.GenerateSpecOptions
|
|
)
|
|
|
|
func init() {
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: specCmd,
|
|
Parent: GenerateCmd,
|
|
})
|
|
opts = &entities.GenerateSpecOptions{}
|
|
flags := specCmd.Flags()
|
|
|
|
filenameFlagName := "filename"
|
|
flags.StringVarP(&opts.FileName, filenameFlagName, "f", "", "Write output to the specified path")
|
|
_ = specCmd.RegisterFlagCompletionFunc(filenameFlagName, completion.AutocompleteNone)
|
|
|
|
compactFlagName := "compact"
|
|
flags.BoolVarP(&opts.Compact, compactFlagName, "c", false, "Print the json in a compact format for consumption")
|
|
|
|
nameFlagName := "name"
|
|
flags.BoolVarP(&opts.Name, nameFlagName, "n", true, "Specify a new name for the generated spec")
|
|
|
|
flags.SetNormalizeFunc(utils.AliasFlags)
|
|
}
|
|
|
|
func spec(cmd *cobra.Command, args []string) error {
|
|
opts.ID = args[0]
|
|
report, err := registry.ContainerEngine().GenerateSpec(registry.Context(), opts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// if we are looking to print the output, do not mess it up by printing the path
|
|
// if we are using -v the user probably expects to pipe the output somewhere else
|
|
if len(opts.FileName) > 0 {
|
|
err = os.WriteFile(opts.FileName, report.Data, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(opts.FileName)
|
|
} else {
|
|
fmt.Println(string(report.Data))
|
|
}
|
|
return nil
|
|
}
|