kairos-sdk/sdk/system/grub.go
Ettore Di Giacinto 696e87bbee sparkles: state api sdk (#262)
*  Add state api

This is related to https://github.com/kairos-io/kairos/issues/34.

Starts to unify the API to retrieve the state in the sdk to have a common place to query system status information.

* 🤖 Add test

* Update go.mod

* ⚙️ Fine-tune detection of partitions

* 🤖 Add more fine-grained tests

* 🎨 Add /dev/ to partition name

* 🤖 Fixup tests

* ⚙️ Remount accessors

*  Add state partition to cloud-init paths

* 📝 Upper case Kairos in motd

* 🎨 Add mounts sdk

* 🎨 Set grub options via SDK

* 🎨 Make it more idiomatic
2022-10-23 20:22:32 +02:00

48 lines
959 B
Go

package system
import (
"fmt"
"github.com/kairos-io/kairos/pkg/machine"
"github.com/kairos-io/kairos/pkg/utils"
"github.com/kairos-io/kairos/sdk/mounts"
"github.com/kairos-io/kairos/sdk/state"
)
func SetGRUBOptions(opts map[string]string) Option {
return func(c *Changeset) error {
if len(opts) > 0 {
c.Add(func() error { return setGRUBOptions(opts) })
}
return nil
}
}
func setGRUBOptions(opts map[string]string) error {
runtime, err := state.NewRuntime()
if err != nil {
return err
}
oem := runtime.OEM
if runtime.OEM.Name == "" {
oem = runtime.Persistent
}
if err := mounts.PrepareWrite(oem, "/tmp/oem"); err != nil {
return err
}
defer func() {
machine.Umount("/tmp/oem") //nolint:errcheck
}()
for k, v := range opts {
out, err := utils.SH(fmt.Sprintf(`grub2-editenv /tmp/oem/grubenv set "%s=%s"`, k, v))
if err != nil {
fmt.Printf("could not set boot option: %s\n", out+err.Error())
}
}
return nil
}