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:
Itxaka
2024-03-18 17:28:31 +01:00
committed by GitHub
parent 1c55cf24d3
commit e50888d054
2 changed files with 25 additions and 4 deletions

View File

@@ -3,10 +3,10 @@ package unstructured
import (
"errors"
"fmt"
"github.com/hashicorp/go-multierror"
"github.com/itchyny/gojq"
"gopkg.in/yaml.v3"
"strings"
)
func YAMLHasKey(query string, content []byte) (bool, error) {
@@ -109,12 +109,22 @@ func ToYAML(v map[string]interface{}) ([]byte, error) {
var errs error
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
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 {
errs = multierror.Append(errs, err)
continue