diff --git a/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py b/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py index 15c3cadc349687c159f6f3668486478a89c162ff..06bc97031666e1a9c9a80c6cfb91032dacecc942 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 0000000000000000000000000000000000000000..0181013cfb90fea4cd59c2efdb972c02fb2d543b --- /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.