Merge "Add information to network ip availabilities"

This commit is contained in:
Zuul
2025-12-10 12:22:24 +00:00
committed by Gerrit Code Review
8 changed files with 166 additions and 14 deletions

View File

@@ -8,6 +8,14 @@ The extension ``network-ip-availability`` allows users to list and show the
network IP usage stats of all networks or of a specified network.
By default policy configuration, only administrative users can use this API.
Network IP availability detail
==============================
The ``network-ip-availability-detail`` extension adds the
``ip_availability_details`` attribute to network IP availabilities. The value
of this attribute contains detailed information about the network IP usage
statistics.
Show Network IP Availability
============================
@@ -43,6 +51,7 @@ Response Parameters
- project_id: project_id
- total_ips: total_ips
- used_ips: used_ips
- ip_availability_details: ip_availability_details
- subnet_ip_availability: subnet_ip_availability
- subnet_id: network_ip_availability-subnet_id
- subnet_name: subnet_name
@@ -94,6 +103,7 @@ Response Parameters
- project_id: project_id
- total_ips: total_ips
- used_ips: used_ips
- ip_availability_details: ip_availability_details
- subnet_ip_availability: subnet_ip_availability
- subnet_id: network_ip_availability-subnet_id
- subnet_name: subnet_name

View File

@@ -4249,6 +4249,19 @@ ip_allocation:
in: body
required: true
type: string
ip_availability_details:
description: |
The detailed information of IP availability for a network. This field
includes the following attributes: ``total_ips_in_subnet`` is the number
of available IPs in the subnet cidr, ``total_ips_in_allocation_pool`` is
the sum of available IPs in each allocation pool (0 if there are no
allocation pools), ``used_ips_in_subnet`` is the number of used IPs in the
subnet (does not consider allocation pools), and
``used_ips_in_allocation_pool`` is the sum of used IPs in each allocation
pool (0 if there are no allocation pools).
in: body
required: true
type: dict
ip_version:
description: |
The IP protocol version. Valid value is ``4`` or

View File

@@ -9,8 +9,14 @@
"ip_version": 6,
"subnet_id": "ca3f46c4-c6ff-4272-9be4-0466f84c6077",
"subnet_name": "ipv6-public-subnet",
"total_ips": 18446744073709552000,
"used_ips": 1
"total_ips": 18446744073709551000,
"used_ips": 1,
"ip_availability_details": {
"total_ips_in_subnet": 18446744073709551616,
"total_ips_in_allocation_pool": 18446744073709551000,
"used_ips_in_subnet": 1,
"used_ips_in_allocation_pool": 1
}
},
{
"cidr": "172.24.4.0/24",
@@ -18,13 +24,25 @@
"subnet_id": "cc02efc1-9d47-46bd-bab6-760919c836b5",
"subnet_name": "public-subnet",
"total_ips": 253,
"used_ips": 1
"used_ips": 1,
"ip_availability_details": {
"total_ips_in_subnet": 254,
"total_ips_in_allocation_pool": 253,
"used_ips_in_subnet": 1,
"used_ips_in_allocation_pool": 1
}
}
],
"project_id": "1a02cc95f1734fcc9d3c753818f03002",
"tenant_id": "1a02cc95f1734fcc9d3c753818f03002",
"total_ips": 18446744073709552253,
"used_ips": 2
"total_ips": 18446744073709551253,
"used_ips": 2,
"ip_availability_details": {
"total_ips_in_subnet": 18446744073709551870,
"total_ips_in_allocation_pool": 18446744073709551253,
"used_ips_in_subnet": 2,
"used_ips_in_allocation_pool": 2
}
},
{
"network_id": "6801d9c8-20e6-4b27-945d-62499f00002e",
@@ -36,21 +54,39 @@
"subnet_id": "44e70d00-80a2-4fb1-ab59-6190595ceb61",
"subnet_name": "private-subnet",
"total_ips": 253,
"used_ips": 2
"used_ips": 2,
"ip_availability_details": {
"total_ips_in_subnet": 254,
"total_ips_in_allocation_pool": 253,
"used_ips_in_subnet": 2,
"used_ips_in_allocation_pool": 1
}
},
{
"ip_version": 6,
"cidr": "fdbf:ac66:9be8::/64",
"subnet_id": "a90623df-00e1-4902-a675-40674385d74c",
"subnet_name": "ipv6-private-subnet",
"total_ips": 18446744073709552000,
"used_ips": 2
"total_ips": 18446744073709551000,
"used_ips": 2,
"ip_availability_details": {
"total_ips_in_subnet": 18446744073709551616,
"total_ips_in_allocation_pool": 18446744073709551000,
"used_ips_in_subnet": 2,
"used_ips_in_allocation_pool": 1
}
}
],
"project_id": "d56d3b8dd6894a508cf41b96b522328c",
"tenant_id": "d56d3b8dd6894a508cf41b96b522328c",
"total_ips": 18446744073709552253,
"used_ips": 4
"total_ips": 18446744073709551253,
"used_ips": 4,
"ip_availability_details": {
"total_ips_in_subnet": 18446744073709551870,
"total_ips_in_allocation_pool": 18446744073709551253,
"used_ips_in_subnet": 4,
"used_ips_in_allocation_pool": 2
}
}
]
}

