From 3739e4d067091b152737926cdf67c282677a0157 Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Tue, 21 Apr 2015 21:39:06 -0400 Subject: [PATCH] Harmonizing drivers so IPAddress property is kept up-to-date Signed-off-by: Dave Henderson --- commands/inspect_test.go | 2 +- drivers/azure/azure.go | 22 ++++++++++++++++++---- drivers/google/google.go | 13 +++++++++++-- drivers/hyperv/hyperv_windows.go | 11 ++++++++++- drivers/none/none.go | 12 ++++++++++-- drivers/openstack/openstack.go | 10 +++++----- drivers/virtualbox/virtualbox.go | 7 ++++++- drivers/vmwarevcloudair/vcloudair.go | 20 +++++++++++--------- drivers/vmwarevsphere/vsphere.go | 8 +++++++- 9 files changed, 79 insertions(+), 26 deletions(-) diff --git a/commands/inspect_test.go b/commands/inspect_test.go index 0386d6274d..b0853e3c72 100644 --- a/commands/inspect_test.go +++ b/commands/inspect_test.go @@ -29,7 +29,7 @@ func TestCmdInspectFormat(t *testing.T) { assert.Equal(t, "\"none\"", actual) actual, _ = runInspectCommand(t, []string{"--format", "{{prettyjson .Driver}}"}) - assert.Equal(t, "{\n \"URL\": \"unix:///var/run/docker.sock\"\n}", actual) + assert.Equal(t, "{\n \"IPAddress\": \"\",\n \"URL\": \"unix:///var/run/docker.sock\"\n}", actual) } func runInspectCommand(t *testing.T, args []string) (string, *libmachine.Host) { diff --git a/drivers/azure/azure.go b/drivers/azure/azure.go index 0dee97b62e..9c94566499 100644 --- a/drivers/azure/azure.go +++ b/drivers/azure/azure.go @@ -21,6 +21,7 @@ import ( ) type Driver struct { + IPAddress string MachineName string SubscriptionID string SubscriptionCert string @@ -312,7 +313,9 @@ func (d *Driver) Start() error { return err } - return nil + var err error + d.IPAddress, err = d.GetIP() + return err } func (d *Driver) Stop() error { @@ -329,7 +332,12 @@ func (d *Driver) Stop() error { log.Debugf("stopping %s", d.MachineName) - return vmClient.ShutdownRole(d.MachineName, d.MachineName, d.MachineName) + if err := vmClient.ShutdownRole(d.MachineName, d.MachineName, d.MachineName); err != nil { + return err + } + + d.IPAddress = "" + return nil } func (d *Driver) Remove() error { @@ -364,7 +372,8 @@ func (d *Driver) Restart() error { return err } - return nil + d.IPAddress, err = d.GetIP() + return err } func (d *Driver) Kill() error { @@ -381,7 +390,12 @@ func (d *Driver) Kill() error { log.Debugf("killing %s", d.MachineName) - return vmClient.ShutdownRole(d.MachineName, d.MachineName, d.MachineName) + if err := vmClient.ShutdownRole(d.MachineName, d.MachineName, d.MachineName); err != nil { + return err + } + + d.IPAddress = "" + return nil } func generateVMName() string { diff --git a/drivers/google/google.go b/drivers/google/google.go index b5863ca9ad..c5c1f7c66c 100644 --- a/drivers/google/google.go +++ b/drivers/google/google.go @@ -14,6 +14,7 @@ import ( // Driver is a struct compatible with the docker.hosts.drivers.Driver interface. type Driver struct { + IPAddress string MachineName string SSHUser string SSHPort int @@ -250,7 +251,11 @@ func (d *Driver) Start() error { if err != nil { return err } - return c.createInstance(d) + if err = c.createInstance(d); err != nil { + return err + } + d.IPAddress, err = d.GetIP() + return err } // Stop deletes the GCE instance, but keeps the disk. @@ -259,7 +264,11 @@ func (d *Driver) Stop() error { if err != nil { return err } - return c.deleteInstance() + if err = c.deleteInstance(); err != nil { + return err + } + d.IPAddress = "" + return nil } // Remove deletes the GCE instance and the disk. diff --git a/drivers/hyperv/hyperv_windows.go b/drivers/hyperv/hyperv_windows.go index 1d719392c0..efcb4fd636 100644 --- a/drivers/hyperv/hyperv_windows.go +++ b/drivers/hyperv/hyperv_windows.go @@ -19,6 +19,7 @@ import ( ) type Driver struct { + IPAddress string SSHUser string SSHPort int storePath string @@ -334,7 +335,13 @@ func (d *Driver) Start() error { if err != nil { return err } - return d.wait() + + if err := d.wait(); err != nil { + return err + } + + d.IPAddress, err = d.GetIP() + return err } func (d *Driver) Stop() error { @@ -356,6 +363,7 @@ func (d *Driver) Stop() error { break } } + d.IPAddress = "" return nil } @@ -406,6 +414,7 @@ func (d *Driver) Kill() error { break } } + d.IPAddress = "" return nil } diff --git a/drivers/none/none.go b/drivers/none/none.go index e923aa7d2d..b6a92f876e 100644 --- a/drivers/none/none.go +++ b/drivers/none/none.go @@ -2,6 +2,7 @@ package none import ( "fmt" + neturl "net/url" "github.com/codegangsta/cli" "github.com/docker/machine/drivers" @@ -13,7 +14,8 @@ import ( // connect to existing Docker hosts by specifying the URL of the host as // an option. type Driver struct { - URL string + IPAddress string + URL string } func init() { @@ -54,7 +56,7 @@ func (d *Driver) DriverName() string { } func (d *Driver) GetIP() (string, error) { - return "", nil + return d.IPAddress, nil } func (d *Driver) GetMachineName() string { @@ -113,6 +115,12 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { } d.URL = url + u, err := neturl.Parse(url) + if err != nil { + return err + } + + d.IPAddress = u.Host return nil } diff --git a/drivers/openstack/openstack.go b/drivers/openstack/openstack.go index 3349b33264..8aed28c113 100644 --- a/drivers/openstack/openstack.go +++ b/drivers/openstack/openstack.go @@ -41,7 +41,7 @@ type Driver struct { FloatingIpPoolId string SSHUser string SSHPort int - Ip string + IPAddress string CaCertPath string PrivateKeyPath string storePath string @@ -278,8 +278,8 @@ func (d *Driver) GetURL() (string, error) { } func (d *Driver) GetIP() (string, error) { - if d.Ip != "" { - return d.Ip, nil + if d.IPAddress != "" { + return d.IPAddress, nil } log.WithField("MachineId", d.MachineId).Debug("Looking for the IP address...") @@ -663,7 +663,7 @@ func (d *Driver) assignFloatingIp() error { if err := d.client.AssignFloatingIP(d, floatingIp, portId); err != nil { return err } - d.Ip = floatingIp.Ip + d.IPAddress = floatingIp.Ip return nil } @@ -680,7 +680,7 @@ func (d *Driver) lookForIpAddress() error { if err != nil { return err } - d.Ip = ip + d.IPAddress = ip log.WithFields(log.Fields{ "IP": ip, "MachineId": d.MachineId, diff --git a/drivers/virtualbox/virtualbox.go b/drivers/virtualbox/virtualbox.go index 109090fc82..c1acf6f018 100644 --- a/drivers/virtualbox/virtualbox.go +++ b/drivers/virtualbox/virtualbox.go @@ -30,6 +30,7 @@ const ( ) type Driver struct { + IPAddress string CPU int MachineName string SSHUser string @@ -392,7 +393,8 @@ func (d *Driver) Start() error { log.Infof("VM not in restartable state") } - return nil + d.IPAddress, err = d.GetIP() + return err } func (d *Driver) Stop() error { @@ -410,6 +412,9 @@ func (d *Driver) Stop() error { break } } + + d.IPAddress = "" + return nil } diff --git a/drivers/vmwarevcloudair/vcloudair.go b/drivers/vmwarevcloudair/vcloudair.go index 8ee2ce6b86..54f9a9e29c 100644 --- a/drivers/vmwarevcloudair/vcloudair.go +++ b/drivers/vmwarevcloudair/vcloudair.go @@ -22,6 +22,7 @@ import ( ) type Driver struct { + IPAddress string UserName string UserPassword string ComputeID string @@ -418,8 +419,8 @@ func (d *Driver) Create() error { // Set VAppID with ID of the created VApp d.VAppID = vapp.VApp.ID - return nil - + d.IPAddress, err = d.GetIP() + return err } func (d *Driver) Remove() error { @@ -497,7 +498,6 @@ func (d *Driver) Remove() error { } return nil - } func (d *Driver) Start() error { @@ -540,8 +540,8 @@ func (d *Driver) Start() error { return err } - return nil - + d.IPAddress, err = d.GetIP() + return err } func (d *Driver) Stop() error { @@ -584,8 +584,9 @@ func (d *Driver) Stop() error { return err } - return nil + d.IPAddress = "" + return nil } func (d *Driver) Restart() error { @@ -640,8 +641,8 @@ func (d *Driver) Restart() error { return err } - return nil - + d.IPAddress, err = d.GetIP() + return err } func (d *Driver) Kill() error { @@ -683,8 +684,9 @@ func (d *Driver) Kill() error { return err } - return nil + d.IPAddress = "" + return nil } // Helpers diff --git a/drivers/vmwarevsphere/vsphere.go b/drivers/vmwarevsphere/vsphere.go index c4b6ce1b0a..a9aea5577c 100644 --- a/drivers/vmwarevsphere/vsphere.go +++ b/drivers/vmwarevsphere/vsphere.go @@ -37,6 +37,7 @@ const ( ) type Driver struct { + IPAddress string MachineName string SSHUser string SSHPort int @@ -406,7 +407,8 @@ func (d *Driver) Start() error { return err } - return nil + d.IPAddress, err = d.GetIP() + return err } return errors.NewInvalidStateError(d.MachineName) } @@ -417,6 +419,8 @@ func (d *Driver) Stop() error { return err } + d.IPAddress = "" + return nil } @@ -474,6 +478,8 @@ func (d *Driver) Kill() error { return err } + d.IPAddress = "" + return nil }