In order to support Python 3.7, pylint has to be updated to 2.0.0
minimum. Newer versions of Pylint enforce additional checkers which can
be addressed with some code refactoring rather than silently ignoring
them in pylintrc; except useless-object-inheritance which is required to
be silented so that we stay compatible with Python 2.x.
Load balancers were going in to ERROR when updating vip_qos_policy_id in
two different cases:
- QoS extension enabled: the VIP DB data model was incorrectly
constructed ('vip_qos_policy_id' where it should have been
- QoS extension disabled: setting an UUID or None would fail in the LB
update flow as the extension is disabled, and the API would return
HTTP 202 to the user.
A recent patch introduced parallel network configuration on load
balancer boot. However, this patch has a race condition between the
parallel booting amphora.
This patch corrects this by making the get amphora network configurations
task to work on a single amphora if one is presented to the task.
This patch adds support for flavor metadata validation by the amphora driver
and support for setting the load balancer topology via a flavor.
It also adds "flavor_id" to the load balancer table in the database.
Replace calls to the nova client with calls to the compute driver.
This will help non vm efforts (e.g. zune) and also make the code
easier to break up later.
Octavia had a regression where it was not longer compatible with older
versions of neutron due to a change for the VIP port ownership.
This patch fixes that regression by checking if the project-id extension
to neutron is persent.
These files will split with the current Octavia repo, before other parts
 Finish keepalived LVS jinja template for UDP support
 Extend the ability of amp agent for upload/refresh the keepalived
 Extend the db model and db table with necessary fields for met the new
 Add logic/workflow elements process in UDP cases
 Extend the existing API to access udp parameters in Listener API
 Extend the existing pool API to access the new option in
There seems to be a case where we successfully retrieve the port
but when we try to update it might be gone because someone deleted
the vip port manually while our delete was scheduled.
Octavia does the right thing and marks the LB in ERROR bu this
will make our delete a bit more resilient to outside interference.
We want to default to running all tox environments under python 3, so
set the basepython value in each environment.
We do not want to specify a minor version number, because we do not
want to have to update the file every time we upgrade python.
We do not want to set the override once in testenv, because that
breaks the more specific versions used in default environments like
py35 and py36.
This patch also updates pylint to 1.5.6 which is compatible with
In updating pylint we have some issues to correct, this patch addresses
those issues so the Octavia code passes pylint 1.5.6.
Signed-off-by: Doug Hellmann <firstname.lastname@example.org>
The base meta-class and no-op network driver had an incorrect plug_port
parameter compared to the allowed-address-pairs driver. This patch corrects
this and aligns the driver signatures.
This also fix build-openstack-sphinx-docs, there was a change introduced
in sphinx 1.6.6:
If the size of __init__.py is less than 2, then the module would be
skipped which will cause the sphinx consistency checking failing later.
The network no-op driver was not returning the required data for a
get_network_configs call which causes load balancer failover tests to
fail when using the no-op driver.
On listener create or delete we update the VIP security group rules to
reflect the addition or removal of the TCP port on the VIP.
In the unusual event that the security group is missing in neutron, even
listener delete calls would fail.
This patch allows listener deletes to continue if the security group is
missing from the VIP.
Floating IP model isn't used yet in-tree, but the conversion is tested,
and it could be used by various drivers (it is already used by the FLIP
An IndexError exception is raised when trying to get non-existing and
unique item resources via Neutron network driver.
Even though the exception is caught and raises a base.NetworkException
exception, it should raise an exception from
The 'message' class member in Exception was deprecated in PY2.6 and
removed in PY3.0 . Should Neutron code abandon its use of this
field, it will break current Octavia code.
This patch shields Octavia of such change, replacing exc.message
calls with exc.__str__().
 - https://www.python.org/dev/peps/pep-0352/
This patch extend Octavia v2 API to access qos_policy_id from neutron.
Users can pass it as 'vip_qos_policy_id' to Octavia request body to
create/update Loadbalancers, and the vrrp ports will have the qos
This patch modifies the Loadbalancer Post/Put request body and response
body. It also extends the 'vip' table with the new column named
'qos_policy_id' to store the qos_id from neutron.
Co-Authored-By: Reedip <email@example.com>
* Add support to resource names that contain underscores (e.g. qos_policy)
* Update _get_resources_by_filters to return a list of matches
* Add mock constants
It is possible that during the `_update_security_group_rules` operation,
the security group rule which is to be deleted gets removed by some
other external operation. If this happens, it raises a NotFound
exception is not handled which can lead to a load balancer stuck in
a PENDING_DELETE status.
The allowed address pairs network driver did not handle having objects
already deleted properly and would prematurely fail.
This patch improves the edge case handling of the driver.
Previously the neutron network driver was masking the actual error being
returned from neutron while doing a VIP port allocation.
This patch will pass through the neutron error to the user if it is
an API ready exception giving the user more useful information about the
error neutron is reporting. For example that the requested VIP address is
Octavia v2 API was failing to create the load balancer when the user
specified a VIP port ID.
This also improves the user experience when specifying a VIP address.
It also removes the un-used nova_network directory.
Right now the vip data isn't actually stored back to the DB, it just
looks like it is... So, actually it will create a port and then orphan
it, then create another port with a different IP later.
This patch updates the Octavia documentation in support of the
OpenStack documentation migration.
 https://specs.openstack.org/openstack/docs-specs/specs \
A loop to delete vip ports had an improperly scoped try block that
could, under the right circumstance lead to ports not getting deleted.
This patch fixes that scoping.
Co-Authored-By: Adam Harwell <firstname.lastname@example.org>
Currently, we can create LB instance with vip-subnet. But we create vrrp
port with neutron network using the default neutron behavior. So the port
may be different subnet with vip. This may be useless.
This patch create the vrrp in the same subnet.