mirror of
https://opendev.org/openstack/ansible-collections-openstack.git
synced 2026-03-26 21:43:02 +00:00
Only apply necessary changes to subnets
Previously, all subnet properties were updated if any value did not match. But this behaviour caused errors like e.g. "Current gateway ip 192.168.0.1 already in use by port [ID]. Unable to update." even if that gateway was not about to be changed. Task: 40927 Story: 2008172 Change-Id: I049b0dade4c7ea3e1ef24777ae558f650caa136c
This commit is contained in:
committed by
Shnaidman Sagi (Sergey)
parent
a89ec027b0
commit
ce421fe370
@@ -37,6 +37,7 @@
|
||||
name: "{{ subnet_name }}"
|
||||
state: present
|
||||
cidr: 192.168.0.0/24
|
||||
gateway_ip: 192.168.0.1
|
||||
allocation_pool_start: 192.168.0.2
|
||||
allocation_pool_end: 192.168.0.8
|
||||
|
||||
|
||||
@@ -221,35 +221,37 @@ class SubnetModule(OpenStackModule):
|
||||
no_gateway_ip = self.params['no_gateway_ip']
|
||||
dns = self.params['dns_nameservers']
|
||||
host_routes = self.params['host_routes']
|
||||
curr_pool = dict(start=pool_start, end=pool_end)
|
||||
if pool_start and pool_end:
|
||||
pool = dict(start=pool_start, end=pool_end)
|
||||
else:
|
||||
pool = None
|
||||
|
||||
changes = dict()
|
||||
if subnet['enable_dhcp'] != enable_dhcp:
|
||||
return True
|
||||
changes['enable_dhcp'] = enable_dhcp
|
||||
if subnet_name and subnet['name'] != subnet_name:
|
||||
return True
|
||||
if not subnet['allocation_pools'] and pool_start and pool_end:
|
||||
return True
|
||||
if subnet['allocation_pools'] != [curr_pool]:
|
||||
return True
|
||||
changes['subnet_name'] = subnet_name
|
||||
if pool and (not subnet['allocation_pools'] or subnet['allocation_pools'] != [pool]):
|
||||
changes['allocation_pools'] = [pool]
|
||||
if gateway_ip and subnet['gateway_ip'] != gateway_ip:
|
||||
return True
|
||||
changes['gateway_ip'] = gateway_ip
|
||||
if dns and sorted(subnet['dns_nameservers']) != sorted(dns):
|
||||
return True
|
||||
changes['dns_nameservers'] = dns
|
||||
if host_routes:
|
||||
curr_hr = sorted(subnet['host_routes'], key=lambda t: t.keys())
|
||||
new_hr = sorted(host_routes, key=lambda t: t.keys())
|
||||
if curr_hr != new_hr:
|
||||
return True
|
||||
changes['host_routes'] = host_routes
|
||||
if no_gateway_ip and subnet['gateway_ip']:
|
||||
return True
|
||||
return False
|
||||
changes['disable_gateway_ip'] = no_gateway_ip
|
||||
return changes
|
||||
|
||||
def _system_state_change(self, subnet, filters=None):
|
||||
state = self.params['state']
|
||||
if state == 'present':
|
||||
if not subnet:
|
||||
return True
|
||||
return self._needs_update(subnet, filters)
|
||||
return bool(self._needs_update(subnet, filters))
|
||||
if state == 'absent' and subnet:
|
||||
return True
|
||||
return False
|
||||
@@ -334,15 +336,9 @@ class SubnetModule(OpenStackModule):
|
||||
subnet = self.conn.create_subnet(network_name, **kwargs)
|
||||
changed = True
|
||||
else:
|
||||
if self._needs_update(subnet, filters):
|
||||
subnet = self.conn.update_subnet(subnet['id'],
|
||||
subnet_name=subnet_name,
|
||||
enable_dhcp=enable_dhcp,
|
||||
gateway_ip=gateway_ip,
|
||||
disable_gateway_ip=no_gateway_ip,
|
||||
dns_nameservers=dns,
|
||||
allocation_pools=pool,
|
||||
host_routes=host_routes)
|
||||
changes = self._needs_update(subnet, filters)
|
||||
if changes:
|
||||
subnet = self.conn.update_subnet(subnet['id'], **changes)
|
||||
changed = True
|
||||
else:
|
||||
changed = False
|
||||
|
||||
Reference in New Issue
Block a user