Skip to content

Commit 4761cf5

Browse files
authored
Merge pull request #1516 from afbjorklund/advanced-disks
Allow leaving additional disks unformatted
2 parents 67e28bc + 1c7ca68 commit 4761cf5

File tree

14 files changed

+122
-30
lines changed

14 files changed

+122
-30
lines changed

cmd/limactl/disk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ func diskDeleteAction(cmd *cobra.Command, args []string) error {
245245
for _, inst := range instances {
246246
if len(inst.AdditionalDisks) > 0 {
247247
for _, d := range inst.AdditionalDisks {
248-
if d == diskName {
248+
if d.Name == diskName {
249249
refInstances = append(refInstances, inst.Name)
250250
}
251251
}

cmd/limactl/stop.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ func stopInstanceForcibly(inst *store.Instance) {
113113
logrus.Infof("The %s driver process seems already stopped", inst.VMType)
114114
}
115115

116-
for _, diskName := range inst.AdditionalDisks {
116+
for _, d := range inst.AdditionalDisks {
117+
diskName := d.Name
117118
disk, err := store.InspectDisk(diskName)
118119
if err != nil {
119120
logrus.Warnf("Disk %q does not exist", diskName)

examples/default.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,12 @@ mountType: null
105105
# `/mnt/lima-${VOLUME}`.
106106
# 🟢 Builtin default: null
107107
additionalDisks:
108-
# disks should be a list of disk name strings, for example:
108+
# disks should either be a list of disk name strings, for example:
109109
# - "data"
110+
# or a list of disk objects with extra parameters, for example:
111+
# - name: "data"
112+
# format: true
113+
# fsType: "ext4"
110114

111115
ssh:
112116
# A localhost port of the host. Forwarded to port 22 of the guest.

pkg/cidata/cidata.TEMPLATE.d/boot/05-lima-disks.sh

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,22 @@ get_disk_var() {
1212
for i in $(seq 0 $((LIMA_CIDATA_DISKS - 1))); do
1313
DISK_NAME="$(get_disk_var "$i" "NAME")"
1414
DEVICE_NAME="$(get_disk_var "$i" "DEVICE")"
15+
FORMAT_DISK="$(get_disk_var "$i" "FORMAT")"
16+
FORMAT_FSTYPE="$(get_disk_var "$i" "FSTYPE")"
17+
FORMAT_FSARGS="$(get_disk_var "$i" "FSARGS")"
18+
19+
test -n "$FORMAT_DISK" || FORMAT_DISK=true
20+
test -n "$FORMAT_FSTYPE" || FORMAT_FSTYPE=ext4
1521

1622
# first time setup
1723
if [[ ! -b "/dev/disk/by-label/lima-${DISK_NAME}" ]]; then
18-
# TODO: skip if disk is tagged as "raw"
19-
echo 'type=linux' | sfdisk --label gpt "/dev/${DEVICE_NAME}"
20-
mkfs.ext4 -L "lima-${DISK_NAME}" "/dev/${DEVICE_NAME}1"
24+
if $FORMAT_DISK; then
25+
echo 'type=linux' | sfdisk --label gpt "/dev/${DEVICE_NAME}"
26+
# shellcheck disable=SC2086
27+
mkfs.$FORMAT_FSTYPE $FORMAT_FSARGS -L "lima-${DISK_NAME}" "/dev/${DEVICE_NAME}1"
28+
fi
2129
fi
2230

2331
mkdir -p "/mnt/lima-${DISK_NAME}"
24-
mount -t ext4 "/dev/${DEVICE_NAME}1" "/mnt/lima-${DISK_NAME}"
32+
mount -t $FORMAT_FSTYPE "/dev/${DEVICE_NAME}1" "/mnt/lima-${DISK_NAME}"
2533
done

pkg/cidata/cidata.TEMPLATE.d/lima.env

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ LIMA_CIDATA_DISKS={{ len .Disks }}
1111
{{- range $i, $disk := .Disks}}
1212
LIMA_CIDATA_DISK_{{$i}}_NAME={{$disk.Name}}
1313
LIMA_CIDATA_DISK_{{$i}}_DEVICE={{$disk.Device}}
14+
LIMA_CIDATA_DISK_{{$i}}_FORMAT={{$disk.Format}}
15+
LIMA_CIDATA_DISK_{{$i}}_FSTYPE={{$disk.FSType}}
16+
LIMA_CIDATA_DISK_{{$i}}_FSARGS={{range $j, $arg := $disk.FSArgs}}{{if $j}} {{end}}{{$arg}}{{end}}
1417
{{- end}}
1518
LIMA_CIDATA_GUEST_INSTALL_PREFIX={{ .GuestInstallPrefix }}
1619
{{- if .Containerd.User}}

pkg/cidata/cidata.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,21 @@ func GenerateISO9660(instDir, name string, y *limayaml.LimaYAML, udpDNSLocalPort
203203
args.MountType = "virtiofs"
204204
}
205205

206-
for i, disk := range y.AdditionalDisks {
206+
for i, d := range y.AdditionalDisks {
207+
format := true
208+
if d.Format != nil {
209+
format = *d.Format
210+
}
211+
fstype := ""
212+
if d.FSType != nil {
213+
fstype = *d.FSType
214+
}
207215
args.Disks = append(args.Disks, Disk{
208-
Name: disk,
216+
Name: d.Name,
209217
Device: diskDeviceNameFromOrder(i),
218+
Format: format,
219+
FSType: fstype,
220+
FSArgs: d.FSArgs,
210221
})
211222
}
212223

pkg/cidata/template.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ type BootCmds struct {
4848
type Disk struct {
4949
Name string
5050
Device string
51+
Format bool
52+
FSType string
53+
FSArgs []string
5154
}
5255
type TemplateArgs struct {
5356
Name string // instance name

pkg/hostagent/hostagent.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ sudo chown -R "${USER}" /run/host-services`
436436
a.onClose = append(a.onClose, func() error {
437437
var unlockMErr error
438438
for _, d := range a.y.AdditionalDisks {
439-
disk, inspectErr := store.InspectDisk(d)
439+
disk, inspectErr := store.InspectDisk(d.Name)
440440
if inspectErr != nil {
441441
unlockMErr = multierror.Append(unlockMErr, inspectErr)
442442
continue

pkg/limayaml/defaults_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ func TestFillDefault(t *testing.T) {
277277
Memory: pointer.String("5GiB"),
278278
Disk: pointer.String("105GiB"),
279279
AdditionalDisks: []Disk{
280-
"data",
280+
{Name: "data"},
281281
},
282282
GuestInstallPrefix: pointer.String("/opt"),
283283
Containerd: Containerd{
@@ -413,7 +413,7 @@ func TestFillDefault(t *testing.T) {
413413

414414
y = filledDefaults
415415
y.DNS = []net.IP{net.ParseIP("8.8.8.8")}
416-
y.AdditionalDisks = []Disk{"overridden"}
416+
y.AdditionalDisks = []Disk{{Name: "overridden"}}
417417

418418
expect = y
419419

@@ -454,7 +454,7 @@ func TestFillDefault(t *testing.T) {
454454
Memory: pointer.String("7GiB"),
455455
Disk: pointer.String("117GiB"),
456456
AdditionalDisks: []Disk{
457-
"test",
457+
{Name: "test"},
458458
},
459459
GuestInstallPrefix: pointer.String("/usr"),
460460
Containerd: Containerd{

pkg/limayaml/limayaml.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,12 @@ type Image struct {
7979
Initrd *File `yaml:"initrd,omitempty" json:"initrd,omitempty"`
8080
}
8181

82-
type Disk = string
82+
type Disk struct {
83+
Name string `yaml:"name" json:"name"` // REQUIRED
84+
Format *bool `yaml:"format,omitempty" json:"format,omitempty"`
85+
FSType *string `yaml:"fsType,omitempty" json:"fsType,omitempty"`
86+
FSArgs []string `yaml:"fsArgs,omitempty" json:"fsArgs,omitempty"`
87+
}
8388

8489
type Mount struct {
8590
Location string `yaml:"location" json:"location"` // REQUIRED

0 commit comments

Comments
 (0)