packer: track template type in spans

The template type for a builder, provisioner, post-processor or
datasource was not tracked with telemetry data.

This commit adds the infrastructure to track this, bumping the schema
for non-crashes to `beta/packer/6' at the same time.
pull/12319/head
Lucas Bajolet 3 years ago
parent 7ff112a313
commit e7dbd4de05

@ -120,9 +120,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

@ -18,22 +18,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 {
@ -57,6 +67,7 @@ func NewCheckpointReporter(disableSignature bool) *CheckpointTelemetry {
return &CheckpointTelemetry{
signatureFile: signatureFile,
startTime: time.Now().UTC(),
templateType: UnknownTemplate,
}
}
@ -108,6 +119,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
@ -124,6 +144,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))

Loading…
Cancel
Save