Propose a roadmap for replacing IP management code
This depends on a spec for storage plugins, but that is only for the pike sphinx infrastructure parts, not a dependency between the specs themselves. Change-Id: Ie5156b577337dc26855cb670f44e6956c0d8356b
This commit is contained in:
parent
575df2563e
commit
b594040340
|
@ -0,0 +1,154 @@
|
|||
Replace IP Generation Code
|
||||
##########################
|
||||
:date: 2017-1-11 22:00
|
||||
:tags: inventory, ip, networking
|
||||
|
||||
|
||||
The current inventory code uses a simple set to manage assigned IPs
|
||||
(``USED_IPS``) and complex queues to pull from the available subnets.
|
||||
|
||||
This code can be simplified and made more modular.
|
||||
|
||||
Launchpad blueprint:
|
||||
* https://blueprints.launchpad.net/openstack-ansible/+spec/replace-ip-generation
|
||||
|
||||
The current IP generation code is tightly couple to the configuration loading,
|
||||
writing, and inventory manipulation code. To help provide better, more focused
|
||||
test coverage, this code can be updated and replaced.
|
||||
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
The current IP generation code is difficult to maintain, despite mostly being
|
||||
`moved <https://review.openstack.org/#/c/392277/>`_ into a separate ``ip.py``
|
||||
module. The code uses the external ``Queue`` class, which is slightly more
|
||||
complex than necessary. The ``USED_IPS`` set and the pools of available IPs
|
||||
are not managed together, and could easily become out-of-sync.
|
||||
|
||||
New code has been written to add an `IPManager class`_, but it is not
|
||||
currently integrated into any other code. Such integration is a somewhat
|
||||
large task, and would be error-prone to do in a single review. This spec
|
||||
is intended to serve as a road map to guide small, focused changes towards
|
||||
using it.
|
||||
|
||||
Note that while the IPManager includes an API for external IPAM systems, this
|
||||
spec is only focused on using this class within the code, not on any sort of
|
||||
plugin system.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
An initial draft of new IP management code has been written in the `IPManager
|
||||
class`_.
|
||||
|
||||
After that, the existing ``get_ip_address``, and ``set_used_ips`` were
|
||||
refactored to still use the existing data structures, but in a way that
|
||||
would allow usage of the new IPManager class. See `review 403915`_.
|
||||
|
||||
Some refactors may be necessary for the IPManager class to facilitate this
|
||||
and further codify assumptions.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
The code be left as is, with the assumption that it will be replaced wholesale
|
||||
by some other system in the near future. That replacement might happen via
|
||||
plugins or a new inventory codebase. This has not been deeply explored in the
|
||||
context of the IP management/generation.
|
||||
|
||||
One such replacement system, for example, could be using LXD to entirely
|
||||
manage container creation, which is where IP generation is primarily used.
|
||||
|
||||
Playbook/Role impact
|
||||
--------------------
|
||||
|
||||
No noticeable impact on the playbooks and roles should be seen; this is
|
||||
largely facilitating code maintenance and should produce the same output.
|
||||
|
||||
Upgrade impact
|
||||
--------------
|
||||
|
||||
There should be no upgrade impact - the IPManager class should be loaded with
|
||||
the already-generated IP addresses in upgraded installations.
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
This change should not affect any sensitive data. It is unrelated to secret
|
||||
storage.
|
||||
|
||||
|
||||
Performance impact
|
||||
------------------
|
||||
|
||||
Generating IPs may be slightly faster, since this approach doesn't rely on
|
||||
delayed access from ``Queue`` objects. However, the overall runtime of the
|
||||
inventory is negligible in the overall speed of the system and hasn't been
|
||||
profiled.
|
||||
|
||||
End user impact
|
||||
---------------
|
||||
|
||||
This change would be invisible to users of the deployed cloud.
|
||||
|
||||
Deployer impact
|
||||
---------------
|
||||
|
||||
No configuration or output changes should be introduced. The current
|
||||
configurations should be used as-is.
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
This should improve quality of life for developers debugging the IP generation
|
||||
behavior.
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
This has no direct dependencies on other blueprints or specs.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
nolan-brubaker, IRC: palendae
|
||||
|
||||
Other contributors:
|
||||
steve-lewis, IRC: stevelle
|
||||
|
||||
Please add **IRC nicknames** where applicable.
|
||||
|
||||
Work items
|
||||
----------
|
||||
|
||||
* Refactor current IP loading/management functions to be amenable to replacing
|
||||
the data structures.
|
||||
|
||||
* Replace the data structures and update the objects being passed between
|
||||
functions.
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Unit and integration tests should be added for all code changes to confirm
|
||||
there are no regressions.
|
||||
|
||||
Documentation impact
|
||||
====================
|
||||
|
||||
Developer documentation should be updated to reflect the new mechanism used,
|
||||
preferably included with implementation patches.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
N/A
|
||||
|
||||
.. _`IPManager class`: https://review.openstack.org/#/c/397299/
|
||||
.. _`review 403915`: https://review.openstack.org/#/c/403915/
|
Loading…
Reference in New Issue