|
|
|
|
@ -8,6 +8,7 @@ import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"log"
|
|
|
|
|
"runtime"
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/hcl/v2"
|
|
|
|
|
"github.com/hashicorp/packer-plugin-sdk/didyoumean"
|
|
|
|
|
@ -77,6 +78,8 @@ func (cfg *PackerConfig) DetectPluginBinaries() hcl.Diagnostics {
|
|
|
|
|
return diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uninstalledPlugins := map[string]string{}
|
|
|
|
|
|
|
|
|
|
for _, pluginRequirement := range pluginReqs {
|
|
|
|
|
sortedInstalls, err := pluginRequirement.ListInstallations(opts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
@ -88,11 +91,7 @@ func (cfg *PackerConfig) DetectPluginBinaries() hcl.Diagnostics {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
if len(sortedInstalls) == 0 {
|
|
|
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
|
|
|
Severity: hcl.DiagError,
|
|
|
|
|
Summary: fmt.Sprintf("no plugin installed for %s %v", pluginRequirement.Identifier, pluginRequirement.VersionConstraints.String()),
|
|
|
|
|
Detail: "Did you run packer init for this project ?",
|
|
|
|
|
})
|
|
|
|
|
uninstalledPlugins[pluginRequirement.Identifier.String()] = pluginRequirement.VersionConstraints.String()
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
log.Printf("[TRACE] Found the following %q installations: %v", pluginRequirement.Identifier, sortedInstalls)
|
|
|
|
|
@ -108,6 +107,20 @@ func (cfg *PackerConfig) DetectPluginBinaries() hcl.Diagnostics {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(uninstalledPlugins) > 0 {
|
|
|
|
|
detailMessage := &strings.Builder{}
|
|
|
|
|
detailMessage.WriteString("The following plugins are required, but not installed:\n\n")
|
|
|
|
|
for pluginName, pluginVersion := range uninstalledPlugins {
|
|
|
|
|
fmt.Fprintf(detailMessage, "* %s %s\n", pluginName, pluginVersion)
|
|
|
|
|
}
|
|
|
|
|
detailMessage.WriteString("\nDid you run packer init for this project ?")
|
|
|
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
|
|
|
Severity: hcl.DiagError,
|
|
|
|
|
Summary: "Missing plugins",
|
|
|
|
|
Detail: detailMessage.String(),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|