diff --git a/drivers/amazonec2/amazonec2.go b/drivers/amazonec2/amazonec2.go index ab5c271d4d..e121776ac4 100644 --- a/drivers/amazonec2/amazonec2.go +++ b/drivers/amazonec2/amazonec2.go @@ -603,6 +603,10 @@ func (d *Driver) Create() error { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + ip, err := d.GetIP() if err != nil { return "", err @@ -610,6 +614,7 @@ func (d *Driver) GetURL() (string, error) { if ip == "" { return "", nil } + return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, strconv.Itoa(dockerPort))), nil } diff --git a/drivers/azure/azure.go b/drivers/azure/azure.go index bc720f2c1a..d94a8a5dbe 100644 --- a/drivers/azure/azure.go +++ b/drivers/azure/azure.go @@ -238,6 +238,10 @@ func (d *Driver) Create() error { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + url := fmt.Sprintf("tcp://%s:%v", d.getHostname(), d.DockerPort) return url, nil } diff --git a/drivers/digitalocean/digitalocean.go b/drivers/digitalocean/digitalocean.go index ae2bb3a577..b2d8782da0 100644 --- a/drivers/digitalocean/digitalocean.go +++ b/drivers/digitalocean/digitalocean.go @@ -255,10 +255,15 @@ func (d *Driver) createSSHKey() (*godo.Key, error) { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + ip, err := d.GetIP() if err != nil { return "", err } + return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, "2376")), nil } diff --git a/drivers/exoscale/exoscale.go b/drivers/exoscale/exoscale.go index 548af099f2..dc88172f66 100644 --- a/drivers/exoscale/exoscale.go +++ b/drivers/exoscale/exoscale.go @@ -143,10 +143,15 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + ip, err := d.GetIP() if err != nil { return "", err } + return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, "2376")), nil } diff --git a/drivers/generic/generic.go b/drivers/generic/generic.go index 918ea9d45b..40b1267d6e 100644 --- a/drivers/generic/generic.go +++ b/drivers/generic/generic.go @@ -133,10 +133,15 @@ func (d *Driver) Create() error { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + ip, err := d.GetIP() if err != nil { return "", err } + return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, "2376")), nil } diff --git a/drivers/openstack/openstack.go b/drivers/openstack/openstack.go index 8c89f9f0d8..3b31e8a3f7 100644 --- a/drivers/openstack/openstack.go +++ b/drivers/openstack/openstack.go @@ -276,6 +276,10 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + ip, err := d.GetIP() if err != nil { return "", err @@ -283,6 +287,7 @@ func (d *Driver) GetURL() (string, error) { if ip == "" { return "", nil } + return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, "2376")), nil } diff --git a/drivers/softlayer/driver.go b/drivers/softlayer/driver.go index dec96a6648..90b7b14767 100644 --- a/drivers/softlayer/driver.go +++ b/drivers/softlayer/driver.go @@ -257,6 +257,10 @@ func (d *Driver) DriverName() string { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + ip, err := d.GetIP() if err != nil { return "", err @@ -264,6 +268,7 @@ func (d *Driver) GetURL() (string, error) { if ip == "" { return "", nil } + return "tcp://" + net.JoinHostPort(ip, "2376"), nil } diff --git a/drivers/vmwarevcloudair/vcloudair.go b/drivers/vmwarevcloudair/vcloudair.go index fbef99d216..b4ebd730a6 100644 --- a/drivers/vmwarevcloudair/vcloudair.go +++ b/drivers/vmwarevcloudair/vcloudair.go @@ -196,6 +196,10 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { } func (d *Driver) GetURL() (string, error) { + if err := drivers.MustBeRunning(d); err != nil { + return "", err + } + return fmt.Sprintf("tcp://%s", net.JoinHostPort(d.PublicIP, strconv.Itoa(d.DockerPort))), nil } diff --git a/libmachine/drivers/drivers.go b/libmachine/drivers/drivers.go index 56358f7764..dbc37d0e12 100644 --- a/libmachine/drivers/drivers.go +++ b/libmachine/drivers/drivers.go @@ -93,3 +93,17 @@ func MachineInState(d Driver, desiredState state.State) func() bool { return false } } + +// MustBeRunning will return an error if the machine is not in a running state. +func MustBeRunning(d Driver) error { + s, err := d.GetState() + if err != nil { + return err + } + + if s != state.Running { + return ErrHostIsNotRunning + } + + return nil +}