View File

@@ -8,7 +8,13 @@
"subnet_name": "private-subnet",
"ip_version": 4,
"cidr": "10.0.0.0/24",
"total_ips": 253
"total_ips": 253,
"ip_availability_details": {
"total_ips_in_subnet": 254,
"total_ips_in_allocation_pool": 253,
"used_ips_in_subnet": 2,
"used_ips_in_allocation_pool": 1
}
},
{
"used_ips": 2,
@@ -16,13 +22,25 @@
"subnet_name": "ipv6-private-subnet",
"ip_version": 6,
"cidr": "fdbf:ac66:9be8::/64",
"total_ips": 18446744073709552000
"total_ips": 18446744073709551000,
"ip_availability_details": {
"total_ips_in_subnet": 18446744073709551616,
"total_ips_in_allocation_pool": 18446744073709551000,
"used_ips_in_subnet": 2,
"used_ips_in_allocation_pool": 1
}
}
],
"network_id": "6801d9c8-20e6-4b27-945d-62499f00002e",
"project_id": "d56d3b8dd6894a508cf41b96b522328c",
"tenant_id": "d56d3b8dd6894a508cf41b96b522328c",
"total_ips": 18446744073709552253,
"network_name": "private"
"total_ips": 18446744073709551253,
"network_name": "private",
"ip_availability_details": {
"total_ips_in_subnet": 18446744073709551870,
"total_ips_in_allocation_pool": 18446744073709551253,
"used_ips_in_subnet": 4,
"used_ips_in_allocation_pool": 2
}
}
}

View File

@@ -84,6 +84,7 @@ from neutron_lib.api.definitions import network_availability_zone
from neutron_lib.api.definitions import network_cascade_delete
from neutron_lib.api.definitions import network_ha
from neutron_lib.api.definitions import network_ip_availability
from neutron_lib.api.definitions import network_ip_availability_details
from neutron_lib.api.definitions import network_mtu
from neutron_lib.api.definitions import network_mtu_writable
from neutron_lib.api.definitions import network_segment_range
@@ -249,6 +250,7 @@ _ALL_API_DEFINITIONS = {
network_cascade_delete,
network_ha,
network_ip_availability,
network_ip_availability_details,
network_mtu,
network_mtu_writable,
network_segment_range,

View File

@@ -0,0 +1,41 @@
# Copyright 2025 Samsung SDS. All Rights Reserved
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from neutron_lib.api.definitions import network_ip_availability
IP_AVAILABILITY_DETAILS = "ip_availability_details"
ALIAS = 'network-ip-availability-details'
IS_SHIM_EXTENSION = False
IS_STANDARD_ATTR_EXTENSION = False
NAME = 'Network IP Availability Details Extension'
DESCRIPTION = ('Add ip_availability_details attribute to'
' network-ip-availabilities resource.')
UPDATED_TIMESTAMP = '2025-10-31T00:00:00-00:00'
RESOURCE_ATTRIBUTE_MAP = {
network_ip_availability.RESOURCE_PLURAL: {
IP_AVAILABILITY_DETAILS: {
'allow_post': False, 'allow_put': False,
'is_visible': True
}
}
}
SUB_RESOURCE_ATTRIBUTE_MAP = {}
ACTION_MAP = {}
REQUIRED_EXTENSIONS = [network_ip_availability.ALIAS]
OPTIONAL_EXTENSIONS = []
ACTION_STATUS = {}

View File

@@ -0,0 +1,25 @@
# Copyright 2025 Samsung SDS. All Rights Reserved
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api.definitions import network_ip_availability
from neutron_lib.api.definitions import network_ip_availability_details
from neutron_lib.tests.unit.api.definitions import base
class NetworkIPAvailabilityDetailsDefinitionTestCase(
base.DefinitionBaseTestCase):
extension_module = network_ip_availability_details
extension_resources = (network_ip_availability.RESOURCE_PLURAL,)
extension_attributes = (
network_ip_availability_details.IP_AVAILABILITY_DETAILS,)

View File

@@ -0,0 +1,7 @@
---
features:
- |
Add a new API extension, ``network-ip-availability-details``, that adds
the ``ip_availability_details`` attribute to network IP availabilities.
The value of this attribute contains detailed information about the
network IP usage statistics.