TUN-1381: should tell you if you're on the latest version rather than just exiting silently
This commit is contained in:
parent
99713e3439
commit
e3aed15c08
|
@ -30,45 +30,56 @@ EKx0BZogHSor9Wy5VztdFaAaVbsJiCbO
|
||||||
logger = log.CreateLogger()
|
logger = log.CreateLogger()
|
||||||
)
|
)
|
||||||
|
|
||||||
type ReleaseInfo struct {
|
type UpdateOutcome struct {
|
||||||
Updated bool
|
Updated bool
|
||||||
Version string
|
Version string
|
||||||
Error error
|
Error error
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkForUpdates() ReleaseInfo {
|
func (uo *UpdateOutcome) noUpdate() bool {
|
||||||
|
return uo.Error != nil && uo.Updated == false
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkForUpdateAndApply() UpdateOutcome {
|
||||||
var opts equinox.Options
|
var opts equinox.Options
|
||||||
if err := opts.SetPublicKeyPEM(publicKey); err != nil {
|
if err := opts.SetPublicKeyPEM(publicKey); err != nil {
|
||||||
return ReleaseInfo{Error: err}
|
return UpdateOutcome{Error: err}
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := equinox.Check(appID, opts)
|
resp, err := equinox.Check(appID, opts)
|
||||||
switch {
|
switch {
|
||||||
case err == equinox.NotAvailableErr:
|
case err == equinox.NotAvailableErr:
|
||||||
return ReleaseInfo{}
|
return UpdateOutcome{}
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return ReleaseInfo{Error: err}
|
return UpdateOutcome{Error: err}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = resp.Apply()
|
err = resp.Apply()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ReleaseInfo{Error: err}
|
return UpdateOutcome{Error: err}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ReleaseInfo{Updated: true, Version: resp.ReleaseVersion}
|
return UpdateOutcome{Updated: true, Version: resp.ReleaseVersion}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Update(_ *cli.Context) error {
|
func Update(_ *cli.Context) error {
|
||||||
if updateApplied() {
|
updateOutcome := loggedUpdate()
|
||||||
os.Exit(64)
|
if updateOutcome.Error != nil {
|
||||||
|
os.Exit(10)
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
if updateOutcome.noUpdate() {
|
||||||
|
logger.Infof("cloudflared is up to date (%s)", updateOutcome.Version)
|
||||||
|
}
|
||||||
|
|
||||||
|
return updateOutcome.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
func Autoupdate(freq time.Duration, listeners *gracenet.Net, shutdownC chan struct{}) error {
|
func Autoupdate(freq time.Duration, listeners *gracenet.Net, shutdownC chan struct{}) error {
|
||||||
tickC := time.Tick(freq)
|
tickC := time.Tick(freq)
|
||||||
for {
|
for {
|
||||||
if updateApplied() {
|
updateOutcome := loggedUpdate()
|
||||||
|
if updateOutcome.Updated {
|
||||||
os.Args = append(os.Args, "--is-autoupdated=true")
|
os.Args = append(os.Args, "--is-autoupdated=true")
|
||||||
pid, err := listeners.StartProcess()
|
pid, err := listeners.StartProcess()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -88,16 +99,17 @@ func Autoupdate(freq time.Duration, listeners *gracenet.Net, shutdownC chan stru
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateApplied() bool {
|
// Checks for an update and applies it if one is available
|
||||||
releaseInfo := checkForUpdates()
|
func loggedUpdate() UpdateOutcome {
|
||||||
if releaseInfo.Updated {
|
updateOutcome := checkForUpdateAndApply()
|
||||||
logger.Infof("Updated to version %s", releaseInfo.Version)
|
if updateOutcome.Updated {
|
||||||
return true
|
logger.Infof("cloudflared has been updated to version %s", updateOutcome.Version)
|
||||||
}
|
}
|
||||||
if releaseInfo.Error != nil {
|
if updateOutcome.Error != nil {
|
||||||
logger.WithError(releaseInfo.Error).Error("Update check failed")
|
logger.WithError(updateOutcome.Error).Error("update check failed")
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
|
return updateOutcome
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsAutoupdateEnabled(c *cli.Context) bool {
|
func IsAutoupdateEnabled(c *cli.Context) bool {
|
||||||
|
|
Loading…
Reference in New Issue