This tool has been designed to migration A10 devices and their associated neutron lbaas objects from the Neutron database to Octavia.
pip install a10-nlbaas2oct
git clone git@github.com:a10networks/a10-nlbaas2oct.git
cd a10-nlbaas2oct
pip install -e .
Note: This tool must be installed on the host running neutron-lbaas
pip show a10-nlbaas2oct | grep "Location" | cp $(awk '{print $2}')/a10_nlbaas2oct/a10_nlbaas2oct.conf /path/to/another/directory
cp /path/to/a10-nlbaas2oct/a10_nlbaas2oct/a10_nlbaas2oct.conf /path/to/another/directory
[DEFAULT]
debug = True
[migration]
# Run without making changes
# trial_run = False
# Delete the load balancer records from neutron-lbaas after migration
# delete_after_migration = False
# Octavia service account ID or username (ex: admin)
octavia_account_id =
# Example db connection string:
# connection = mysql+pymysql://root:password@127.0.0.1:3306/octavia
# Replace 127.0.0.1 above with the IP address of the database used by the
# main octavia server. (Leave it as is if the database runs on this host.)
# Connection string for the keystone databas
keystone_db_connection =
# Connection string for the neutron database
neutron_db_connection =
# Connection string for the octavia database
octavia_db_connection =
# Connection string for the A10 database used in neutron lbaas env
# a10_nlbaas_db_connection =
# Connection string for the A10 database used in the octavia env
# a10_oct_connection =
# Default flavor-id that will be used for the loadbalancer in the run
# default_flavor_id =
# Comma seperated list of loadbalancer ids to migrate or cleanup
# lb_id_list =
# Comma separated list of flavor ids that will be used in parallel with the entries in lb_id_list
# flavor_id_list =
# Path to config file. Default is /etc/a10/config.py
a10_config_path = /etc/a10/config.py
The keystone_db_connection
can be found in the /etc/keystone/keystone.conf
file under the database
group.
[database]
connection = mysql+pymysql://root:password@127.0.0.1/keystone?charset=utf8
The neutron_db_connection
can be found in the /etc/neutron/neutron.conf
file under the database
group.
[database]
connection = mysql+pymysql://user:password@127.0.0.1/neutron?charset=utf8
The octavia_db_connection
can be found be found in the /etc/octavia/octavia.conf
file under the database
group.
[database]
connection = mysql+pymysql://root:password@127.0.0.1:3306/octavia
# Octavia service account ID or username (ex: admin)
octavia_account_id = admin
# Connection string for the keystone databas
keystone_db_connection = mysql+pymysql://root:password@127.0.0.1/keystone?charset=utf8
# Connection string for the neutron database
neutron_db_connection = mysql+pymysql://user:password@127.0.0.1/neutron?charset=utf8
# Connection string for the octavia database
octavia_db_connection = mysql+pymysql://root:password@127.0.0.1:3306/octavia
# Path to config file. Default is /etc/a10/config.py
a10_config_path = /etc/a10/config.py
# Octavia service account ID or username (ex: admin) octavia_account_id = admin # Connection string for the keystone databas keystone_db_connection = mysql+pymysql://root:password@127.0.0.1/keystone?charset=utf8 # Connection string for the neutron database neutron_db_connection = mysql+pymysql://user:password@127.0.0.1/neutron?charset=utf8 # Connection string for the octavia database octavia_db_connection = mysql+pymysql://root:password@ip_address_of_remote_host:3306/octavia # Path to config file. Default is /etc/a10/config.py a10_config_path = /etc/a10/config.py
# Octavia service account ID or username (ex: admin) octavia_account_id = admin # Connection string for the keystone databas keystone_db_connection = mysql+pymysql://root:password@127.0.0.1/keystone?charset=utf8 # Connection string for the neutron database neutron_db_connection = mysql+pymysql://user:password@127.0.0.1/neutron?charset=utf8 # Connection string for the octavia database octavia_db_connection = mysql+pymysql://root:password@ip_address_of_remote_host:3306/octavia # Path to config file. Default is /etc/a10/config.py a10_config_path = /etc/a10/config.py # Connection string for the A10 database used in neutron lbaas env a10_nlbaas_db_connection = mysql+pymysql://user:password@127.0.0.1/a10_db # Connection string for the A10 database used in the octavia env a10_oct_connection = mysql+pymysql://user:password@ip_address_of_remote_host/a10_db
# Octavia service account ID or username (ex: admin) octavia_account_id = admin # Connection string for the keystone database keystone_db_connection = mysql+pymysql://user:password@127.0.0.1/keystone?charset=utf8 # Connection string for the neutron database neutron_db_connection = mysql+pymysql://user:password@127.0.0.1/neutron?charset=utf8 # Connection string for the octavia database octavia_db_connection = mysql+pymysql://root:password@127.0.0.1:3306/octavia # Path to config file. Default is /etc/a10/config.py a10_config_path = /etc/a10/config.py
a10_nlbaas2oct --config-file /path/to/a10_nlbaas2oct.conf --lb-id <loadbalancer_id>
Note: This takes in the UUID of the loadbalancer not the name
a10_nlbaas2oct --config-file /path/to/a10_nlbaas2oct.conf --project-id <project_id>
Note: This takes in the UUID of the project not the name
a10_nlbaas2oct --config-file /path/to/a10_nlbaas2oct.conf --all
a10_nlbaas2oct --config-file /path/to/a10_nlbaas2oct.conf --lb-id <loadbalancer_id> --flavor-id <flavor_id>
There is a foreign key association with the VIP Port in the Neutron port table and the VIP entries in the Neutron lbaas_loadbalancer table. When performing a migration from Neutron LBaaS to Octavia, the VIPs are migrated to their own table and VIP port ownership is transferred to Octavia.
However, that foreign key relationship between VIP and VIP Port will still exist in the Neutron lbaas_loadbalancer table and the port table. Therefore, a delete action on either the load balancer in the Neutron LBaaS table or the Octavia will result in a failure due to the deadlocked foreign key state. As such, it is required that the Neutron LBaaS database entries are deleted or otherwise made inaccessible before performing delete
commands via Octavia.
a10_nlbaas2oct --config-file /path/to/a10_nlbaas2oct.conf [--lb-id <lb_id> | --all | --project-id <project_id>] --cleanup
This step is only necessary if the delete_after_migration
was not set to True
in the config.
The vast majority of this tooling was copied and modified from openstack's neutron-lbaas repo for ease of use purposes. The original can be found here https://github.com/openstack/neutron-lbaas/tree/stable/stein/tools/nlbaas2octavia