removed NodeInfo and using NodeConf instead
This is a significant change in the undelying data model! nodeDb, err := node.New() will result in a structure which contains the on disk values. Only nodeDb.FindAllNodes() or nodeDb.GetNode(id) will give the nodes with its merged in profiles. Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
committed by
Jonathon Anderson
parent
dc8fb2d6f2
commit
28a7b9fe84
@@ -14,66 +14,54 @@ type NodeFields struct {
|
||||
}
|
||||
|
||||
/*
|
||||
Get all the info out of NodeInfo. If emptyFields is set true, all fields
|
||||
are shown not only the ones with effective values
|
||||
Get all the info out of NodeConf. If emptyFields is set true, all fields are shown not only the ones with effective values
|
||||
*/
|
||||
func (node *NodeInfo) GetFields(emptyFields bool) (output []NodeFields) {
|
||||
return recursiveFields(node, emptyFields, "")
|
||||
func (nodeYml *NodeYaml) GetFields(node NodeConf, emptyFields bool) (output []NodeFields) {
|
||||
fieldMap := make(map[string]NodeFields)
|
||||
for _, p := range node.Profiles {
|
||||
if profile, ok := nodeYml.NodeProfiles[p]; ok {
|
||||
recursiveFields(profile, emptyFields, "", fieldMap, p)
|
||||
}
|
||||
}
|
||||
recursiveFields(node, emptyFields, "", fieldMap, "")
|
||||
return output
|
||||
}
|
||||
|
||||
/*
|
||||
Internal function which travels through all fields of a NodeInfo and for this
|
||||
Internal function which travels through all fields of a NodeConf and for this
|
||||
reason needs tb called via interface{}
|
||||
*/
|
||||
func recursiveFields(obj interface{}, emptyFields bool, prefix string) (output []NodeFields) {
|
||||
func recursiveFields(obj interface{}, emptyFields bool, prefix string,
|
||||
fieldMap map[string]NodeFields, source string) {
|
||||
valObj := reflect.ValueOf(obj)
|
||||
typeObj := reflect.TypeOf(obj)
|
||||
for i := 0; i < typeObj.Elem().NumField(); i++ {
|
||||
if typeObj.Elem().Field(i).Type == reflect.TypeOf(Entry{}) {
|
||||
myField := valObj.Elem().Field(i).Interface().(Entry)
|
||||
if emptyFields || myField.Get() != "" {
|
||||
output = append(output, NodeFields{
|
||||
if valObj.Elem().Field(i).IsValid() {
|
||||
if valObj.Elem().Field(i).String() != "" {
|
||||
fieldMap[prefix+typeObj.Elem().Field(i).Name] = NodeFields{
|
||||
Field: prefix + typeObj.Elem().Field(i).Name,
|
||||
Source: myField.Source(),
|
||||
Value: myField.Print(),
|
||||
})
|
||||
}
|
||||
} else if typeObj.Elem().Field(i).Type == reflect.TypeOf(map[string]*Entry{}) {
|
||||
for key, val := range valObj.Elem().Field(i).Interface().(map[string]*Entry) {
|
||||
if emptyFields || val.Get() != "" {
|
||||
output = append(output, NodeFields{
|
||||
Field: prefix + typeObj.Elem().Field(i).Name + "[" + key + "]",
|
||||
Source: val.Source(),
|
||||
Value: val.Print(),
|
||||
})
|
||||
Source: source,
|
||||
Value: valObj.Elem().Field(i).String(),
|
||||
}
|
||||
} else if emptyFields {
|
||||
fieldMap[prefix+typeObj.Elem().Field(i).Name] = NodeFields{
|
||||
Field: prefix + typeObj.Elem().Field(i).Name + "[]",
|
||||
Source: source,
|
||||
}
|
||||
}
|
||||
if valObj.Elem().Field(i).Len() == 0 && emptyFields {
|
||||
output = append(output, NodeFields{
|
||||
Field: prefix + typeObj.Elem().Field(i).Name + "[]",
|
||||
})
|
||||
}
|
||||
} else if typeObj.Elem().Field(i).Type.Kind() == reflect.Map {
|
||||
mapIter := valObj.Elem().Field(i).MapRange()
|
||||
for mapIter.Next() {
|
||||
nestedOut := recursiveFields(mapIter.Value().Interface(), emptyFields, prefix+typeObj.Elem().Field(i).Name+"["+mapIter.Key().String()+"].")
|
||||
if len(nestedOut) == 0 {
|
||||
output = append(output, NodeFields{
|
||||
Field: prefix + typeObj.Elem().Field(i).Name + "[" + mapIter.Key().String() + "]",
|
||||
})
|
||||
} else {
|
||||
output = append(output, nestedOut...)
|
||||
}
|
||||
recursiveFields(mapIter.Value().Interface(),
|
||||
emptyFields, prefix+typeObj.Elem().Field(i).Name+"["+mapIter.Key().String()+"].", fieldMap, source)
|
||||
}
|
||||
if valObj.Elem().Field(i).Len() == 0 && emptyFields {
|
||||
output = append(output, NodeFields{
|
||||
fieldMap[prefix+typeObj.Elem().Field(i).Name] = NodeFields{
|
||||
Field: prefix + typeObj.Elem().Field(i).Name + "[]",
|
||||
})
|
||||
}
|
||||
}
|
||||
} else if typeObj.Elem().Field(i).Type.Kind() == reflect.Ptr {
|
||||
nestedOut := recursiveFields(valObj.Elem().Field(i).Interface(), emptyFields, prefix+typeObj.Elem().Field(i).Name+".")
|
||||
output = append(output, nestedOut...)
|
||||
recursiveFields(valObj.Elem().Field(i).Interface(), emptyFields, prefix+typeObj.Elem().Field(i).Name+".", fieldMap, source)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user