From 06247d109867760d4d5d10dc875182b6cb439bf9 Mon Sep 17 00:00:00 2001 From: Kristian Feldsam Date: Mon, 17 May 2021 11:12:29 +0200 Subject: [PATCH] B #5301: docker-machine enhancements (#5303) - fixed issue with resume vm in pending state - enhanced GetIP method to minimize API call - GetURL return address only if machine is running - code cleanup Signed-off-by: Kristian Feldsam (cherry picked from commit e36b900111c2f4caaa6d2d0988f237311c665df8) (cherry picked from commit 5099aaedba857fa436527a026b3f3bf95a2b9829) --- .../src/docker_machine/Gopkg.lock | 22 ++++- .../src/docker_machine/opennebula.go | 99 ++++++++++--------- 2 files changed, 71 insertions(+), 50 deletions(-) diff --git a/src/docker_machine/src/docker_machine/Gopkg.lock b/src/docker_machine/src/docker_machine/Gopkg.lock index 6eca1a3100..b4fcbf0d2e 100644 --- a/src/docker_machine/src/docker_machine/Gopkg.lock +++ b/src/docker_machine/src/docker_machine/Gopkg.lock @@ -14,7 +14,7 @@ [[projects]] branch = "master" - digest = "1:b840a9bf57916f264fe100c8875f9c331656e758bddd3c6ea55116e7274eaadd" + digest = "1:159c6f296acc53e6aa6892335c9105fd7956de28940a0035365fad48f75748f9" name = "github.com/OpenNebula/one" packages = [ "src/oca/go/src/goca", @@ -23,21 +23,35 @@ "src/oca/go/src/goca/parameters", "src/oca/go/src/goca/schemas/acl", "src/oca/go/src/goca/schemas/cluster", + "src/oca/go/src/goca/schemas/cluster/keys", "src/oca/go/src/goca/schemas/datastore", + "src/oca/go/src/goca/schemas/datastore/keys", "src/oca/go/src/goca/schemas/document", "src/oca/go/src/goca/schemas/group", + "src/oca/go/src/goca/schemas/hook", + "src/oca/go/src/goca/schemas/hook/keys", "src/oca/go/src/goca/schemas/host", + "src/oca/go/src/goca/schemas/host/keys", "src/oca/go/src/goca/schemas/image", + "src/oca/go/src/goca/schemas/image/keys", "src/oca/go/src/goca/schemas/marketplace", + "src/oca/go/src/goca/schemas/marketplace/keys", "src/oca/go/src/goca/schemas/marketplaceapp", + "src/oca/go/src/goca/schemas/marketplaceapp/keys", "src/oca/go/src/goca/schemas/securitygroup", + "src/oca/go/src/goca/schemas/securitygroup/keys", + "src/oca/go/src/goca/schemas/service", + "src/oca/go/src/goca/schemas/service_template", "src/oca/go/src/goca/schemas/shared", "src/oca/go/src/goca/schemas/template", "src/oca/go/src/goca/schemas/user", "src/oca/go/src/goca/schemas/vdc", "src/oca/go/src/goca/schemas/virtualnetwork", + "src/oca/go/src/goca/schemas/virtualnetwork/keys", "src/oca/go/src/goca/schemas/virtualrouter", + "src/oca/go/src/goca/schemas/virtualrouter/keys", "src/oca/go/src/goca/schemas/vm", + "src/oca/go/src/goca/schemas/vm/keys", "src/oca/go/src/goca/schemas/vmgroup", "src/oca/go/src/goca/schemas/vntemplate", "src/oca/go/src/goca/schemas/zone", @@ -88,7 +102,7 @@ branch = "master" digest = "1:07c2b6d639ff6288a4c1ee3f8525d8330571588464a22e3173e6f26dc6f1278c" name = "github.com/kolo/xmlrpc" - packages = [] + packages = ["."] pruneopts = "T" revision = "07c4ee3fd1817e1a90254d5b80f215b36b78f800" @@ -151,7 +165,9 @@ analyzer-version = 1 input-imports = [ "github.com/OpenNebula/one/src/oca/go/src/goca", - "github.com/OpenNebula/one/src/oca/go/src/goca/dynamic", + "github.com/OpenNebula/one/src/oca/go/src/goca/schemas/shared", + "github.com/OpenNebula/one/src/oca/go/src/goca/schemas/vm", + "github.com/OpenNebula/one/src/oca/go/src/goca/schemas/vm/keys", "github.com/docker/machine/libmachine/drivers", "github.com/docker/machine/libmachine/drivers/plugin", "github.com/docker/machine/libmachine/log", diff --git a/src/docker_machine/src/docker_machine/opennebula.go b/src/docker_machine/src/docker_machine/opennebula.go index 21dba77920..34b265032d 100644 --- a/src/docker_machine/src/docker_machine/opennebula.go +++ b/src/docker_machine/src/docker_machine/opennebula.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "io/ioutil" + "net" "strconv" "time" @@ -46,7 +47,6 @@ type Driver struct { } const ( - defaultTimeout = 1 * time.Second defaultSSHUser = "docker" defaultCPU = "1" defaultVCPU = "1" @@ -356,14 +356,6 @@ func (d *Driver) GetSSHHostname() (string, error) { return d.GetIP() } -func (d *Driver) GetSSHUsername() string { - return d.SSHUser -} - -func (d *Driver) PreCreateCheck() error { - return nil -} - func (d *Driver) Create() error { var err error @@ -372,7 +364,7 @@ func (d *Driver) Create() error { // build config and set the xmlrpc client controller := d.getController() - log.Infof("Creating SSH key..") + log.Infof("Creating SSH key...") if err := ssh.GenerateSSHKey(d.GetSSHKeyPath()); err != nil { return err } @@ -469,7 +461,7 @@ func (d *Driver) Create() error { template.AddB64Ctx(keys.StartScriptB64, contextScript) // Instantiate - log.Infof("Starting VM..") + log.Infof("Starting VM...") // Template has been specified if d.TemplateName != "" || d.TemplateID != "" { @@ -501,33 +493,43 @@ func (d *Driver) Create() error { d.MachineId = instanceID - if d.IPAddress, err = d.GetIP(); err != nil { - return err - } - return d.Start() } 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:2376", ip), nil + if ip == "" { + return "", nil + } + + return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, "2376")), nil } func (d *Driver) GetIP() (string, error) { + if d.IPAddress != "" { + return d.IPAddress, nil + } + + log.Debug("Looking for the IP address...") + controller := d.getController() var err2 error - var vm_id int + var vmId int if d.MachineId == 0 { - vm_id, err2 = controller.VMs().ByName(d.MachineName) + vmId, err2 = controller.VMs().ByName(d.MachineName) if err2 != nil { return "", err2 } - d.MachineId = vm_id + d.MachineId = vmId } vm, err := controller.VM(d.MachineId).Info(false) @@ -561,14 +563,14 @@ func (d *Driver) GetState() (state.State, error) { controller := d.getController() var err2 error - var vm_id int + var vmId int if d.MachineId == 0 { - vm_id, err2 = controller.VMs().ByName(d.MachineName) + vmId, err2 = controller.VMs().ByName(d.MachineName) if err2 != nil { return state.None, err2 } - d.MachineId = vm_id + d.MachineId = vmId } vm, err := controller.VM(d.MachineId).Info(false) @@ -683,22 +685,25 @@ func (d *Driver) GetState() (state.State, error) { } func (d *Driver) Start() error { - controller := d.getController() - var err error - var vm_id int - if d.MachineId == 0 { - vm_id, err = controller.VMs().ByName(d.MachineName) - if err != nil { - return err + if drivers.MachineInState(d, state.Stopped)() { + controller := d.getController() + + var vmId int + + if d.MachineId == 0 { + vmId, err = controller.VMs().ByName(d.MachineName) + if err != nil { + return err + } + d.MachineId = vmId } - d.MachineId = vm_id + + vm := controller.VM(d.MachineId) + vm.Resume() } - - vm := controller.VM(d.MachineId) - vm.Resume() - + s := state.None retries, _ := strconv.Atoi(d.StartRetries) for retry := 0; retry < retries && s != state.Running; retry++ { @@ -721,7 +726,7 @@ func (d *Driver) Start() error { } } - log.Infof("Waiting for SSH..") + log.Infof("Waiting for SSH...") // Wait for SSH over NAT to be available before returning to user return drivers.WaitForSSH(d) @@ -731,14 +736,14 @@ func (d *Driver) Stop() error { controller := d.getController() var err2 error - var vm_id int + var vmId int if d.MachineId == 0 { - vm_id, err2 = controller.VMs().ByName(d.MachineName) + vmId, err2 = controller.VMs().ByName(d.MachineName) if err2 != nil { return err2 } - d.MachineId = vm_id + d.MachineId = vmId } vm := controller.VM(d.MachineId) @@ -754,14 +759,14 @@ func (d *Driver) Remove() error { controller := d.getController() var err2 error - var vm_id int + var vmId int if d.MachineId == 0 { - vm_id, err2 = controller.VMs().ByName(d.MachineName) + vmId, err2 = controller.VMs().ByName(d.MachineName) if err2 != nil { return err2 } - d.MachineId = vm_id + d.MachineId = vmId } vm := controller.VM(d.MachineId) @@ -777,14 +782,14 @@ func (d *Driver) Restart() error { controller := d.getController() var err2 error - var vm_id int + var vmId int if d.MachineId == 0 { - vm_id, err2 = controller.VMs().ByName(d.MachineName) + vmId, err2 = controller.VMs().ByName(d.MachineName) if err2 != nil { return err2 } - d.MachineId = vm_id + d.MachineId = vmId } vm := controller.VM(d.MachineId) @@ -800,14 +805,14 @@ func (d *Driver) Kill() error { controller := d.getController() var err2 error - var vm_id int + var vmId int if d.MachineId == 0 { - vm_id, err2 = controller.VMs().ByName(d.MachineName) + vmId, err2 = controller.VMs().ByName(d.MachineName) if err2 != nil { return err2 } - d.MachineId = vm_id + d.MachineId = vmId } vm := controller.VM(d.MachineId)