From e1d445ba44ed500d3776ba2fdf68c8a9b4d4a965 Mon Sep 17 00:00:00 2001 From: Lucas Bajolet Date: Mon, 20 Mar 2023 14:13:04 +0000 Subject: [PATCH] backport of commit e7dbd4de0534504f9410343392ce6f30037b57cb --- command/meta.go | 2 ++ packer/telemetry.go | 32 +++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/command/meta.go b/command/meta.go index 3f1665956..4bb86cec2 100644 --- a/command/meta.go +++ b/command/meta.go @@ -117,9 +117,11 @@ func (m *Meta) GetConfig(cla *MetaArgs) (packer.Handler, int) { switch cfgType { case ConfigTypeHCL2: + packer.CheckpointReporter.SetTemplateType(packer.HCL2Template) // TODO(azr): allow to pass a slice of files here. return m.GetConfigFromHCL(cla) default: + packer.CheckpointReporter.SetTemplateType(packer.JSONTemplate) // TODO: uncomment once we've polished HCL a bit more. // c.Ui.Say(`Legacy JSON Configuration Will Be Used. // The template will be parsed in the legacy configuration style. This style diff --git a/packer/telemetry.go b/packer/telemetry.go index 4ec60a400..bb34c8eb4 100644 --- a/packer/telemetry.go +++ b/packer/telemetry.go @@ -15,22 +15,32 @@ import ( "github.com/zclconf/go-cty/cty" ) -const TelemetryVersion string = "beta/packer/5" +type PackerTemplateType string + +const ( + UnknownTemplate PackerTemplateType = "Unknown" + HCL2Template PackerTemplateType = "HCL2" + JSONTemplate PackerTemplateType = "JSON" +) + +const TelemetryVersion string = "beta/packer/6" const TelemetryPanicVersion string = "beta/packer_panic/4" var CheckpointReporter *CheckpointTelemetry type PackerReport struct { - Spans []*TelemetrySpan `json:"spans"` - ExitCode int `json:"exit_code"` - Error string `json:"error"` - Command string `json:"command"` + Spans []*TelemetrySpan `json:"spans"` + ExitCode int `json:"exit_code"` + Error string `json:"error"` + Command string `json:"command"` + TemplateType PackerTemplateType `json:"template_type"` } type CheckpointTelemetry struct { spans []*TelemetrySpan signatureFile string startTime time.Time + templateType PackerTemplateType } func NewCheckpointReporter(disableSignature bool) *CheckpointTelemetry { @@ -54,6 +64,7 @@ func NewCheckpointReporter(disableSignature bool) *CheckpointTelemetry { return &CheckpointTelemetry{ signatureFile: signatureFile, startTime: time.Now().UTC(), + templateType: UnknownTemplate, } } @@ -105,6 +116,15 @@ func (c *CheckpointTelemetry) AddSpan(name, pluginType string, options interface return ts } +// SetTemplateType registers the template type being processed for a Packer command +func (c *CheckpointTelemetry) SetTemplateType(t PackerTemplateType) { + if c == nil { + return + } + + c.templateType = t +} + func (c *CheckpointTelemetry) Finalize(command string, errCode int, err error) error { if c == nil { return nil @@ -121,6 +141,8 @@ func (c *CheckpointTelemetry) Finalize(command string, errCode int, err error) e if err != nil { extra.Error = err.Error() } + + extra.TemplateType = c.templateType params.Payload = extra // b, _ := json.MarshalIndent(params, "", " ") // log.Println(string(b))