fix boot entry selecting with multiple extra cmdlines (#984)

This commit is contained in:
Nianyu Shen
2025-10-08 01:59:26 -07:00
committed by GitHub
parent b4ce3ea5a6
commit 83e0d76059
2 changed files with 19 additions and 3 deletions

View File

@@ -501,7 +501,7 @@ func ReadPersistentVariables(grubEnvFile string, c *agentConfig.Config) (map[str
if err != nil {
return vars, err
}
for _, a := range strings.Split(string(f), "\n") {
for a := range strings.SplitSeq(string(f), "\n") {
// comment or fillup, so skip
if strings.HasPrefix(a, "#") {
continue
@@ -510,8 +510,8 @@ func ReadPersistentVariables(grubEnvFile string, c *agentConfig.Config) (map[str
continue
}
splitted := strings.Split(a, "=")
if len(splitted) == 2 {
vars[splitted[0]] = splitted[1]
if len(splitted) >= 2 {
vars[splitted[0]] = strings.Join(splitted[1:], "=")
} else {
return vars, fmt.Errorf("invalid format for %s", a)
}

View File

@@ -866,6 +866,22 @@ var _ = Describe("Utils", Label("utils"), func() {
Expect(readVars["key2"]).To(Equal("value2"))
Expect(readVars["key3"]).To(Equal("value4"))
})
It("Should work with multiple extra cmdline", func() {
temp, err := os.CreateTemp("", "grub-*")
Expect(err).ShouldNot(HaveOccurred())
defer os.Remove(temp.Name())
data := `# GRUB Environment Block
extra_cmdline=fips=1 selinux=0
########################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################`
Expect(fs.WriteFile(temp.Name(), []byte(data), constants.FilePerm)).To(BeNil())
Expect(utils.SetPersistentVariables(
temp.Name(), map[string]string{"next_entry": "statereset"}, config,
)).To(BeNil())
readVars, err := utils.ReadPersistentVariables(temp.Name(), config)
Expect(err).To(BeNil())
Expect(readVars["next_entry"]).To(Equal("statereset"))
Expect(readVars["extra_cmdline"]).To(Equal("fips=1 selinux=0"))
})
})
})
Describe("CreateSquashFS", Label("CreateSquashFS"), func() {