mirror of https://github.com/linkerd/linkerd2.git
Add informative error messages when there is no internet connection. (#11377)
When the Linkerd CLI is unable to access the internet, it will encounter a DNS error when trying to discover the latest Linkerd releases from linkerd.io. This change handles this DNS resolution error explicitly so that users receive a more informative error message. Fixes #11349 Signed-off-by: Dominik Táskai <dominik.taskai@leannet.eu> Co-authored-by: Dominik Táskai <dominik.taskai@leannet.eu> Co-authored-by: Oliver Gould <ver@buoyant.io>
This commit is contained in:
parent
74337f9d25
commit
64b66f9218
|
|
@ -1439,6 +1439,9 @@ func CheckProxyVersionsUpToDate(pods []corev1.Pod, versions version.Channels) er
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if versions.Empty() {
|
||||||
|
return errors.New("unable to determine version channel")
|
||||||
|
}
|
||||||
if len(outdatedPods) > 0 {
|
if len(outdatedPods) > 0 {
|
||||||
podList := strings.Join(outdatedPods, "\n")
|
podList := strings.Join(outdatedPods, "\n")
|
||||||
return fmt.Errorf("some proxies are not running the current version:\n%s", podList)
|
return fmt.Errorf("some proxies are not running the current version:\n%s", podList)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/linkerd/linkerd2/pkg/util"
|
"github.com/linkerd/linkerd2/pkg/util"
|
||||||
|
|
@ -44,6 +45,10 @@ func (c Channels) Match(actualVersion string) error {
|
||||||
return errors.New("actual version is empty")
|
return errors.New("actual version is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.Empty() {
|
||||||
|
return errors.New("unable to determine version channel")
|
||||||
|
}
|
||||||
|
|
||||||
actual, err := parseChannelVersion(actualVersion)
|
actual, err := parseChannelVersion(actualVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to parse actual version: %w", err)
|
return fmt.Errorf("failed to parse actual version: %w", err)
|
||||||
|
|
@ -58,6 +63,11 @@ func (c Channels) Match(actualVersion string) error {
|
||||||
return fmt.Errorf("unsupported version channel: %s", actualVersion)
|
return fmt.Errorf("unsupported version channel: %s", actualVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Determines whether there are any release channels stored in the struct.
|
||||||
|
func (c Channels) Empty() bool {
|
||||||
|
return len(c.array) == 0
|
||||||
|
}
|
||||||
|
|
||||||
// GetLatestVersions performs an online request to check for the latest Linkerd
|
// GetLatestVersions performs an online request to check for the latest Linkerd
|
||||||
// release channels.
|
// release channels.
|
||||||
func GetLatestVersions(ctx context.Context, uuid string, source string) (Channels, error) {
|
func GetLatestVersions(ctx context.Context, uuid string, source string) (Channels, error) {
|
||||||
|
|
@ -73,6 +83,10 @@ func getLatestVersions(ctx context.Context, client *http.Client, url string) (Ch
|
||||||
|
|
||||||
rsp, err := client.Do(req.WithContext(ctx))
|
rsp, err := client.Do(req.WithContext(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
var dnsError *net.DNSError
|
||||||
|
if errors.As(err, &dnsError) {
|
||||||
|
return Channels{}, fmt.Errorf("failed to resolve version check server: %s", url)
|
||||||
|
}
|
||||||
return Channels{}, err
|
return Channels{}, err
|
||||||
}
|
}
|
||||||
defer rsp.Body.Close()
|
defer rsp.Body.Close()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue