Default gateway (per-subnet) should have a metric value

Right now, MAAS correctly models static routes with a ‘metric’ value. On deployment, every static route can be added to the kernel, and if there is a conflict the route with the lowest metric is selected.

The default gateway is a route. It just happens to be a special case route of least preference (because it has the shortest possible prefix length). Even least-preference routes should be able to have a metric, for two reasons:

  • In case we want to add every default gateway to the kernel, then the kernel will know which one to select in case of an unreachable gateway.

  • In case we can only add one gateway, we can pick the lowest-metric route to supply to the deployment.

Currently having two subnets with a default gw results in two default routes like these being deployed:

default via 10.0.0.1 dev eth1 proto static
default via 10.0.1.1 dev eth0 proto static

We should have a metric here to be able to explicitly prio default routes

Note this is a cross-post from https://bugs.launchpad.net/maas/+bug/1674866

@chrome0, insightful. thanks for the input.