Fix Dummy driver fails to get subnet_allocations
With the addition of support to multiple subnets per AZ, backend_details structure was changed in Dummy driver to store multiple subnet primary and secondary public ips in a subnet_allocations list dumped to a json string, breaking upgrading environments that already contains pre-existent share servers in old format. This change fixes the issue by checking if subnet_allocations does exist, otherwise ensure backward compatibility by reading public ips information in the old format. Change-Id: I547de2f4cd82744ecc1cc8180f8cefdf5ec485b4
This commit is contained in:
parent
aaead1795c
commit
785016eb74
@ -195,11 +195,31 @@ class DummyDriver(driver.ShareDriver):
|
||||
"is_admin_only": is_admin_only,
|
||||
}
|
||||
|
||||
def _get_subnet_allocations_from_backend_details(self, backend_details):
|
||||
"""Reads subnet_allocations info from backend details"""
|
||||
# NOTE(sfernand): Ensure backward compatibility for share servers
|
||||
# created prior to the addition of support to multiple subnets per AZ,
|
||||
# by read ip information using the old format in case
|
||||
# subnet_allocations does not exist.
|
||||
if 'subnet_allocations' in backend_details:
|
||||
subnet_allocations = jsonutils.loads(
|
||||
backend_details['subnet_allocations'])
|
||||
else:
|
||||
subnet_allocations = [{
|
||||
'primary_public_ip':
|
||||
backend_details['primary_public_ip'],
|
||||
'secondary_public_ip':
|
||||
backend_details['secondary_public_ip']
|
||||
}]
|
||||
return subnet_allocations
|
||||
|
||||
def _generate_export_locations(self, mountpoint, share_server=None):
|
||||
if share_server:
|
||||
subnet_allocations = jsonutils.loads(
|
||||
share_server["backend_details"]["subnet_allocations"])
|
||||
service_ip = share_server["backend_details"]["service_ip"]
|
||||
backend_details = share_server['backend_details']
|
||||
subnet_allocations = (
|
||||
self._get_subnet_allocations_from_backend_details(
|
||||
backend_details))
|
||||
service_ip = backend_details["service_ip"]
|
||||
else:
|
||||
subnet_allocations = [{
|
||||
"primary_public_ip": "10.0.0.10",
|
||||
@ -857,8 +877,10 @@ class DummyDriver(driver.ShareDriver):
|
||||
raise exception.ShareBackendException(msg=msg)
|
||||
|
||||
ips = [server_details['service_ip']]
|
||||
subnet_allocations = jsonutils.loads(
|
||||
server_details['subnet_allocations'])
|
||||
|
||||
subnet_allocations = (
|
||||
self._get_subnet_allocations_from_backend_details(server_details))
|
||||
|
||||
for subnet_allocation in subnet_allocations:
|
||||
ips += list(subnet_allocation.values())
|
||||
return ips
|
||||
@ -934,8 +956,10 @@ class DummyDriver(driver.ShareDriver):
|
||||
self, context, share_server, current_network_allocations,
|
||||
new_network_allocations, security_services, shares, snapshots):
|
||||
|
||||
subnet_allocations = jsonutils.loads(
|
||||
share_server['backend_details']['subnet_allocations'])
|
||||
backend_details = share_server['backend_details']
|
||||
subnet_allocations = (
|
||||
self._get_subnet_allocations_from_backend_details(backend_details))
|
||||
|
||||
subnet_allocations.append({
|
||||
'primary_public_ip': new_network_allocations[
|
||||
'network_allocations'][0]['ip_address'],
|
||||
@ -945,7 +969,7 @@ class DummyDriver(driver.ShareDriver):
|
||||
new_server = {
|
||||
"backend_details": {
|
||||
"subnet_allocations": jsonutils.dumps(subnet_allocations),
|
||||
"service_ip": share_server["backend_details"]["service_ip"],
|
||||
"service_ip": backend_details["service_ip"],
|
||||
}
|
||||
}
|
||||
shares_updates = {}
|
||||
|
Loading…
Reference in New Issue
Block a user