diff options
Diffstat (limited to 'neutron_network')
-rw-r--r-- | neutron_network | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/neutron_network b/neutron_network index 6dee045..a9640d2 100644 --- a/neutron_network +++ b/neutron_network @@ -121,16 +121,18 @@ _os_tenant_id = 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: @@ -155,15 +157,18 @@ def _get_neutron_client(module, kwargs): def _set_tenant_id(module): global _os_tenant_id - if not module.params['tenant_name']: - tenant_name = module.params['login_tenant_name'] - else: + if module.params['tenant_name']: + # We need admin power in order retrieve the tenant_id of a given + # tenant name and to create/delete networks for a tenant that is not + # the one used to authenticate the user. tenant_name = module.params['tenant_name'] - - for tenant in _os_keystone.tenants.list(): - if tenant.name == tenant_name: - _os_tenant_id = tenant.id - break + for tenant in _os_keystone.tenants.list(): + if tenant.name == tenant_name: + _os_tenant_id = tenant.id + break + else: + _os_tenant_id = _os_keystone.tenant_id + if not _os_tenant_id: module.fail_json(msg = "The tenant id cannot be found, please check the paramters") @@ -191,11 +196,15 @@ def _create_network(module, neutron): 'provider:network_type': module.params.get('provider_network_type'), 'provider:physical_network': module.params.get('provider_physical_network'), 'provider:segmentation_id': module.params.get('provider_segmentation_id'), - 'router:external': module.params.get('router_external'), 'shared': module.params.get('shared'), 'admin_state_up': module.params.get('admin_state_up'), } + # Older neutron versions wil reject explicitly router:external set + # to false + if module.params.get('router_external'): + network['router:external'] = True + if module.params['provider_network_type'] == 'local': network.pop('provider:physical_network', None) network.pop('provider:segmentation_id', None) @@ -219,7 +228,7 @@ def _create_network(module, neutron): except Exception as e: module.fail_json(msg = "Error in creating network: %s" % e.message) return net['network']['id'] - + def _delete_network(module, net_id, neutron): try: @@ -229,7 +238,7 @@ def _delete_network(module, net_id, neutron): return True def main(): - + module = AnsibleModule( argument_spec = dict( login_username = dict(default='admin'), |