don't use net.IPMask

net.IPMask doesn't have any advantages, as it would
marshalled to
mask:
  - 1
  - 2
  - 3
  - 4

Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
Christian Goll
2024-07-17 15:47:45 +02:00
committed by Jonathon Anderson
parent 9fdb9ca792
commit c08cd82e68
7 changed files with 46 additions and 43 deletions

View File

@@ -63,7 +63,7 @@ type IpmiConf struct {
Password string `yaml:"password,omitempty" lopt:"ipmipass" comment:"Set the IPMI password"`
Ipaddr net.IP `yaml:"ipaddr,omitempty" lopt:"ipmiaddr" comment:"Set the IPMI IP address" type:"IP"`
Gateway net.IP `yaml:"gateway,omitempty" lopt:"ipmigateway" comment:"Set the IPMI gateway" type:"IP"`
Netmask net.IPMask `yaml:"netmask,omitempty" lopt:"ipminetmask" comment:"Set the IPMI netmask" type:"IP"`
Netmask net.IP `yaml:"netmask,omitempty" lopt:"ipminetmask" comment:"Set the IPMI netmask" type:"IP"`
Port string `yaml:"port,omitempty" lopt:"ipmiport" comment:"Set the IPMI port"`
Interface string `yaml:"interface,omitempty" lopt:"ipmiinterface" comment:"Set the node's IPMI interface (defaults: 'lan')"`
EscapeChar string `yaml:"escapechar,omitempty" lopt:"ipmiescapechar" comment:"Set the IPMI escape character (defaults: '~')"`
@@ -85,7 +85,7 @@ type NetDevs struct {
Ipaddr net.IP `yaml:"ipaddr,omitempty" comment:"IPv4 address in given network" sopt:"I" lopt:"ipaddr" type:"IP"`
Ipaddr6 net.IP `yaml:"ip6addr,omitempty" lopt:"ipaddr6" comment:"IPv6 address" type:"IP"`
Prefix net.IP `yaml:"prefix,omitempty"`
Netmask net.IPMask `yaml:"netmask,omitempty" lopt:"netmask" sopt:"M" comment:"Set the networks netmask" type:"IP"`
Netmask net.IP `yaml:"netmask,omitempty" lopt:"netmask" sopt:"M" comment:"Set the networks netmask" type:"IP"`
Gateway net.IP `yaml:"gateway,omitempty" lopt:"gateway" sopt:"G" comment:"Set the node's network device gateway" type:"IP"`
MTU string `yaml:"mtu,omitempty" lopt:"mtu" comment:"Set the mtu" type:"uint"`
primary bool `yaml:"primary,omitempty"`

View File

@@ -157,20 +157,6 @@ func createFlags(baseCmd *cobra.Command,
net.IP{}, // empty default!
myType.Tag.Get("comment"))
}
} else if myType.Type == reflect.TypeOf(net.IPMask{}) {
ptr := myVal.Addr().Interface().(*net.IPMask)
if myType.Tag.Get("sopt") != "" {
baseCmd.PersistentFlags().IPMaskVarP(ptr,
myType.Tag.Get("lopt"),
myType.Tag.Get("sopt"),
net.IPMask{}, // empty default!
myType.Tag.Get("comment"))
} else {
baseCmd.PersistentFlags().IPMaskVar(ptr,
myType.Tag.Get("lopt"),
net.IPMask{}, // empty default!
myType.Tag.Get("comment"))
}
} else if myType.Type == reflect.TypeOf(wwbool) {
ptr := myVal.Addr().Interface().(*wwtype.WWbool)
if myType.Tag.Get("sopt") != "" {

View File

@@ -96,7 +96,15 @@ func (fieldMap fieldMap) recursiveFields(obj interface{}, prefix string, source
case reflect.Map:
mapIter := valObj.Elem().Field(i).MapRange()
for mapIter.Next() {
fieldMap.recursiveFields(mapIter.Value().Interface(), prefix+typeObj.Elem().Field(i).Name+"["+mapIter.Key().String()+"].", source)
if mapIter.Value().Kind() == reflect.String {
fieldMap[prefix+typeObj.Elem().Field(i).Name+"["+mapIter.Key().String()+"]"] = &NodeFields{
Field: prefix + typeObj.Elem().Field(i).Name + "[" + mapIter.Key().String() + "]",
Source: source,
Value: mapIter.Value().String(),
}
} else {
fieldMap.recursiveFields(mapIter.Value().Interface(), prefix+typeObj.Elem().Field(i).Name+"["+mapIter.Key().String()+"].", source)
}
}
if valObj.Elem().Field(i).Len() == 0 {
fieldMap[prefix+typeObj.Elem().Field(i).Name] = &NodeFields{
@@ -120,9 +128,22 @@ func (fieldMap fieldMap) recursiveFields(obj interface{}, prefix string, source
switch typeObj.Elem().Field(i).Type {
case reflect.TypeOf([]string{}):
vals := (valObj.Elem().Field(i).Interface()).([]string)
src_str := source
if oldVal, ok := fieldMap[prefix+typeObj.Elem().Field(i).Name]; ok {
if oldVal.Value != "" {
if len(vals) > 0 {
src_str = oldVal.Source + "+"
} else {
src_str = oldVal.Source
}
vals = append(vals, oldVal.Value)
} else {
src_str = oldVal.Source
}
}
fieldMap[prefix+typeObj.Elem().Field(i).Name] = &NodeFields{
Field: prefix + typeObj.Elem().Field(i).Name,
Source: source,
Source: src_str,
Value: strings.Join(vals, ","),
}
case reflect.TypeOf(net.IP{}):
@@ -130,11 +151,6 @@ func (fieldMap fieldMap) recursiveFields(obj interface{}, prefix string, source
if val != nil {
fieldMap[prefix+typeObj.Elem().Field(i).Name].Set(source, val.String())
}
case reflect.TypeOf(net.IPMask{}):
val := (valObj.Elem().Field(i).Interface()).(net.IPMask)
if val != nil {
fieldMap[prefix+typeObj.Elem().Field(i).Name].Set(source, val.String())
}
case reflect.TypeOf(true):
val := (valObj.Elem().Field(i).Interface()).(bool)
if val {
@@ -144,9 +160,7 @@ func (fieldMap fieldMap) recursiveFields(obj interface{}, prefix string, source
fieldMap[prefix+typeObj.Elem().Field(i).Name].Set(source, valObj.Elem().Field(i).String())
}
} /*else if typeObj.Elem().Field(i).Type.Kind() == reflect.Ptr {
fieldMap.recursiveFields(valObj.Elem().Field(i).Interface(), emptyFields, prefix+typeObj.Elem().Field(i).Name+".", source)
}*/
}
}
}
}

View File

@@ -150,7 +150,6 @@ func recursiveFlatten(obj interface{}) (hasContent bool) {
for mapIter.Next() {
if mapIter.Value().Kind() == reflect.String {
if mapIter.Value().String() != "" {
// fmt.Println("map")
hasContent = true
}
} else {
@@ -203,12 +202,6 @@ func recursiveFlatten(obj interface{}) (hasContent bool) {
if len(val) != 0 && !val.IsUnspecified() {
hasContent = true
}
case reflect.TypeOf(net.IPMask{}):
val := valObj.Elem().Field(i).Interface().(net.IPMask)
if len(val) != 0 {
// fmt.Println("Mask")
hasContent = true
}
default:
}
}
@@ -346,3 +339,18 @@ func cleanList(list []string) (ret []string) {
}
return ret
}
/*
Return the ipv4 address and mask in CIDR format. Aimed for the use in
templates.
*/
func (netdev *NetDevs) IpCIDR() string {
if netdev.Ipaddr.IsUnspecified() || netdev.Netmask.IsUnspecified() {
return ""
}
ipCIDR := net.IPNet{
IP: netdev.Ipaddr,
Mask: net.IPMask(netdev.Netmask),
}
return ipCIDR.String()
}

View File

@@ -71,7 +71,8 @@ func ObjectIsEmpty(obj interface{}) bool {
return false
}
} else if varType.Field(i).Type == reflect.TypeOf(map[string]string{}) {
if len(varVal.Field(i).Interface().(map[string]string)) != 0 {
if varVal.Field(i).Len() != 0 {
// if len(varVal.Field(i).Interface().(map[string]string)) != 0 {
return false
}
} else if varType.Field(i).Type.Kind() == reflect.Ptr {
@@ -83,13 +84,7 @@ func ObjectIsEmpty(obj interface{}) bool {
if len(val) != 0 && !val.IsUnspecified() {
return false
}
} else if varType.Field(i).Type == reflect.TypeOf(net.IPMask{}) {
o, b := varVal.Field(i).Interface().(net.IPMask).Size()
if o == 0 && b == 0 {
return false
}
}
}
return true
}