Merge pull request #1818 from j2sol/no_ipv6_update_subnet
Handle non-updatable openstack subnet details
This commit is contained in:
commit
c579f53a15
1 changed files with 36 additions and 8 deletions
|
@ -144,9 +144,38 @@ EXAMPLES = '''
|
|||
ipv6_address_mode: dhcpv6-stateless
|
||||
'''
|
||||
|
||||
def _can_update(subnet, module, cloud):
|
||||
"""Check for differences in non-updatable values"""
|
||||
network_name = module.params['network_name']
|
||||
cidr = module.params['cidr']
|
||||
ip_version = int(module.params['ip_version'])
|
||||
ipv6_ra_mode = module.params['ipv6_ra_mode']
|
||||
ipv6_a_mode = module.params['ipv6_address_mode']
|
||||
|
||||
def _needs_update(subnet, module):
|
||||
if network_name:
|
||||
network = cloud.get_network(network_name)
|
||||
if network:
|
||||
netid = network['id']
|
||||
else:
|
||||
module.fail_json(msg='No network found for %s' % network_name)
|
||||
if netid != subnet['network_id']:
|
||||
module.fail_json(msg='Cannot update network_name in existing \
|
||||
subnet')
|
||||
if ip_version and subnet['ip_version'] != ip_version:
|
||||
module.fail_json(msg='Cannot update ip_version in existing subnet')
|
||||
if ipv6_ra_mode and subnet.get('ipv6_ra_mode', None) != ip_version:
|
||||
module.fail_json(msg='Cannot update ipv6_ra_mode in existing subnet')
|
||||
if ipv6_a_mode and subnet.get('ipv6_address_mode', None) != ipv6_a_mode:
|
||||
module.fail_json(msg='Cannot update ipv6_address_mode in existing \
|
||||
subnet')
|
||||
|
||||
def _needs_update(subnet, module, cloud):
|
||||
"""Check for differences in the updatable values."""
|
||||
|
||||
# First check if we are trying to update something we're not allowed to
|
||||
_can_update(subnet, module, cloud)
|
||||
|
||||
# now check for the things we are allowed to update
|
||||
enable_dhcp = module.params['enable_dhcp']
|
||||
subnet_name = module.params['name']
|
||||
pool_start = module.params['allocation_pool_start']
|
||||
|
@ -176,12 +205,12 @@ def _needs_update(subnet, module):
|
|||
return False
|
||||
|
||||
|
||||
def _system_state_change(module, subnet):
|
||||
def _system_state_change(module, subnet, cloud):
|
||||
state = module.params['state']
|
||||
if state == 'present':
|
||||
if not subnet:
|
||||
return True
|
||||
return _needs_update(subnet, module)
|
||||
return _needs_update(subnet, module, cloud)
|
||||
if state == 'absent' and subnet:
|
||||
return True
|
||||
return False
|
||||
|
@ -245,7 +274,8 @@ def main():
|
|||
subnet = cloud.get_subnet(subnet_name)
|
||||
|
||||
if module.check_mode:
|
||||
module.exit_json(changed=_system_state_change(module, subnet))
|
||||
module.exit_json(changed=_system_state_change(module, subnet,
|
||||
cloud))
|
||||
|
||||
if state == 'present':
|
||||
if not subnet:
|
||||
|
@ -261,16 +291,14 @@ def main():
|
|||
ipv6_address_mode=ipv6_a_mode)
|
||||
changed = True
|
||||
else:
|
||||
if _needs_update(subnet, module):
|
||||
if _needs_update(subnet, module, cloud):
|
||||
cloud.update_subnet(subnet['id'],
|
||||
subnet_name=subnet_name,
|
||||
enable_dhcp=enable_dhcp,
|
||||
gateway_ip=gateway_ip,
|
||||
dns_nameservers=dns,
|
||||
allocation_pools=pool,
|
||||
host_routes=host_routes,
|
||||
ipv6_ra_mode=ipv6_ra_mode,
|
||||
ipv6_address_mode=ipv6_a_mode)
|
||||
host_routes=host_routes)
|
||||
changed = True
|
||||
else:
|
||||
changed = False
|
||||
|
|
Loading…
Reference in a new issue