diff --git a/internal/app/wwctl/node/edit/main.go b/internal/app/wwctl/node/edit/main.go index dbc80d09..db0e1b75 100644 --- a/internal/app/wwctl/node/edit/main.go +++ b/internal/app/wwctl/node/edit/main.go @@ -47,11 +47,11 @@ func CobraRunE(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not create temp file: %s", err) } defer os.Remove(file.Name()) - yamlTemplate := node.UnmarshalConf(node.NodeConf{}, []string{"tagsdel", "default", "profiles"}) for { _ = file.Truncate(0) _, _ = file.Seek(0, 0) if !NoHeader { + yamlTemplate := node.UnmarshalConf(node.NodeConf{}, []string{"tagsdel"}) _, _ = file.WriteString("#nodename:\n# " + strings.Join(yamlTemplate, "\n# ") + "\n") } _, _ = file.WriteString(nodeListMsg.NodeConfMapYaml) diff --git a/internal/app/wwctl/profile/edit/main.go b/internal/app/wwctl/profile/edit/main.go index e00c849b..c20c1f25 100644 --- a/internal/app/wwctl/profile/edit/main.go +++ b/internal/app/wwctl/profile/edit/main.go @@ -49,11 +49,11 @@ func CobraRunE(cmd *cobra.Command, args []string) error { wwlog.Error("Could not create temp file:%s \n", err) } defer os.Remove(file.Name()) - yamlTemplate := node.UnmarshalConf(node.ProfileConf{}, []string{"tagsdel"}) for { _ = file.Truncate(0) _, _ = file.Seek(0, 0) if !NoHeader { + yamlTemplate := node.UnmarshalConf(node.ProfileConf{}, []string{"tagsdel"}) _, _ = file.WriteString("#profilename:\n# " + strings.Join(yamlTemplate, "\n# ") + "\n") } _, _ = file.WriteString(profileListMsg.NodeConfMapYaml) diff --git a/internal/pkg/node/methods.go b/internal/pkg/node/methods.go index 6d968fbe..8e5da8a3 100644 --- a/internal/pkg/node/methods.go +++ b/internal/pkg/node/methods.go @@ -226,31 +226,35 @@ func UnmarshalConf(obj interface{}, excludeList []string) (lines []string) { objType := reflect.TypeOf(obj) // now iterate of every field for i := 0; i < objType.NumField(); i++ { - if objType.Field(i).Tag.Get("comment") != "" { - if ymlStr, ok := getYamlString(objType.Field(i), excludeList); ok { + field := objType.Field(i) + if field.Tag.Get("comment") != "" { + if ymlStr, ok := getYamlString(field, excludeList); ok { lines = append(lines, ymlStr...) } } - if objType.Field(i).Type.Kind() == reflect.Ptr && objType.Field(i).Tag.Get("yaml") != "" { - typeLine := objType.Field(i).Tag.Get("yaml") + if field.Type.Kind() == reflect.Ptr && field.Tag.Get("yaml") != "" { + typeLine := field.Tag.Get("yaml") if len(strings.Split(typeLine, ",")) > 1 { typeLine = strings.Split(typeLine, ",")[0] + ":" } lines = append(lines, typeLine) - nestedLine := UnmarshalConf(reflect.New(objType.Field(i).Type.Elem()).Elem().Interface(), excludeList) + nestedLine := UnmarshalConf(reflect.New(field.Type.Elem()).Elem().Interface(), excludeList) for _, ln := range nestedLine { lines = append(lines, " "+ln) } - } else if objType.Field(i).Type.Kind() == reflect.Map && objType.Field(i).Type.Elem().Kind() == reflect.Ptr { - typeLine := objType.Field(i).Tag.Get("yaml") + } else if field.Type.Kind() == reflect.Map && field.Type.Elem().Kind() == reflect.Ptr { + typeLine := field.Tag.Get("yaml") if len(strings.Split(typeLine, ",")) > 1 { typeLine = strings.Split(typeLine, ",")[0] + ":" } lines = append(lines, typeLine, " element:") - nestedLine := UnmarshalConf(reflect.New(objType.Field(i).Type.Elem().Elem()).Elem().Interface(), excludeList) + nestedLine := UnmarshalConf(reflect.New(field.Type.Elem().Elem()).Elem().Interface(), excludeList) for _, ln := range nestedLine { lines = append(lines, " "+ln) } + } else if field.Type.Kind() == reflect.Struct && field.Anonymous { + nestedLine := UnmarshalConf(reflect.New(field.Type).Elem().Interface(), excludeList) + lines = append(lines, nestedLine...) } } return lines