| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| 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, |
| } |
| } |