← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1754062] Re: openstack client does not pass prefixlen when creating subnet

 

Marking as fix released in openstacksdk with
https://review.opendev.org/#/c/550558/

** Changed in: python-openstacksdk
       Status: New => 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:
  Fix Released

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