yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #71655
[Bug 1754062] Re: openstack client does not pass prefixlen when creating subnet
Reviewed: https://review.openstack.org/550588
Committed: https://git.openstack.org/cgit/openstack/neutron-lib/commit/?id=ce10b9df28ece6daee1f199740b672aae707630b
Submitter: Zuul
Branch: master
commit ce10b9df28ece6daee1f199740b672aae707630b
Author: Brian Haley <bhaley@xxxxxxxxxx>
Date: Wed Mar 7 15:08:42 2018 -0500
Add prefixlen to subnet api-ref for create actions
Prefixlen is used in subnet creation when allocating a subnet
from a subnet pool.
Change-Id: I251944ca15434ed9b17deb829cca985cd94a0bd1
Closes-bug: #1754062
** Changed in: neutron
Status: In Progress => Fix Released
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1754062
Title:
openstack client does not pass prefixlen when creating subnet
Status in neutron:
Fix Released
Status in OpenStack SDK:
New
Bug description:
Version: Pike
OpenStack Client: 3.12.0
When testing Subnet Pool functionality, I found that the behavior
between the openstack and neutron clients is different.
Subnet pool:
root@controller01:~# openstack subnet pool show MySubnetPool
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| address_scope_id | None |
| created_at | 2018-03-07T13:18:22Z |
| default_prefixlen | 8 |
| default_quota | None |
| description | |
| id | e49703d8-27f4-4a16-9bf4-91a6cf00fff3 |
| ip_version | 4 |
| is_default | False |
| max_prefixlen | 32 |
| min_prefixlen | 8 |
| name | MySubnetPool |
| prefixes | 172.31.0.0/16 |
| project_id | 9233b6b4f6a54386af63c0a7b8f043c2 |
| revision_number | 0 |
| shared | False |
| tags | |
| updated_at | 2018-03-07T13:18:22Z |
+-------------------+--------------------------------------+
When attempting to create a /28 subnet from that pool with the
openstack client, the following error is observed:
root@controller01:~# openstack subnet create \
> --subnet-pool MySubnetPool \
> --prefix-length 28 \
> --network MyVLANNetwork2 \
> MyFlatSubnetFromPool
HttpException: Internal Server Error (HTTP 500) (Request-ID: req-61b3f00a-9764-4bcb-899d-e85d66f54e5a), Failed to allocate subnet: Insufficient prefix space to allocate subnet size /8.
However, the same request is successful with the neutron client:
root@controller01:~# neutron subnet-create --subnetpool MySubnetPool --prefixlen 28 --name MySubnetFromPool MyVLANNetwork2
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
Created a new subnet:
+-------------------+-----------------------------------------------+
| Field | Value |
+-------------------+-----------------------------------------------+
| allocation_pools | {"start": "172.31.0.2", "end": "172.31.0.14"} |
| cidr | 172.31.0.0/28 |
| created_at | 2018-03-07T13:35:35Z |
| description | |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | 172.31.0.1 |
| host_routes | |
| id | 43cb9dda-1b7e-436d-9dc1-5312866a1b63 |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | MySubnetFromPool |
| network_id | e01ca743-607c-4a94-9176-b572a46fba84 |
| project_id | 9233b6b4f6a54386af63c0a7b8f043c2 |
| revision_number | 0 |
| service_types | |
| subnetpool_id | e49703d8-27f4-4a16-9bf4-91a6cf00fff3 |
| tags | |
| tenant_id | 9233b6b4f6a54386af63c0a7b8f043c2 |
| updated_at | 2018-03-07T13:35:35Z |
+-------------------+-----------------------------------------------+
The payload is different between these clients - the openstack client
fails to send the prefixlen key.
openstack client:
REQ: curl -g -i -X POST http://controller01:9696/v2.0/subnets -H "User-Agent: openstacksdk/0.9.17 keystoneauth1/3.1.0 python-requests/2.18.1 CPython/2.7.12" -H "Content-Type: application/json" -H "X-Auth-Token: {SHA1}ec04a71699eee2c70dc4abb35037de272523fef0" -d '{"subnet": {"network_id": "e01ca743-607c-4a94-9176-b572a46fba84", "ip_version": 4, "name": "MyFlatSubnetFromPool", "subnetpool_id": "e49703d8-27f4-4a16-9bf4-91a6cf00fff3"}}'
http://controller01:9696 "POST /v2.0/subnets HTTP/1.1" 500 160
neutron client:
REQ: curl -g -i -X POST http://controller01:9696/v2.0/subnets -H
"User-Agent: python-neutronclient" -H "Content-Type: application/json"
-H "Accept: application/json" -H "X-Auth-Token:
{SHA1}b3b6f0fa14c2b28c5c9784f857ee753455c1d375" -d '{"subnet":
{"network_id": "e01ca743-607c-4a94-9176-b572a46fba84", "prefixlen":
"28", "ip_version": 4, "subnetpool_id":
"e49703d8-27f4-4a16-9bf4-91a6cf00fff3", "name": "MySubnetFromPool"}}'
This appears to stem from prefixlen missing as a query parameter and
property in the python-openstacksdk here:
https://github.com/openstack/python-openstacksdk/blob/master/openstack/network/v2/subnet.py#L32
https://github.com/openstack/python-openstacksdk/blob/master/openstack/network/v2/subnet.py#L43
The Neutron docs do not show prefixlen as a subnet as a valid
property, which could be why:
https://developer.openstack.org/api-ref/network/v2/index.html#create-
subnet
I was able to patch the openstack SDK in my environment and got the
client to work. Please let me know if you have any questions!
To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1754062/+subscriptions
References