@@ -111,19 +111,20 @@ func setupEnv(instConfigEnv map[string]string, propagateProxyEnv bool, slirpGate
111
111
return env , nil
112
112
}
113
113
114
- func GenerateISO9660 ( instDir , name string , instConfig * limayaml.LimaYAML , udpDNSLocalPort , tcpDNSLocalPort int , nerdctlArchive string , vsockPort int , virtioPort string ) error {
114
+ func templateArgs ( bootScripts bool , instDir , name string , instConfig * limayaml.LimaYAML , udpDNSLocalPort , tcpDNSLocalPort , vsockPort int , virtioPort string ) ( * TemplateArgs , error ) {
115
115
if err := limayaml .Validate (instConfig , false ); err != nil {
116
- return err
116
+ return nil , err
117
117
}
118
118
u , err := osutil .LimaUser (true )
119
119
if err != nil {
120
- return err
120
+ return nil , err
121
121
}
122
122
uid , err := strconv .Atoi (u .Uid )
123
123
if err != nil {
124
- return err
124
+ return nil , err
125
125
}
126
126
args := TemplateArgs {
127
+ BootScripts : bootScripts ,
127
128
Name : name ,
128
129
User : u .Username ,
129
130
UID : uid ,
@@ -150,14 +151,14 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
150
151
usernetName := instConfig .Networks [firstUsernetIndex ].Lima
151
152
subnet , err = usernet .Subnet (usernetName )
152
153
if err != nil {
153
- return err
154
+ return nil , err
154
155
}
155
156
args .SlirpGateway = usernet .GatewayIP (subnet )
156
157
args .SlirpDNS = usernet .GatewayIP (subnet )
157
158
} else {
158
159
subnet , _ , err = net .ParseCIDR (networks .SlirpNetwork )
159
160
if err != nil {
160
- return err
161
+ return nil , err
161
162
}
162
163
args .SlirpGateway = usernet .GatewayIP (subnet )
163
164
if * instConfig .VMType == limayaml .VZ {
@@ -173,10 +174,10 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
173
174
174
175
pubKeys , err := sshutil .DefaultPubKeys (* instConfig .SSH .LoadDotSSHPubKeys )
175
176
if err != nil {
176
- return err
177
+ return nil , err
177
178
}
178
179
if len (pubKeys ) == 0 {
179
- return errors .New ("no SSH key was found, run `ssh-keygen`" )
180
+ return nil , errors .New ("no SSH key was found, run `ssh-keygen`" )
180
181
}
181
182
for _ , f := range pubKeys {
182
183
args .SSHPubKeys = append (args .SSHPubKeys , f .Content )
@@ -193,17 +194,17 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
193
194
}
194
195
hostHome , err := localpathutil .Expand ("~" )
195
196
if err != nil {
196
- return err
197
+ return nil , err
197
198
}
198
199
for i , f := range instConfig .Mounts {
199
200
tag := fmt .Sprintf ("mount%d" , i )
200
201
location , err := localpathutil .Expand (f .Location )
201
202
if err != nil {
202
- return err
203
+ return nil , err
203
204
}
204
205
mountPoint , err := localpathutil .Expand (f .MountPoint )
205
206
if err != nil {
206
- return err
207
+ return nil , err
207
208
}
208
209
options := "defaults"
209
210
switch fstype {
@@ -217,7 +218,7 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
217
218
options += fmt .Sprintf (",version=%s" , * f .NineP .ProtocolVersion )
218
219
msize , err := units .RAMInBytes (* f .NineP .Msize )
219
220
if err != nil {
220
- return fmt .Errorf ("failed to parse msize for %q: %w" , location , err )
221
+ return nil , fmt .Errorf ("failed to parse msize for %q: %w" , location , err )
221
222
}
222
223
options += fmt .Sprintf (",msize=%d" , msize )
223
224
options += fmt .Sprintf (",cache=%s" , * f .NineP .Cache )
@@ -268,7 +269,7 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
268
269
269
270
args .Env , err = setupEnv (instConfig .Env , * instConfig .PropagateProxyEnv , args .SlirpGateway )
270
271
if err != nil {
271
- return err
272
+ return nil , err
272
273
}
273
274
274
275
switch {
@@ -285,7 +286,7 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
285
286
default :
286
287
args .DNSAddresses , err = osutil .DNSAddresses ()
287
288
if err != nil {
288
- return err
289
+ return nil , err
289
290
}
290
291
}
291
292
@@ -294,12 +295,12 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
294
295
for _ , path := range instConfig .CACertificates .Files {
295
296
expanded , err := localpathutil .Expand (path )
296
297
if err != nil {
297
- return err
298
+ return nil , err
298
299
}
299
300
300
301
content , err := os .ReadFile (expanded )
301
302
if err != nil {
302
- return err
303
+ return nil , err
303
304
}
304
305
305
306
cert := getCert (string (content ))
@@ -311,6 +312,12 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
311
312
args .CACerts .Trusted = append (args .CACerts .Trusted , cert )
312
313
}
313
314
315
+ // Remove empty caCerts (default values) from configuration yaml
316
+ if ! * args .CACerts .RemoveDefaults && len (args .CACerts .Trusted ) == 0 {
317
+ args .CACerts .RemoveDefaults = nil
318
+ args .CACerts .Trusted = nil
319
+ }
320
+
314
321
args .BootCmds = getBootCmds (instConfig .Provision )
315
322
316
323
for _ , f := range instConfig .Provision {
@@ -319,11 +326,43 @@ func GenerateISO9660(instDir, name string, instConfig *limayaml.LimaYAML, udpDNS
319
326
}
320
327
}
321
328
329
+ return & args , nil
330
+ }
331
+
332
+ func GenerateCloudConfig (instDir , name string , instConfig * limayaml.LimaYAML ) error {
333
+ args , err := templateArgs (false , instDir , name , instConfig , 0 , 0 , 0 , "" )
334
+ if err != nil {
335
+ return err
336
+ }
337
+ // mounts are not included here
338
+ args .Mounts = nil
339
+ // resolv_conf is not included here
340
+ args .DNSAddresses = nil
341
+
342
+ if err := ValidateTemplateArgs (args ); err != nil {
343
+ return err
344
+ }
345
+
346
+ config , err := ExecuteTemplateCloudConfig (args )
347
+ if err != nil {
348
+ return err
349
+ }
350
+
351
+ os .RemoveAll (filepath .Join (instDir , filenames .CloudConfig )) // delete existing
352
+ return os .WriteFile (filepath .Join (instDir , filenames .CloudConfig ), config , 0o444 )
353
+ }
354
+
355
+ func GenerateISO9660 (instDir , name string , instConfig * limayaml.LimaYAML , udpDNSLocalPort , tcpDNSLocalPort int , nerdctlArchive string , vsockPort int , virtioPort string ) error {
356
+ args , err := templateArgs (true , instDir , name , instConfig , udpDNSLocalPort , tcpDNSLocalPort , vsockPort , virtioPort )
357
+ if err != nil {
358
+ return err
359
+ }
360
+
322
361
if err := ValidateTemplateArgs (args ); err != nil {
323
362
return err
324
363
}
325
364
326
- layout , err := ExecuteTemplate (args )
365
+ layout , err := ExecuteTemplateCIDataISO (args )
327
366
if err != nil {
328
367
return err
329
368
}
0 commit comments