package main import ( "errors" "os" "github.com/containers/common/pkg/completion" "github.com/containers/podman/v5/cmd/podman/validate" "github.com/containers/podman/v5/internal/domain/entities" "github.com/spf13/cobra" ) var ( populateLayerDescription = `Populate a layer in local storage.` populateLayerCmd = &cobra.Command{ Use: "populate-layer [options]", Args: validate.NoArgs, Short: "Populate a layer", Long: populateLayerDescription, RunE: populateLayer, ValidArgsFunction: completion.AutocompleteNone, Example: `podman testing populate-layer`, } populateLayerOpts entities.PopulateLayerOptions populateLayerFile string modifyLayerDescription = `Modify a layer in local storage, corrupting it.` modifyLayerCmd = &cobra.Command{ Use: "modify-layer [options]", Args: validate.NoArgs, Short: "Modify the contents of a layer", Long: modifyLayerDescription, RunE: modifyLayer, ValidArgsFunction: completion.AutocompleteNone, Example: `podman testing modify-layer`, } modifyLayerOpts entities.ModifyLayerOptions modifyLayerFile string ) func init() { mainCmd.AddCommand(populateLayerCmd) flags := populateLayerCmd.Flags() flags.StringVarP(&populateLayerOpts.ID, "layer", "l", "", "ID of layer to be populated") flags.StringVarP(&populateLayerFile, "file", "f", "", "archive of contents to extract in layer") mainCmd.AddCommand(modifyLayerCmd) flags = modifyLayerCmd.Flags() flags.StringVarP(&modifyLayerOpts.ID, "layer", "l", "", "ID of layer to be modified") flags.StringVarP(&modifyLayerFile, "file", "f", "", "archive of contents to extract over layer") } func populateLayer(cmd *cobra.Command, args []string) error { if populateLayerOpts.ID == "" { return errors.New("layer ID not specified") } if populateLayerFile == "" { return errors.New("layer contents file not specified") } buf, err := os.ReadFile(populateLayerFile) if err != nil { return err } populateLayerOpts.ContentsArchive = buf _, err = testingEngine.PopulateLayer(mainContext, populateLayerOpts) if err != nil { return err } return nil } func modifyLayer(cmd *cobra.Command, args []string) error { if modifyLayerOpts.ID == "" { return errors.New("layer ID not specified") } if modifyLayerFile == "" { return errors.New("layer contents file not specified") } buf, err := os.ReadFile(modifyLayerFile) if err != nil { return err } modifyLayerOpts.ContentsArchive = buf _, err = testingEngine.ModifyLayer(mainContext, modifyLayerOpts) if err != nil { return err } return nil }