kairos-agent/pkg/uki/upgrade.go

53 lines
1.7 KiB
Go
Raw Normal View History

2023-10-03 09:15:17 +00:00
package uki
import (
hook "github.com/kairos-io/kairos-agent/v2/internal/agent/hooks"
"github.com/kairos-io/kairos-agent/v2/pkg/config"
2023-12-18 10:38:26 +00:00
"github.com/kairos-io/kairos-agent/v2/pkg/constants"
"github.com/kairos-io/kairos-agent/v2/pkg/elemental"
2023-10-03 09:15:17 +00:00
v1 "github.com/kairos-io/kairos-agent/v2/pkg/types/v1"
elementalUtils "github.com/kairos-io/kairos-agent/v2/pkg/utils"
events "github.com/kairos-io/kairos-sdk/bus"
2023-12-18 10:38:26 +00:00
"github.com/kairos-io/kairos-sdk/utils"
2023-10-03 09:15:17 +00:00
)
type UpgradeAction struct {
cfg *config.Config
spec *v1.UpgradeUkiSpec
}
func NewUpgradeAction(cfg *config.Config, spec *v1.UpgradeUkiSpec) *UpgradeAction {
return &UpgradeAction{cfg: cfg, spec: spec}
}
func (i *UpgradeAction) Run() (err error) {
2023-12-18 10:38:26 +00:00
e := elemental.NewElemental(i.cfg)
cleanup := utils.NewCleanStack()
defer func() { err = cleanup.Cleanup(err) }()
2023-10-03 09:15:17 +00:00
// Run pre-install stage
_ = elementalUtils.RunStage(i.cfg, "kairos-uki-upgrade.pre")
_ = events.RunHookScript("/usr/bin/kairos-agent.uki.upgrade.pre.hook")
2023-12-18 10:38:26 +00:00
// REMOUNT /efi as RW (its RO by default)
umount, err := e.MountRWPartition(i.spec.EfiPartition)
if err != nil {
return err
}
cleanup.Push(umount)
// TODO: Check size of EFI partition to see if we can upgrade
// TODO: Check size of source to see if we can upgrade
// TODO: Check number of existing UKI files
// TODO: Load them, order them via semver
// TODO: Remove the latest one if its over the max number of entries
// Dump artifact to efi dir
_, err = e.DumpSource(constants.UkiEfiDir, i.spec.Active.Source)
if err != nil {
return err
}
2023-10-03 09:15:17 +00:00
_ = elementalUtils.RunStage(i.cfg, "kairos-uki-upgrade.after")
_ = events.RunHookScript("/usr/bin/kairos-agent.uki.upgrade.after.hook") //nolint:errcheck
return hook.Run(*i.cfg, i.spec, hook.AfterUkiUpgrade...)
}