@@ -16,21 +16,23 @@ import (
16
16
17
17
"github.com/lima-vm/lima/pkg/driver"
18
18
"github.com/lima-vm/lima/pkg/driver/external/client"
19
+ "github.com/lima-vm/lima/pkg/store"
19
20
"github.com/lima-vm/lima/pkg/store/filenames"
20
21
"github.com/lima-vm/lima/pkg/usrlocalsharelima"
21
22
"github.com/sirupsen/logrus"
22
23
)
23
24
24
25
type ExternalDriver struct {
25
- Name string
26
- Command * exec.Cmd
27
- Stdin io.WriteCloser
28
- Stdout io.ReadCloser
29
- Client * client.DriverClient // Client is the gRPC client for the external driver
30
- Path string
31
- ctx context.Context
32
- logger * logrus.Logger
33
- cancelFunc context.CancelFunc
26
+ Name string
27
+ InstanceName string
28
+ Command * exec.Cmd
29
+ Stdin io.WriteCloser
30
+ Stdout io.ReadCloser
31
+ Client * client.DriverClient // Client is the gRPC client for the external driver
32
+ Path string
33
+ ctx context.Context
34
+ logger * logrus.Logger
35
+ cancelFunc context.CancelFunc
34
36
}
35
37
36
38
type Registry struct {
@@ -46,8 +48,12 @@ func NewRegistry() *Registry {
46
48
}
47
49
}
48
50
49
- func (e * ExternalDriver ) Start () error {
51
+ func (e * ExternalDriver ) Start (instName string ) error {
50
52
e .logger .Infof ("Starting external driver at %s" , e .Path )
53
+ if instName == "" {
54
+ return fmt .Errorf ("instance name cannot be empty" )
55
+ }
56
+ e .InstanceName = instName
51
57
52
58
ctx , cancel := context .WithCancel (context .Background ())
53
59
cmd := exec .CommandContext (ctx , e .Path )
@@ -64,12 +70,12 @@ func (e *ExternalDriver) Start() error {
64
70
return fmt .Errorf ("failed to create stdout pipe: %w" , err )
65
71
}
66
72
67
- sharedDir , err := usrlocalsharelima . Dir ( )
73
+ instanceDir , err := store . InstanceDir ( e . InstanceName )
68
74
if err != nil {
69
75
cancel ()
70
- return fmt .Errorf ("failed to determine Lima share directory: %w" , err )
76
+ return fmt .Errorf ("failed to determine instance directory: %w" , err )
71
77
}
72
- logPath := filepath .Join (sharedDir , filenames .ExternalDriverStderrLog )
78
+ logPath := filepath .Join (instanceDir , filenames .ExternalDriverStderrLog )
73
79
logFile , err := os .OpenFile (logPath , os .O_CREATE | os .O_WRONLY | os .O_APPEND , 0644 )
74
80
if err != nil {
75
81
cancel ()
@@ -167,7 +173,7 @@ func (r *Registry) List() []string {
167
173
return names
168
174
}
169
175
170
- func (r * Registry ) Get (name string ) (driver.Driver , bool ) {
176
+ func (r * Registry ) Get (name , instName string ) (driver.Driver , bool ) {
171
177
r .mu .RLock ()
172
178
defer r .mu .RUnlock ()
173
179
@@ -178,12 +184,13 @@ func (r *Registry) Get(name string) (driver.Driver, bool) {
178
184
externalDriver .logger .Debugf ("Using external driver %q" , name )
179
185
if externalDriver .Client == nil || externalDriver .Command == nil || externalDriver .Command .Process == nil {
180
186
logrus .Infof ("Starting new instance of external driver %q" , name )
181
- if err := externalDriver .Start (); err != nil {
187
+ if err := externalDriver .Start (instName ); err != nil {
182
188
externalDriver .logger .Errorf ("Failed to start external driver %q: %v" , name , err )
183
189
return nil , false
184
190
}
185
191
} else {
186
192
logrus .Infof ("Reusing existing external driver %q instance" , name )
193
+ r .externalDrivers [name ].InstanceName = instName
187
194
}
188
195
189
196
return externalDriver .Client , true
0 commit comments