mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-05-06 15:17:12 +00:00
Fix parsing cmdline when keys have a dash (#73)
* Fix parsing cmdline when keys have a dash If a key has a dash we need to add quotes to it before parsing it with gojq, otherwise it will fail AND the full cmdline will not be parsed! Signed-off-by: Itxaka <itxaka@kairos.io> * Actualizar bootcmdline_test.go --------- Signed-off-by: Itxaka <itxaka@kairos.io>
This commit is contained in:
parent
1c55cf24d3
commit
e50888d054
@ -24,5 +24,16 @@ var _ = Describe("BootCMDLine", func() {
|
|||||||
|
|
||||||
Expect(string(b)).To(Equal("baz:\n bar: \"\"\nconfig_url: foo bar\n"), string(b))
|
Expect(string(b)).To(Equal("baz:\n bar: \"\"\nconfig_url: foo bar\n"), string(b))
|
||||||
})
|
})
|
||||||
|
It("works if cmdline contains a dash or underscore", func() {
|
||||||
|
f, err := os.CreateTemp("", "test")
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
defer os.RemoveAll(f.Name())
|
||||||
|
|
||||||
|
err = os.WriteFile(f.Name(), []byte(`config-url="foo bar" ba_z.bar=""`), os.ModePerm)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = DotToYAML(f.Name())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -3,10 +3,10 @@ package unstructured
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
"github.com/itchyny/gojq"
|
"github.com/itchyny/gojq"
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func YAMLHasKey(query string, content []byte) (bool, error) {
|
func YAMLHasKey(query string, content []byte) (bool, error) {
|
||||||
@ -109,12 +109,22 @@ func ToYAML(v map[string]interface{}) ([]byte, error) {
|
|||||||
var errs error
|
var errs error
|
||||||
|
|
||||||
for k, value := range v {
|
for k, value := range v {
|
||||||
tmpl := ".%s=\"%s\""
|
prefix := "."
|
||||||
|
equal := "="
|
||||||
|
tmplKey := "%s"
|
||||||
|
tmplValue := "\"%s\""
|
||||||
|
|
||||||
|
// If key has a dash we need to add quotes to it to avoid failure parsing ut
|
||||||
|
if strings.Contains(k, "-") {
|
||||||
|
tmplKey = "\"%s\""
|
||||||
|
}
|
||||||
|
|
||||||
// support boolean types
|
// support boolean types
|
||||||
if value == "true" || value == "false" {
|
if value == "true" || value == "false" {
|
||||||
tmpl = ".%s=%s"
|
tmplValue = "%s"
|
||||||
}
|
}
|
||||||
newData, err := jq(fmt.Sprintf(tmpl, k, value), data)
|
finalTemplate := prefix + tmplKey + equal + tmplValue
|
||||||
|
newData, err := jq(fmt.Sprintf(finalTemplate, k, value), data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs = multierror.Append(errs, err)
|
errs = multierror.Append(errs, err)
|
||||||
continue
|
continue
|
||||||
|
Loading…
Reference in New Issue
Block a user