Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/pkg/driverutil/instance.go
2611 views
1
// SPDX-FileCopyrightText: Copyright The Lima Authors
2
// SPDX-License-Identifier: Apache-2.0
3
4
package driverutil
5
6
import (
7
"fmt"
8
9
"github.com/sirupsen/logrus"
10
11
"github.com/lima-vm/lima/v2/pkg/driver"
12
"github.com/lima-vm/lima/v2/pkg/driver/external/server"
13
"github.com/lima-vm/lima/v2/pkg/limatype"
14
"github.com/lima-vm/lima/v2/pkg/registry"
15
)
16
17
// CreateConfiguredDriver creates a driver.ConfiguredDriver for the given instance.
18
func CreateConfiguredDriver(inst *limatype.Instance, sshLocalPort int) (*driver.ConfiguredDriver, error) {
19
limaDriver := inst.Config.VMType
20
extDriver, intDriver, exists := registry.Get(*limaDriver)
21
if !exists {
22
return nil, fmt.Errorf("unknown or unsupported VM type: %s", *limaDriver)
23
}
24
25
if extDriver != nil {
26
extDriver.Logger.Debugf("Using external driver %q", extDriver.Name)
27
if extDriver.Client == nil || extDriver.Command == nil {
28
logrus.Debugf("Starting new instance of external driver %q", extDriver.Name)
29
if err := server.Start(extDriver, inst.Name); err != nil {
30
extDriver.Logger.Errorf("Failed to start external driver %q: %v", extDriver.Name, err)
31
return nil, err
32
}
33
} else {
34
logrus.Debugf("Reusing existing external driver %q instance", extDriver.Name)
35
extDriver.InstanceName = inst.Name
36
}
37
38
if !extDriver.Client.Info().Features.StaticSSHPort {
39
inst.SSHLocalPort = sshLocalPort
40
}
41
return extDriver.Client.Configure(inst), nil
42
}
43
44
logrus.Debugf("Using internal driver %q", intDriver.Info().Name)
45
if !intDriver.Info().Features.StaticSSHPort {
46
inst.SSHLocalPort = sshLocalPort
47
}
48
return intDriver.Configure(inst), nil
49
}
50
51