mirror of https://github.com/hashicorp/terraform
parent
5a3f80559c
commit
70191d22a6
@ -0,0 +1,81 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/hashicorp/go-checkpoint"
|
||||
"github.com/hashicorp/terraform/command"
|
||||
)
|
||||
|
||||
func init() {
|
||||
checkpointResult = make(chan *checkpoint.CheckResponse, 1)
|
||||
}
|
||||
|
||||
var checkpointResult chan *checkpoint.CheckResponse
|
||||
|
||||
// runCheckpoint runs a HashiCorp Checkpoint request. You can read about
|
||||
// Checkpoint here: https://github.com/hashicorp/go-checkpoint.
|
||||
func runCheckpoint(c *Config) {
|
||||
// If the user doesn't want checkpoint at all, then return.
|
||||
if c.DisableCheckpoint {
|
||||
log.Printf("[INFO] Checkpoint disabled. Not running.")
|
||||
checkpointResult <- nil
|
||||
return
|
||||
}
|
||||
|
||||
configDir, err := ConfigDir()
|
||||
if err != nil {
|
||||
log.Printf("[ERR] Checkpoint setup error: %s", err)
|
||||
checkpointResult <- nil
|
||||
return
|
||||
}
|
||||
|
||||
version := Version
|
||||
if VersionPrerelease != "" {
|
||||
version += fmt.Sprintf(".%s", VersionPrerelease)
|
||||
}
|
||||
|
||||
signaturePath := filepath.Join(configDir, "checkpoint_signature")
|
||||
if c.DisableCheckpointSignature {
|
||||
log.Printf("[INFO] Checkpoint signature disabled")
|
||||
signaturePath = ""
|
||||
}
|
||||
|
||||
resp, err := checkpoint.Check(&checkpoint.CheckParams{
|
||||
Product: "terraform",
|
||||
Version: version,
|
||||
SignatureFile: signaturePath,
|
||||
CacheFile: filepath.Join(configDir, "checkpoint_cache"),
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("[ERR] Checkpoint error: %s", err)
|
||||
resp = nil
|
||||
}
|
||||
|
||||
checkpointResult <- resp
|
||||
}
|
||||
|
||||
// commandVersionCheck implements command.VersionCheckFunc and is used
|
||||
// as the version checker.
|
||||
func commandVersionCheck() (command.VersionCheckInfo, error) {
|
||||
// Wait for the result to come through
|
||||
info := <-checkpointResult
|
||||
if info == nil {
|
||||
var zero command.VersionCheckInfo
|
||||
return zero, nil
|
||||
}
|
||||
|
||||
// Build the alerts that we may have received about our version
|
||||
alerts := make([]string, len(info.Alerts))
|
||||
for i, a := range info.Alerts {
|
||||
alerts[i] = a.Message
|
||||
}
|
||||
|
||||
return command.VersionCheckInfo{
|
||||
Outdated: info.Outdated,
|
||||
Latest: info.CurrentVersion,
|
||||
Alerts: alerts,
|
||||
}, nil
|
||||
}
|
||||
Loading…
Reference in new issue