Neutron IPAM

Registered by Sumit Naiksatam

Currently most (if not all) Neutron plugins leverage an IPAM implementation that is embedded in the db_plugin base implementation. While this works well in a self contained system, it makes it difficult to integrate with an external IPAM backend.

The proposal is to hash out an IPAM interface derived from the existing IPAM-related interfaces defined in the db_plugin and refactor the current implementation into a configurable IPAM driver. One can then envision implementing and configuring additional independent drivers to external IPAM backends as well.

The resulting pluggable IPAM subsystem in Neutron will allow flexible control over the lifecycle of network resources such as

● fixed IP addresses assigned to Neutron ports
● floating IP addresses
● tenant networks
● network address ranges i.e. sub-networks

This will provide a sophisticated network resource management framework while simplifying the integration with 3rd party and end user developed IPAM solutions.

The blueprint’s technical specification will cover the following:

● IPAM subsystem interface specification (internal API used by other parts of Neutron)
● Identification of integration points between Neutron sub services (e.g. L3, load balancing, etc): API calls, events, data models.
● Interaction scenarios between DHCP agent and IPAM
● List of directives used for general configuration of IPAM subsystem
● Description of Neutron API extensions if necessary, client library extension is implied
● Out-of-box IPv6 compatibility
● Modularized implementation

Blueprint information

Status:
Complete
Approver:
Kyle Mestery
Priority:
Essential
Drafter:
Sumit Naiksatam
Direction:
Approved
Assignee:
John Belamaric
Definition:
Approved
Series goal:
Accepted for liberty
Implementation:
Implemented
Milestone target:
milestone icon 7.0.0
Started by
Sumit Naiksatam
Completed by
Kyle Mestery

Related branches

Sprints

Whiteboard

March-24 (mestery): Moving to Liberty.

March-18 (mestery): FFE for Kilo, moving to essential and RC1.

December-15 (mestery): Kilo-3.

(mestery): Please do not set milestones until the BP is approved in neutron-specs.

Please propose a specification in the Neutron specs repository following the guidelines here: https://wiki.openstack.org/wiki/Blueprints#Neutron

There is specification proposed here: https://review.openstack.org/#/c/97967/

Gerrit topic: https://review.openstack.org/#q,topic:bp/neutron-ipam,n,z

Addressed by: https://review.openstack.org/132313
    Implements: blueprint neutron-ipam

Addressed by: https://review.openstack.org/134339
    WIP Straw man for IPAM interface

Addressed by: https://review.openstack.org/147479
    Implement IPAM Driver loader

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

Gerrit topic: https://review.openstack.org/#q,topic:reference-ipam-driver,n,z

Addressed by: https://review.openstack.org/153236
    Refactor db_base_plugin_v2.py to use new IPAM

Addressed by: https://review.openstack.org/150485
    wip ipam reference driver

Gerrit topic: https://review.openstack.org/#q,topic:bp/subnet-allocation,n,z

Gerrit topic: https://review.openstack.org/#q,topic:bp/reference-ipam-driver,n,z

Addressed by: https://review.openstack.org/169098
    Add IPAM blueprints to Liberty

Addressed by: https://review.openstack.org/172443
    WIP Alternate Refactoring for Pluggable IPAM

Addressed by: https://review.openstack.org/181023
    Enable pluggable IPAM implementation by default

Addressed by: https://review.openstack.org/183099
    Add Pluggable IPAM Backend

Addressed by: https://review.openstack.org/184166
    Refactor and decompose db_base_plugin_v2.py

Addressed by: https://review.openstack.org/184170
    Refactor and decompose db_base_plugin_v2.py

Addressed by: https://review.openstack.org/187961
    Decompose db_base_plugin_v2.py

Addressed by: https://review.openstack.org/188754
    Decompose db_base_plugin_v2.py part 2

Addressed by: https://review.openstack.org/189299
    Decompose db_base_plugin_v2.py with changes

Addressed by: https://review.openstack.org/190162
    Refactor _update_ips_for_port()

Addressed by: https://review.openstack.org/190195
    Refactor update_port in db_base_plugin_v2

Addressed by: https://review.openstack.org/190623
    Use sets to calculate added/original/removed ips

Addressed by: https://review.openstack.org/190668
    Refactor _update_subnet_allocation_pools

Addressed by: https://review.openstack.org/192620
    Convert rebuilding ranges to instance method

Addressed by: https://review.openstack.org/192663
    Add request factory for pluggable IPAM

Addressed by: https://review.openstack.org/192738
    Remove _check_ip_in_allocation_pool

Addressed by: https://review.openstack.org/193075
    Move _add_auto_addrs_on_network_ports

Addressed by: https://review.openstack.org/193097
    Decompose create_port and save_subnet

Addressed by: https://review.openstack.org/193106
    Move _delete_port

Addressed by: https://review.openstack.org/193595
    Decompose _create_subnet_from_pool

Addressed by: https://review.openstack.org/194566
    Bulk move methods to ipam_backend_mixin.py

Addressed by: https://review.openstack.org/194605
    Decompose _save_subnet

Addressed by: https://review.openstack.org/194636
    Use SubnetRequestFactory for generating request

Addressed by: https://review.openstack.org/195012
    Fixing indentation and typo in comments

Addressed by: https://review.openstack.org/195602
    Extend SubnetRequestFactory to access subnet dict

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

Addressed by: https://review.openstack.org/196097
    Merge remote-tracking branch 'origin/master' into merge-qos

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

Addressed by: https://review.openstack.org/196701
    Merge remote-tracking branch 'origin/master' into merge-branch

Addressed by: https://review.openstack.org/196920
    Merge remote-tracking branch 'origin/master' into merge-branch

Addressed by: https://review.openstack.org/197090
    Collapse create_subnet into single method

Gerrit topic: https://review.openstack.org/#q,topic:bp/restructure-l2-agent,n,z

Addressed by: https://review.openstack.org/197751
    Merge remote-tracking branch 'origin/master' into merge-branch

Addressed by: https://review.openstack.org/197950
    Track allocation_pools in SubnetRequest

Addressed by: https://review.openstack.org/198777
    Add Pluggable IPAM Backend Part 1

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

Addressed by: https://review.openstack.org/200163
    Merge remote-tracking branch 'origin/master' into merge-branch

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

Addressed by: https://review.openstack.org/201131
    Merge remote-tracking branch 'origin/master' into merge-branch

Addressed by: https://review.openstack.org/206064
    Cleanup IPAM tests

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

Addressed by: https://review.openstack.org/207903
    Merge remote-tracking branch 'origin/master' into merge-branch

Addressed by: https://review.openstack.org/277767
    Add script for migrating to reference ipam driver

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.