engine: resources: Improve net error messages

This is a common case of parse failures for not using CIDR. Make it
cleaner for the user.
This commit is contained in:
James Shubin
2023-11-21 00:06:55 -05:00
parent 029cfaf1f8
commit 53753c0932

View File

@@ -141,9 +141,12 @@ func (obj *NetRes) Validate() error {
// validate network address input
if obj.Addrs != nil {
for _, addr := range obj.Addrs {
for i, addr := range obj.Addrs {
if _, _, err := net.ParseCIDR(addr); err != nil {
return errwrap.Wrapf(err, "error parsing address: %s", addr)
if len(obj.Addrs) == 1 {
return errwrap.Wrapf(err, "error parsing addr")
}
return errwrap.Wrapf(err, "error parsing addrs[%d]", i)
}
}
}
@@ -678,11 +681,14 @@ func (obj *iface) kernelCheck(addrs []string) (bool, error) {
return false, errwrap.Wrapf(err, "error getting routes")
}
// check each route against each addr
for _, addr := range addrs {
for i, addr := range addrs {
routeOK = false
ip, ipNet, err := net.ParseCIDR(addr)
if err != nil {
return false, errwrap.Wrapf(err, "error parsing addr: %s", addr)
if len(addrs) == 1 {
return false, errwrap.Wrapf(err, "error parsing addr")
}
return false, errwrap.Wrapf(err, "error parsing addrs[%d]", i)
}
for _, r := range routes {
// if src, dst and protocol are correct, the kernel route exists
@@ -702,10 +708,13 @@ func (obj *iface) kernelCheck(addrs []string) (bool, error) {
// kernelApply adds or replaces each address' kernel route as necessary.
func (obj *iface) kernelApply(addrs []string) error {
// for each addr, add or replace the corresponding kernel route
for _, addr := range addrs {
for i, addr := range addrs {
ip, ipNet, err := net.ParseCIDR(addr)
if err != nil {
return errwrap.Wrapf(err, "error parsing addr: %s", addr)
if len(addrs) == 1 {
return errwrap.Wrapf(err, "error parsing addr")
}
return errwrap.Wrapf(err, "error parsing addrs[%d]", i)
}
// kernel route needed for the network to be reachable from a given ip
if err := netlink.RouteReplace(&netlink.Route{