1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

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 <feldsam@gmail.com>
(cherry picked from commit e36b900111c2f4caaa6d2d0988f237311c665df8)
(cherry picked from commit 5099aaedba857fa436527a026b3f3bf95a2b9829)
This commit is contained in:
Kristian Feldsam 2021-05-17 11:12:29 +02:00 committed by Ruben S. Montero
parent 0f110b2a36
commit 06247d1098
No known key found for this signature in database
GPG Key ID: A0CEA6FA880A1D87
2 changed files with 71 additions and 50 deletions

View File

@ -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",

View File

@ -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)