Support multiple networks per cluster

Registered by Ryan Moe

Allow creation of multiple networks of all types (PXE, Public, Storage, Management) in order to support more complicated network topologies

Intended Workflow:

Cloud operator wants to deploy with leaf and spine network architecture:
  - Creates new cluster
  - Creates one node group per rack of machines
  - Creates networks for each node group and sets IP ranges each network
  - Boots machines
  - Nodes are automatically assigned to node groups based on DHCP address

Cloud operator wants to deploy using single L2 domain:
  - Current workflow will continue to work with no modifications.

Feature Lead: Ryan Moe
Mandatory Design Reviewers: Andrew Woodward, Aleksey Kasatkin
Developers: Andrew Woodward, Ryan Moe
QA: Yegor Kotko, Artem Panchenko

Whiteboard

Fuel-web: https://github.com/xarses/fuel-web [ml3]
Fuel-library: https://github.com/xarses/fuel-library [ml3]

https://review.openstack.org/#/c/98550/

Gerrit topic: https://review.openstack.org/#q,topic:bp/multiple-cluster-networks,n,z

Addressed by: https://review.openstack.org/83204
    WIP: Allow multiple networks to be created per cluster

Gerrit topic: https://review.openstack.org/#q,topic:bug/1272766,n,z

Addressed by: https://review.openstack.org/87400
    Multiple Cluster Networks: add ip rule route

Addressed by: https://review.openstack.org/87966
    Revert "Allow multiple networks to be created per cluster"

Addressed by: https://review.openstack.org/98550
    Blueprint: multiple-cluster-networks

Addressed by: https://review.openstack.org/99179
    Allow multiple networks to be created per cluster

Gerrit topic: https://review.openstack.org/#q,topic:bug/1272142,n,z

Addressed by: https://review.openstack.org/126359
    (WORK IN PROGRESS)Add multiple cluster networks support

Addressed by: https://review.openstack.org/131893
    Create un-used params to pass tests for multiple-cluster-networks

(?)

Work Items

Work items:
Design DOC: DONE
POC: DONE
Fuel-web: Support attaching multiple network sets to a cluster: DONE
Fuel-library: Support adding policy routes: DONE
Fuel-web: Serialize gateways for each network: DONE
Fuel-web: Serialize a route to the fuel-admin for the admin_interface to consume: DONE
Fuel-web: Serialize network routes for each network by networkgroup.name: DONE
Fuel-library: Support adding routes for each network: DONE
Fuel-web: Refactor rack_id into NodeGroups: DONE
Fuel-web/Cobbler: Make dnsmasq entries when a fuelweb_admin network is modified: POSTPONED
Fuel-web: Add API handler for assigning nodes to node groups: DONE
Fuel-client: Add support for creating node groups: DONE
Fuel-library: nodes should be assigned to an availability zone based which NodeGroup its a member of: POSTPONED
Fuel-web: Change UI to group networks by NodeGroup, only allow changes to nodegroups with out deployed nodes: POSTPONED

Dependency tree

* Blueprints in grey have been implemented.