From 6f1e672d20d8cdf7fc143f06aa45b1b1506ae92d Mon Sep 17 00:00:00 2001 From: Alberto Murillo Date: Wed, 13 Jan 2016 14:54:51 -0600 Subject: [PATCH] Automatically find the network interface assosiated to an ip address --- clearstack/common/util.py | 11 +++++++++++ clearstack/modules/neutron.py | 5 ++--- clearstack/plugins/neutron_450.py | 6 ------ clearstack/templates/neutron.py | 3 ++- clearstack/templates/neutron_compute.py | 3 ++- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/clearstack/common/util.py b/clearstack/common/util.py index ca1be02..0ecddc2 100644 --- a/clearstack/common/util.py +++ b/clearstack/common/util.py @@ -185,6 +185,17 @@ def get_ips(): return ips +def get_nic(ip): + for iface in netifaces.interfaces(): + try: + for addr in netifaces.ifaddresses(iface)[netifaces.AF_INET]: + if addr['addr'] == ip: + return iface + except: + pass + return None + + def get_ip(): interface = get_net_interface() return netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr'] diff --git a/clearstack/modules/neutron.py b/clearstack/modules/neutron.py index bd94c4b..dd92946 100644 --- a/clearstack/modules/neutron.py +++ b/clearstack/modules/neutron.py @@ -34,7 +34,6 @@ tenant_network_types = CONF['CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES'] mechanism_drivers = CONF['CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS'] vni_ranges = CONF['CONFIG_NEUTRON_ML2_TUNNEL_ID_RANGES'] type_drivers = CONF['CONFIG_NEUTRON_ML2_TYPE_DRIVERS'] -bridge_mappings = CONF['CONFIG_NEUTRON_LINUXBRIDGE_IFACES'] flat_networks = CONF['CONFIG_NEUTRON_ML2_FLAT_NETWORKS'] @@ -83,10 +82,10 @@ class Neutron(OpenStackService): util.link_file('/etc/neutron/plugins/ml2/ml2_conf.ini', '/etc/neutron/plugin.ini') - def config_linux_bridge_agent(self, local_ip): + def config_linux_bridge_agent(self, local_ip, local_nic): config = \ "[linux_bridge]\n" + \ - "physical_interface_mappings = %s\n" % bridge_mappings + \ + "physical_interface_mappings = public:%s\n" % local_nic + \ "[vxlan]\n" + \ "enable_vxlan = True\n" + \ "local_ip = %s\n" % local_ip + \ diff --git a/clearstack/plugins/neutron_450.py b/clearstack/plugins/neutron_450.py index 6b5e146..14818ed 100644 --- a/clearstack/plugins/neutron_450.py +++ b/clearstack/plugins/neutron_450.py @@ -79,12 +79,6 @@ def init_config(): # "CONFIG_NEUTRON_OVS_BRIDGE_IFACES", # "br-ex:%s" % util.get_net_interface()) # ], - "NEUTRON_LINUXBRIDGE_AGENT": [ - Argument("neutron-linuxbridge-physical-interface-mappings", - "Colon separated linuxbridge : pairs", - "CONFIG_NEUTRON_LINUXBRIDGE_IFACES", - "public:%s" % util.get_net_interface()) - ], "NEUTRON_ML2_PLUGIN": [ Argument("neutron-ml2-type-drivers", "Comma-separated list of network-type driver entry " diff --git a/clearstack/templates/neutron.py b/clearstack/templates/neutron.py index b418f6e..152ae28 100644 --- a/clearstack/templates/neutron.py +++ b/clearstack/templates/neutron.py @@ -25,6 +25,7 @@ neutron = Neutron.get() config_file = "/etc/neutron/neutron.conf" ip_list = CONF['CONFIG_CONTROLLER_HOST'].split(',') local_ip = util.find_my_ip_from_config(ip_list) +local_nic = util.get_nic(local_ip) # Install neutron controller neutron.install() @@ -40,7 +41,7 @@ neutron.config_auth(config_file) neutron.config_nova(config_file) neutron.config_ml2_plugin() -neutron.config_linux_bridge_agent(local_ip) +neutron.config_linux_bridge_agent(local_ip, local_nic) neutron.config_l3_agent("/etc/neutron/l3_agent.ini") neutron.config_dhcp_agent("/etc/neutron/dhcp_agent.ini") neutron.config_metadata_agent("/etc/neutron/metadata_agent.ini") diff --git a/clearstack/templates/neutron_compute.py b/clearstack/templates/neutron_compute.py index ca14f5d..19a93b7 100644 --- a/clearstack/templates/neutron_compute.py +++ b/clearstack/templates/neutron_compute.py @@ -26,12 +26,13 @@ config_file = "/etc/neutron/neutron.conf" services = ['nova-compute', 'neutron-linuxbridge-agent'] ip_list = CONF['CONFIG_COMPUTE_HOSTS'].split(',') local_ip = util.find_my_ip_from_config(ip_list) +local_nic = util.get_nic(local_ip) neutron.install() neutron.config_debug(config_file) neutron.config_rabbitmq(config_file) neutron.config_auth(config_file) -neutron.config_linux_bridge_agent(local_ip) +neutron.config_linux_bridge_agent(local_ip, local_nic) neutron.config_neutron_on_nova('/etc/nova/nova.conf') if util.str2bool(CONF['CONFIG_CEILOMETER_INSTALL']):