Skip to content
Snippets Groups Projects
Commit eef6ef54 authored by aguilard's avatar aguilard
Browse files

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: default avataraguilard <e.dah.tid@telefonica.com>
(cherry picked from commit 5d27a33f)
parent f6fbe425
No related branches found
No related tags found
No related merge requests found
......@@ -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(
......
#######################################################################################
# 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.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment