summaryrefslogtreecommitdiff
path: root/neutron_router_gateway
diff options
context:
space:
mode:
Diffstat (limited to 'neutron_router_gateway')
-rw-r--r--neutron_router_gateway70
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()
-
-