From 5d27a33f4c8f6a9bc5f6ca20f844a124a5d8b223 Mon Sep 17 00:00:00 2001 From: aguilard Date: Thu, 2 Nov 2023 16:52:56 +0000 Subject: [PATCH] Fix bug 2302: IP ranges management in Azure not working properly OSM uses a specific vnet to create NS or VNF subnets when instantiating on Azure. The vnets allow more than one address prefix, but RO only try to allocate new subnets in the range defined in first place, ignoring the rest. Change-Id: I9792caf2a468e60b6762567a9b4a90d0f1646b39 Signed-off-by: aguilard --- RO-VIM-azure/osm_rovim_azure/vimconn_azure.py | 29 +++++++++++-------- .../notes/fix_bug_2302-3432828f06200186.yaml | 23 +++++++++++++++ 2 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 releasenotes/notes/fix_bug_2302-3432828f06200186.yaml diff --git a/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py b/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py index 15c3cadc..06bc9703 100755 --- a/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py +++ b/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py @@ -203,7 +203,7 @@ class vimconnector(vimconn.VimConnector): # Variable that indicates if client must be reloaded or initialized self.reload_client = True - self.vnet_address_space = None + self.vnet_address_space = [] # LOGGER self.logger = logging.getLogger("ro.vim.azure") @@ -407,7 +407,7 @@ class vimconnector(vimconn.VimConnector): vnet = self.conn_vnet.virtual_networks.get( self.vnet_resource_group or self.resource_group, self.vnet_name ) - self.vnet_address_space = vnet.address_space.address_prefixes[0] + self.vnet_address_space = vnet.address_space.address_prefixes self.vnet_id = vnet.id return @@ -424,7 +424,7 @@ class vimconnector(vimconn.VimConnector): "location": self.region, "address_space": {"address_prefixes": ["10.0.0.0/8"]}, } - self.vnet_address_space = "10.0.0.0/8" + self.vnet_address_space = ["10.0.0.0/8"] self.logger.debug("create base vnet: %s", self.vnet_name) self.conn_vnet.virtual_networks.begin_create_or_update( @@ -485,16 +485,21 @@ class vimconnector(vimconn.VimConnector): if ip_profile is None: # get a non used vnet ip range /24 and allocate automatically inside the range self.vnet_address_space used_subnets = self.get_network_list() - for ip_range in netaddr.IPNetwork(self.vnet_address_space).subnet(24): - for used_subnet in used_subnets: - subnet_range = netaddr.IPNetwork(used_subnet["cidr_block"]) - - if subnet_range in ip_range or ip_range in subnet_range: - # this range overlaps with an existing subnet ip range. Breaks and look for another + for space in self.vnet_address_space: + for ip_range in netaddr.IPNetwork(space).subnet(24): + for used_subnet in used_subnets: + subnet_range = netaddr.IPNetwork(used_subnet["cidr_block"]) + + if subnet_range in ip_range or ip_range in subnet_range: + # this range overlaps with an existing subnet ip range. Breaks and look for another + break + else: + ip_profile = {"subnet_address": str(ip_range)} + self.logger.debug( + "dinamically obtained ip_profile: %s", ip_range + ) break - else: - ip_profile = {"subnet_address": str(ip_range)} - self.logger.debug("dinamically obtained ip_profile: %s", ip_range) + if ip_profile is not None: break else: raise vimconn.VimConnException( diff --git a/releasenotes/notes/fix_bug_2302-3432828f06200186.yaml b/releasenotes/notes/fix_bug_2302-3432828f06200186.yaml new file mode 100644 index 00000000..0181013c --- /dev/null +++ b/releasenotes/notes/fix_bug_2302-3432828f06200186.yaml @@ -0,0 +1,23 @@ +####################################################################################### +# Copyright ETSI Contributors and Others. +# +# 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. +####################################################################################### +--- +fixes: + - | + Fix 2302: RO does not handle properly vnet IP ranges in Azure. + OSM uses a specific vnet to create NS or VNF subnets when instantiating on + Azure. The vnets allow more than one address prefix, but RO only try to + allocate new subnets in the range defined in first place, ignoring the rest. -- 2.17.1