diff options
Diffstat (limited to 'neutron_router_gateway')
-rw-r--r-- | neutron_router_gateway | 70 |
1 files changed, 31 insertions, 39 deletions
diff --git a/neutron_router_gateway b/neutron_router_gateway index 93235b8..3a9b7ce 100644 --- a/neutron_router_gateway +++ b/neutron_router_gateway @@ -82,16 +82,18 @@ EXAMPLES = ''' _os_keystone = None def _get_ksclient(module, kwargs): try: - kclient = ksclient.Client(username=kwargs.get('login_username'), - password=kwargs.get('login_password'), - tenant_name=kwargs.get('login_tenant_name'), - auth_url=kwargs.get('auth_url')) + kclient = ksclient.Client( + username=module.params.get('login_username'), + password=module.params.get('login_password'), + tenant_name=module.params.get('login_tenant_name'), + auth_url=module.params.get('auth_url'), + region_name=module.params.get('region_name')) except Exception as e: module.fail_json(msg = "Error authenticating to the keystone: %s " % e.message) global _os_keystone _os_keystone = kclient return kclient - + def _get_endpoint(module, ksclient): try: @@ -114,7 +116,7 @@ def _get_neutron_client(module, kwargs): module.fail_json(msg = "Error in connecting to neutron: %s " % e.message) return neutron -def _get_router_id(module, neutron): +def _get_router(module, neutron): kwargs = { 'name': module.params['router_name'], } @@ -124,7 +126,7 @@ def _get_router_id(module, neutron): module.fail_json(msg = "Error in getting the router list: %s " % e.message) if not routers['routers']: return None - return routers['routers'][0]['id'] + return routers['routers'][0] def _get_net_id(neutron, module): kwargs = { @@ -139,19 +141,6 @@ def _get_net_id(neutron, module): return None return networks['networks'][0]['id'] -def _get_port_id(neutron, module, router_id, network_id): - kwargs = { - 'device_id': router_id, - 'network_id': network_id, - } - try: - ports = neutron.list_ports(**kwargs) - except Exception as e: - module.fail_json( msg = "Error in listing ports: %s" % e.message) - if not ports['ports']: - return None - return ports['ports'][0]['id'] - def _add_gateway_router(neutron, module, router_id, network_id): kwargs = { 'network_id': network_id @@ -161,16 +150,16 @@ def _add_gateway_router(neutron, module, router_id, network_id): except Exception as e: module.fail_json(msg = "Error in adding gateway to router: %s" % e.message) return True - + def _remove_gateway_router(neutron, module, router_id): try: neutron.remove_gateway_router(router_id) except Exception as e: module.fail_json(msg = "Error in removing gateway to router: %s" % e.message) return True - + def main(): - + module = AnsibleModule( argument_spec = dict( login_username = dict(default='admin'), @@ -183,33 +172,36 @@ def main(): state = dict(default='present', choices=['absent', 'present']), ), ) - + neutron = _get_neutron_client(module, module.params) - router_id = _get_router_id(module, neutron) + router = _get_router(module, neutron) - if not router_id: + if not router: module.fail_json(msg="failed to get the router id, please check the router name") network_id = _get_net_id(neutron, module) if not network_id: module.fail_json(msg="failed to get the network id, please check the network name and make sure it is external") - + if module.params['state'] == 'present': - port_id = _get_port_id(neutron, module, router_id, network_id) - if not port_id: - _add_gateway_router(neutron, module, router_id, network_id) - module.exit_json(changed=True, result="created") - module.exit_json(changed=False, result="success") + if router.get('external_gateway_info') is None: + _add_gateway_router(neutron, module, router['id'], network_id) + module.exit_json(changed=True, updated=False, result="created") + else: + if router['external_gateway_info']['network_id'] == network_id: + module.exit_json(changed=False, updated=False, result="success") + else: + _remove_gateway_router(neutron, module, router['id']) + _add_gateway_router(neutron, module, router['id'], network_id) + module.exit_json(changed=True, updated=True, result="created") if module.params['state'] == 'absent': - port_id = _get_port_id(neutron, module, router_id, network_id) - if not port_id: - module.exit_json(changed=False, result="Success") - _remove_gateway_router(neutron, module, router_id) - module.exit_json(changed=True, result="Deleted") + if router.get('external_gateway_info') is None: + module.exit_json(changed=False, updated=False, result="success") + else: + _remove_gateway_router(neutron, module, router['id']) + module.exit_json(changed=True, updated=False, result="deleted") # this is magic, see lib/ansible/module.params['common.py from ansible.module_utils.basic import * main() - - |