slackhq/nebula · error

entry %v.install in tun.unsafe_routes is not a boolean: %v

Error message

entry %v.install in tun.unsafe_routes is not a boolean: %v

What it means

Config validation error in parseUnsafeRoutes: the optional `install` key of the i+1-th entry could not be parsed by strconv.ParseBool — the YAML value is neither bool nor a recognized bool string form (1/t/TRUE etc.). Install defaults to true when absent.

Source

Thrown at overlay/route.go:279

				gateways[ig] = routing.NewGateway(gatewayIp, gatewayWeight)

			}

		default:
			return nil, fmt.Errorf("entry %v.via in tun.unsafe_routes is not a string or list of gateways: found %T", i+1, rVia)
		}

		rRoute, ok := m["route"]
		if !ok {
			return nil, fmt.Errorf("entry %v.route in tun.unsafe_routes is not present", i+1)
		}

		install := true
		rInstall, ok := m["install"]
		if ok {
			install, err = strconv.ParseBool(fmt.Sprintf("%v", rInstall))
			if err != nil {
				return nil, fmt.Errorf("entry %v.install in tun.unsafe_routes is not a boolean: %v", i+1, err)
			}
		}

		r := Route{
			Via:     gateways,
			MTU:     mtu,
			Metric:  metric,
			Install: install,
		}

		r.Cidr, err = netip.ParsePrefix(fmt.Sprintf("%v", rRoute))
		if err != nil {
			return nil, fmt.Errorf("entry %v.route in tun.unsafe_routes failed to parse: %v", i+1, err)
		}

		for _, network := range networks {
			if network.Contains(r.Cidr.Addr()) {
				return nil, fmt.Errorf(

View on GitHub (pinned to dd8f660c0a)

Solutions

  1. Write install as a YAML boolean (true/false)
  2. Remove the install key to keep the default true
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at overlay/route.go:279 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of slackhq/nebula@dd8f660c0a (2026-09-03). Data as JSON: /api/errors/42145ea92885a665. Report an issue: GitHub.