Skip to content

Commit 9db4871

Browse files
authored
Merge pull request #2119 from afbjorklund/package-upgrade
Option to upgrade packages and reboot if necessary
2 parents 72b503f + f1a8dc1 commit 9db4871

File tree

8 files changed

+42
-0
lines changed

8 files changed

+42
-0
lines changed

examples/default.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,11 @@ caCerts:
166166
# YOUR-ORGS-TRUSTED-CA-CERT-HERE
167167
# -----END CERTIFICATE-----
168168

169+
# Upgrade the instance on boot
170+
# Reboot after upgrade if required
171+
# 🟢 Builtin default: false
172+
upgradePackages: null
173+
169174
containerd:
170175
# Enable system-wide (aka rootful) containerd and its dependencies (BuildKit, Stargz Snapshotter)
171176
# Note that `nerdctl.lima` only works in rootless mode; you have to use `lima sudo nerdctl ...`
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/sh
2+
set -eux
3+
4+
# Check if cloud-init forgot to reboot_if_required
5+
# (only implemented for apt at the moment, not dnf)
6+
7+
if command -v dnf >/dev/null 2>&1; then
8+
# dnf-utils needs to be installed, for needs-restarting
9+
if dnf -h needs-restarting >/dev/null 2>&1; then
10+
# needs-restarting returns "false" if needed (!)
11+
if ! dnf needs-restarting -r >/dev/null 2>&1; then
12+
systemctl reboot
13+
fi
14+
fi
15+
fi

pkg/cidata/cidata.TEMPLATE.d/user-data

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ growpart:
55
mode: auto
66
devices: ['/']
77

8+
{{- if .UpgradePackages }}
9+
package_update: true
10+
package_upgrade: true
11+
package_reboot_if_required: true
12+
{{- end }}
13+
814
{{- if or (eq .MountType "9p") (eq .MountType "virtiofs") }}
915
{{- if .Mounts }}
1016
mounts:

pkg/cidata/cidata.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ func GenerateISO9660(instDir, name string, y *limayaml.LimaYAML, udpDNSLocalPort
128128
UID: uid,
129129
Home: fmt.Sprintf("/home/%s.linux", u.Username),
130130
GuestInstallPrefix: *y.GuestInstallPrefix,
131+
UpgradePackages: *y.UpgradePackages,
131132
Containerd: Containerd{System: *y.Containerd.System, User: *y.Containerd.User},
132133
SlirpNICName: networks.SlirpNICName,
133134

pkg/cidata/template.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ type TemplateArgs struct {
6363
MountType string
6464
Disks []Disk
6565
GuestInstallPrefix string
66+
UpgradePackages bool
6667
Containerd Containerd
6768
Networks []Network
6869
SlirpNICName string

pkg/limayaml/defaults.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,16 @@ func FillDefault(y, d, o *LimaYAML, filePath string) {
444444
y.GuestInstallPrefix = ptr.Of(defaultGuestInstallPrefix())
445445
}
446446

447+
if y.UpgradePackages == nil {
448+
y.UpgradePackages = d.UpgradePackages
449+
}
450+
if o.UpgradePackages != nil {
451+
y.UpgradePackages = o.UpgradePackages
452+
}
453+
if y.UpgradePackages == nil {
454+
y.UpgradePackages = ptr.Of(false)
455+
}
456+
447457
if y.Containerd.System == nil {
448458
y.Containerd.System = d.Containerd.System
449459
}

pkg/limayaml/defaults_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ func TestFillDefault(t *testing.T) {
7373
Memory: ptr.Of(defaultMemoryAsString()),
7474
Disk: ptr.Of(defaultDiskSizeAsString()),
7575
GuestInstallPrefix: ptr.Of(defaultGuestInstallPrefix()),
76+
UpgradePackages: ptr.Of(false),
7677
Containerd: Containerd{
7778
System: ptr.Of(false),
7879
User: ptr.Of(true),
@@ -309,6 +310,7 @@ func TestFillDefault(t *testing.T) {
309310
{Name: "data"},
310311
},
311312
GuestInstallPrefix: ptr.Of("/opt"),
313+
UpgradePackages: ptr.Of(true),
312314
Containerd: Containerd{
313315
System: ptr.Of(true),
314316
User: ptr.Of(false),
@@ -498,6 +500,7 @@ func TestFillDefault(t *testing.T) {
498500
{Name: "test"},
499501
},
500502
GuestInstallPrefix: ptr.Of("/usr"),
503+
UpgradePackages: ptr.Of(true),
501504
Containerd: Containerd{
502505
System: ptr.Of(true),
503506
User: ptr.Of(false),

pkg/limayaml/limayaml.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type LimaYAML struct {
2323
Audio Audio `yaml:"audio,omitempty" json:"audio,omitempty"`
2424
Video Video `yaml:"video,omitempty" json:"video,omitempty"`
2525
Provision []Provision `yaml:"provision,omitempty" json:"provision,omitempty"`
26+
UpgradePackages *bool `yaml:"upgradePackages,omitempty" json:"upgradePackages,omitempty"`
2627
Containerd Containerd `yaml:"containerd,omitempty" json:"containerd,omitempty"`
2728
GuestInstallPrefix *string `yaml:"guestInstallPrefix,omitempty" json:"guestInstallPrefix,omitempty"`
2829
Probes []Probe `yaml:"probes,omitempty" json:"probes,omitempty"`

0 commit comments

Comments
 (0)