OpenStack: Extend public IP range

Show subnet details
openstack subnet list --network public
openstack subnet show public-10.0.0.0/24

Modify database
DB_PASS=$(grep neutron_database_password /etc/kolla/passwords.yml | cut -d " " -f2)
mysql -h db.service.example.com --password=${DB_PASS} -P 6033 -u neutron -D neutron
select * from neutron.subnets where cidr like '10.0.0%';
update subnets set cidr='10.0.0.0/23' WHERE cidr = '10.0.0.0/24';
exit;

# update subnet name
openstack subnet set --name public-10.0.0.0/23 public-10.0.0.0/24

# extend allocation-pool
openstack subnet set --allocation-pool start=10.0.0.255,end=10.0.1.254 public-10.0.0.0/23

# show subnet details
openstack subnet show public-10.0.0.0/23

Restart network agent
OS_HOST=node1.example.com

for OS_AGENT_TYPE in dhcp l3 open-vswitch; do
openstack network agent set --disable $(openstack network agent list --agent-type ${OS_AGENT_TYPE} --host ${OS_HOST} -c ID -f value)
sleep 3
done
openstack network agent list --host ${OS_HOST}

for OS_AGENT_TYPE in dhcp l3 open-vswitch; do
openstack network agent set --enable $(openstack network agent list --agent-type ${OS_AGENT_TYPE} --host ${OS_HOST} -c ID -f value)
sleep 3
done
openstack network agent list

Debug
ssh nodeX.example.com

watch -n 1 'for NS in $(ip netns | cut -d" " -f1); do ip netns exec ${NS} ip a | grep 10.0; done'

for NS in $(ip netns | cut -d" " -f1); do
ip netns exec ${NS} ip a | grep 10.0
done #> /tmp/ip_netns_a.out

for NS in $(ip netns | cut -d" " -f1); do
ip netns exec ${NS} ip r | grep 10.0
done #> /tmp/ip_netns_r.out

tail -f /var/lib/docker/volumes/kolla_logs/_data/openvswitch/ovs*

Links
https://docs.openstack.org/python-openstackclient/rocky/cli/command-objects/subnet.html#subnet-set
https://cloudblog.switch.ch/2015/09/22/hack-neutron-to-add-more-ip-addresses-to-an-existing-subnet/
http://jodies.de/ipcalc