package command import ( "context" "strings" "github.com/hashicorp/packer/packer" "github.com/posener/complete" ) type InspectCommand struct { Meta } func (c *InspectCommand) Run(args []string) int { ctx := context.Background() cfg, ret := c.ParseArgs(args) if ret != 0 { return ret } return c.RunContext(ctx, cfg) } func (c *InspectCommand) ParseArgs(args []string) (*InspectArgs, int) { var cfg InspectArgs flags := c.Meta.FlagSet("inspect", FlagSetVars) flags.Usage = func() { c.Ui.Say(c.Help()) } cfg.AddFlagSets(flags) if err := flags.Parse(args); err != nil { return &cfg, 1 } args = flags.Args() if len(args) == 1 { cfg.Path = args[0] } return &cfg, 0 } func (c *InspectCommand) RunContext(ctx context.Context, cla *InspectArgs) int { packerStarter, ret := c.GetConfig(&cla.MetaArgs) if ret != 0 { return ret } // here we ignore init diags to allow unknown variables to be used _ = packerStarter.Initialize(packer.InitializeOptions{}) return packerStarter.InspectConfig(packer.InspectConfigOptions{ Ui: c.Ui, }) } func (*InspectCommand) Help() string { helpText := ` Usage: packer inspect TEMPLATE Inspects a template, parsing and outputting the components a template defines. This does not validate the contents of a template (other than basic syntax by necessity). Options: -machine-readable Machine-readable output ` return strings.TrimSpace(helpText) } func (c *InspectCommand) Synopsis() string { return "see components of a template" } func (c *InspectCommand) AutocompleteArgs() complete.Predictor { return complete.PredictNothing } func (c *InspectCommand) AutocompleteFlags() complete.Flags { return complete.Flags{ "-machine-readable": complete.PredictNothing, } }