mirror of https://github.com/docker/docs.git
				
				
				
			FIX #2677 better error message if swarm is down
Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
		
							parent
							
								
									cef64513cb
								
							
						
					
					
						commit
						6462e7ecfa
					
				| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
package check
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"strings"
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +13,7 @@ import (
 | 
			
		|||
 | 
			
		||||
var (
 | 
			
		||||
	DefaultConnChecker ConnChecker
 | 
			
		||||
	ErrSwarmNotStarted = errors.New("Connection to Swarm cannot be checked but the certs are valid. Maybe swarm is not started")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
| 
						 | 
				
			
			@ -40,17 +42,18 @@ type MachineConnChecker struct{}
 | 
			
		|||
func (mcc *MachineConnChecker) Check(h *host.Host, swarm bool) (string, *auth.Options, error) {
 | 
			
		||||
	dockerHost, err := h.Driver.GetURL()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", &auth.Options{}, fmt.Errorf("Error getting driver URL: %s", err)
 | 
			
		||||
		return "", &auth.Options{}, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dockerURL := dockerHost
 | 
			
		||||
	if swarm {
 | 
			
		||||
		dockerHost, err = parseSwarm(dockerHost, h)
 | 
			
		||||
		dockerURL, err = parseSwarm(dockerHost, h)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return "", &auth.Options{}, fmt.Errorf("Error parsing swarm: %s", err)
 | 
			
		||||
			return "", &auth.Options{}, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	u, err := url.Parse(dockerHost)
 | 
			
		||||
	u, err := url.Parse(dockerURL)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", &auth.Options{}, fmt.Errorf("Error parsing URL: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -58,10 +61,19 @@ func (mcc *MachineConnChecker) Check(h *host.Host, swarm bool) (string, *auth.Op
 | 
			
		|||
	authOptions := h.HostOptions.AuthOptions
 | 
			
		||||
 | 
			
		||||
	if err := checkCert(u.Host, authOptions); err != nil {
 | 
			
		||||
		if swarm {
 | 
			
		||||
			// Connection to the swarm port cannot be checked. Maybe it's just the swarm containers that are down
 | 
			
		||||
			// TODO: check the containers and restart them
 | 
			
		||||
			// Let's check the non-swarm connection to give a better error message to the user.
 | 
			
		||||
			if _, _, err := mcc.Check(h, false); err == nil {
 | 
			
		||||
				return "", &auth.Options{}, ErrSwarmNotStarted
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return "", &auth.Options{}, fmt.Errorf("Error checking and/or regenerating the certs: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return dockerHost, authOptions, nil
 | 
			
		||||
	return dockerURL, authOptions, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func checkCert(hostURL string, authOptions *auth.Options) error {
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +93,7 @@ func parseSwarm(hostURL string, h *host.Host) (string, error) {
 | 
			
		|||
	swarmOptions := h.HostOptions.SwarmOptions
 | 
			
		||||
 | 
			
		||||
	if !swarmOptions.Master {
 | 
			
		||||
		return "", fmt.Errorf("Error: %s is not a swarm master.  The --swarm flag is intended for use with swarm masters", h.Name)
 | 
			
		||||
		return "", fmt.Errorf("%q is not a swarm master. The --swarm flag is intended for use with swarm masters", h.Name)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	u, err := url.Parse(swarmOptions.Host)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue