def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=[], routes=[], mtu=1500, primary=False, nic_mapping=None, persist_mapping=False): numbered_nic_names = _numbered_nics(nic_mapping) self.hwaddr = None self.hwname = None self.renamed = False if name in numbered_nic_names: if persist_mapping: self.name = name self.hwname = numbered_nic_names[name] self.hwaddr = utils.interface_mac(self.hwname) self.renamed = True else: self.name = numbered_nic_names[name] else: self.name = name self.mtu = mtu self.use_dhcp = use_dhcp self.use_dhcpv6 = use_dhcpv6 self.addresses = addresses self.routes = routes self.primary = primary self.bridge_name = None # internal self.ovs_port = False # internal self.primary_interface_name = None # internal
def _mapped_nics(nic_mapping=None): mapping = nic_mapping or {} global _MAPPED_NICS if _MAPPED_NICS: return _MAPPED_NICS _MAPPED_NICS = {} active_nics = utils.ordered_active_nics() for nic_alias, nic_mapped in mapping.items(): if nic_mapped not in active_nics: # The mapping is either invalid, or specifies a mac is_mapping_valid = False for active in active_nics: try: active_mac = utils.interface_mac(active) except IOError: continue if nic_mapped == active_mac: logger.debug("%s matches device %s" % (nic_mapped, active)) nic_mapped = active is_mapping_valid = True break if not is_mapping_valid: # The mapping can't specify a non-active or non-existent nic logger.warning('interface %s is not an active nic (%s)' % (nic_mapped, ', '.join(active_nics))) continue # Duplicate mappings are not allowed if nic_mapped in _MAPPED_NICS.values(): msg = ('interface %s already mapped, ' 'check mapping file for duplicates' % nic_mapped) raise InvalidConfigException(msg) _MAPPED_NICS[nic_alias] = nic_mapped logger.info("%s mapped to: %s" % (nic_alias, nic_mapped)) # Add default numbered mappings, but do not overwrite existing entries for nic_mapped in set(active_nics).difference(set(_MAPPED_NICS.values())): nic_alias = "nic%i" % (active_nics.index(nic_mapped) + 1) if nic_alias in _MAPPED_NICS: logger.warning("no mapping for interface %s because " "%s is mapped to %s" % (nic_mapped, nic_alias, _MAPPED_NICS[nic_alias])) else: _MAPPED_NICS[nic_alias] = nic_mapped logger.info("%s mapped to: %s" % (nic_alias, nic_mapped)) if not _MAPPED_NICS: logger.warning('No active nics found.') return _MAPPED_NICS
def add_vpp_interface(self, vpp_interface): """Add a VppInterface object to the net config object :param vpp_interface: The VppInterface object to add """ vpp_interface.pci_dev = utils.get_pci_address(vpp_interface.name, False) vpp_interface.hwaddr = utils.interface_mac(vpp_interface.name) if not self.noop: self.ifdown(vpp_interface.name) remove_ifcfg_config(vpp_interface.name) logger.info('adding vpp interface: %s %s' % (vpp_interface.name, vpp_interface.pci_dev)) self.vpp_interface_data[vpp_interface.name] = vpp_interface
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None, routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, dns_servers=None): addresses = addresses or [] routes = routes or [] dns_servers = dns_servers or [] numbered_nic_names = _numbered_nics(nic_mapping) self.hwaddr = None self.hwname = None self.renamed = False if name in numbered_nic_names: if persist_mapping: self.name = name self.hwname = numbered_nic_names[name] self.hwaddr = utils.interface_mac(self.hwname) self.renamed = True else: self.name = numbered_nic_names[name] else: self.name = name self.mtu = mtu self.use_dhcp = use_dhcp self.use_dhcpv6 = use_dhcpv6 self.addresses = addresses self.routes = routes self.primary = primary self.defroute = defroute self.dhclient_args = dhclient_args self.dns_servers = dns_servers self.bridge_name = None # internal self.linux_bridge_name = None # internal self.ivs_bridge_name = None # internal self.nfvswitch_bridge_name = None # internal self.linux_bond_name = None # internal self.linux_team_name = None # internal self.ovs_port = False # internal self.primary_interface_name = None # internal
def _numbered_nics(nic_mapping=None): mapping = nic_mapping or {} global _NUMBERED_NICS if _NUMBERED_NICS: return _NUMBERED_NICS _NUMBERED_NICS = {} count = 0 active_nics = utils.ordered_active_nics() for nic in active_nics: count += 1 nic_alias = "nic%i" % count nic_mapped = mapping.get(nic_alias, nic) # The mapping is either invalid, or specifies a mac if nic_mapped not in active_nics: for active in active_nics: try: active_mac = utils.interface_mac(active) except IOError: continue if nic_mapped == active_mac: logger.debug("%s matches device %s" % (nic_mapped, active)) nic_mapped = active break else: # The mapping can't specify a non-active or non-existent nic logger.warning('interface %s is not in an active nic (%s)' % (nic_mapped, ', '.join(active_nics))) continue # Duplicate mappings are not allowed if nic_mapped in _NUMBERED_NICS.values(): msg = ('interface %s already mapped, ' 'check mapping file for duplicates' % nic_mapped) raise InvalidConfigException(msg) _NUMBERED_NICS[nic_alias] = nic_mapped logger.info("%s mapped to: %s" % (nic_alias, nic_mapped)) if not _NUMBERED_NICS: logger.warning('No active nics found.') return _NUMBERED_NICS
def _add_common(self, base_opt): ovs_extra = [] data = "# This file is autogenerated by os-net-config\n" data += "DEVICE=%s\n" % base_opt.name data += "ONBOOT=yes\n" data += "HOTPLUG=no\n" data += "NM_CONTROLLED=no\n" if not base_opt.dns_servers and not base_opt.use_dhcp: data += "PEERDNS=no\n" if isinstance(base_opt, objects.Vlan): if not base_opt.ovs_port: # vlans on OVS bridges are internal ports (no device, etc) data += "VLAN=yes\n" if base_opt.device: data += "PHYSDEV=%s\n" % base_opt.device else: if base_opt.linux_bond_name: data += "PHYSDEV=%s\n" % base_opt.linux_bond_name elif isinstance(base_opt, objects.IvsInterface): data += "TYPE=IVSIntPort\n" elif re.match('\w+\.\d+$', base_opt.name): data += "VLAN=yes\n" if base_opt.linux_bond_name: data += "MASTER=%s\n" % base_opt.linux_bond_name data += "SLAVE=yes\n" if base_opt.ivs_bridge_name: data += "DEVICETYPE=ivs\n" data += "IVS_BRIDGE=%s\n" % base_opt.ivs_bridge_name if base_opt.ovs_port: data += "DEVICETYPE=ovs\n" if base_opt.bridge_name: if isinstance(base_opt, objects.Vlan): data += "TYPE=OVSIntPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_OPTIONS=\"tag=%s\"\n" % base_opt.vlan_id else: data += "TYPE=OVSPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if base_opt.linux_bridge_name: data += "BRIDGE=%s\n" % base_opt.linux_bridge_name if isinstance(base_opt, objects.OvsBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.use_dhcp: data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.primary_interface_name: mac = utils.interface_mac(base_opt.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (base_opt.name, mac)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name self.bond_primary_ifaces[base_opt.name] = primary_name data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBond\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.LinuxBridge): data += "TYPE=Bridge\n" data += "DELAY=0\n" if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac elif isinstance(base_opt, objects.LinuxBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.bonding_options: data += "BONDING_OPTS=\"%s\"\n" % base_opt.bonding_options elif isinstance(base_opt, objects.OvsTunnel): ovs_extra.extend(base_opt.ovs_extra) data += "DEVICETYPE=ovs\n" data += "TYPE=OVSTunnel\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_TUNNEL_TYPE=%s\n" % base_opt.tunnel_type data += "OVS_TUNNEL_OPTIONS=\"%s\"\n" % \ ' '.join(base_opt.ovs_options) else: if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" elif not base_opt.addresses: data += "BOOTPROTO=none\n" if base_opt.mtu: data += "MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6 or base_opt.v6_addresses(): data += "IPV6INIT=yes\n" if base_opt.mtu: data += "IPV6_MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6: data += "DHCPV6C=yes\n" elif base_opt.addresses: v4_addresses = base_opt.v4_addresses() if v4_addresses: data += "BOOTPROTO=static\n" for i, address in enumerate(v4_addresses): num = '%s' % i if i else '' data += "IPADDR%s=%s\n" % (num, address.ip) data += "NETMASK%s=%s\n" % (num, address.netmask) v6_addresses = base_opt.v6_addresses() if v6_addresses: first_v6 = v6_addresses[0] data += "IPV6_AUTOCONF=no\n" data += "IPV6ADDR=%s\n" % first_v6.ip_netmask if len(v6_addresses) > 1: secondaries_v6 = " ".join( map(lambda a: a.ip_netmask, v6_addresses[1:])) data += "IPV6ADDR_SECONDARIES=\"%s\"\n" % secondaries_v6 if base_opt.hwaddr: data += "HWADDR=%s\n" % base_opt.hwaddr if ovs_extra: data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) if not base_opt.defroute: data += "DEFROUTE=no\n" if base_opt.dhclient_args: data += "DHCLIENTARGS=%s\n" % base_opt.dhclient_args if base_opt.dns_servers: data += "DNS1=%s\n" % base_opt.dns_servers[0] if len(base_opt.dns_servers) == 2: data += "DNS2=%s\n" % base_opt.dns_servers[1] elif len(base_opt.dns_servers) > 2: logger.warning('ifcfg format supports a max of 2 dns servers.') return data
def _add_common(self, interface, static_addr=None, ip_version=4): ovs_extra = [] data = "" address_data = "" if static_addr: address_data += " address %s\n" % static_addr.ip if ip_version == 6: address_data += " netmask %s\n" % static_addr.prefixlen else: address_data += " netmask %s\n" % static_addr.netmask else: v4_addresses = interface.v4_addresses() if v4_addresses: for v4_address in v4_addresses: data += self._add_common(interface, v4_address) v6_addresses = interface.v6_addresses() if v6_addresses: for v6_address in v6_addresses: data += self._add_common(interface, v6_address, 6) if data: return data if isinstance(interface, objects.Vlan): _iface = "iface vlan%i " % interface.vlan_id else: _iface = "iface %s " % interface.name if static_addr and static_addr.version == 6: _iface += "inet6 " else: _iface += "inet " if interface.use_dhcp: _iface += "dhcp\n" elif interface.addresses: _iface += "static\n" else: _iface += "manual\n" if isinstance(interface, objects.OvsBridge): data += "auto %s\n" % interface.name data += "allow-ovs %s\n" % interface.name data += _iface data += address_data data += " ovs_type OVSBridge\n" if interface.members: data += " ovs_ports" for i in interface.members: data += " %s" % i.name data += "\n" for mem in interface.members: if isinstance(mem, objects.Interface): data += " pre-up ip addr flush dev %s\n" % mem.name if interface.primary_interface_name: mac = utils.interface_mac(interface.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (interface.name, mac)) ovs_extra.extend(interface.ovs_extra) elif interface.ovs_port: if isinstance(interface, objects.Vlan): data += "auto vlan%i\n" % interface.vlan_id data += "allow-%s vlan%i\n" % (interface.bridge_name, interface.vlan_id) data += _iface data += address_data data += " ovs_bridge %s\n" % interface.bridge_name data += " ovs_type OVSIntPort\n" data += " ovs_options tag=%s\n" % interface.vlan_id else: data += "auto %s\n" % interface.name data += "allow-%s %s\n" % (interface.bridge_name, interface.name) data += _iface data += address_data data += " ovs_bridge %s\n" % interface.bridge_name data += " ovs_type OVSPort\n" elif isinstance(interface, objects.Vlan): data += "auto vlan%i\n" % interface.vlan_id data += _iface data += address_data data += " vlan-raw-device %s\n" % interface.device else: if isinstance(interface, objects.Interface) and interface.hotplug: data += "allow-hotplug %s\n" % interface.name else: data += "auto %s\n" % interface.name data += _iface data += address_data if interface.mtu: data += " mtu %i\n" % interface.mtu if interface.hwaddr: raise NotImplementedError("hwaddr is not implemented.") if ovs_extra: data += " ovs_extra %s\n" % " -- ".join(ovs_extra) return data
def _add_common(self, interface, static_addr=None, ip_version=4): ovs_extra = [] data = "" address_data = "" if static_addr: address_data += " address %s\n" % static_addr.ip if ip_version == 6: address_data += " netmask %s\n" % static_addr.prefixlen else: address_data += " netmask %s\n" % static_addr.netmask else: v4_addresses = interface.v4_addresses() if v4_addresses: for v4_address in v4_addresses: data += self._add_common(interface, v4_address) v6_addresses = interface.v6_addresses() if v6_addresses: for v6_address in v6_addresses: data += self._add_common(interface, v6_address, 6) if data: return data if isinstance(interface, objects.Vlan): _iface = "iface vlan%i " % interface.vlan_id else: _iface = "iface %s " % interface.name if static_addr and static_addr.version == 6: _iface += "inet6 " else: _iface += "inet " if interface.use_dhcp: _iface += "dhcp\n" elif interface.addresses: _iface += "static\n" else: _iface += "manual\n" if isinstance(interface, objects.OvsBridge): data += "auto %s\n" % interface.name data += "allow-ovs %s\n" % interface.name data += _iface data += address_data data += " ovs_type OVSBridge\n" if interface.members: data += " ovs_ports" for i in interface.members: data += " %s" % i.name data += "\n" for mem in interface.members: if isinstance(mem, objects.Interface): data += " pre-up ip addr flush dev %s\n" % mem.name if interface.primary_interface_name: mac = utils.interface_mac(interface.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (interface.name, mac)) ovs_extra.extend(interface.ovs_extra) elif interface.ovs_port: if isinstance(interface, objects.Vlan): data += "auto vlan%i\n" % interface.vlan_id data += "allow-%s vlan%i\n" % (interface.bridge_name, interface.vlan_id) data += _iface data += address_data data += " ovs_bridge %s\n" % interface.bridge_name data += " ovs_type OVSIntPort\n" data += " ovs_options tag=%s\n" % interface.vlan_id else: data += "auto %s\n" % interface.name data += "allow-%s %s\n" % (interface.bridge_name, interface.name) data += _iface data += address_data data += " ovs_bridge %s\n" % interface.bridge_name data += " ovs_type OVSPort\n" elif isinstance(interface, objects.Vlan): data += "auto vlan%i\n" % interface.vlan_id data += _iface data += address_data data += " vlan-raw-device %s\n" % interface.device else: data += "auto %s\n" % interface.name data += _iface data += address_data if interface.mtu: data += " mtu %i\n" % interface.mtu if interface.hwaddr: raise NotImplemented("hwaddr is not implemented.") if ovs_extra: data += " ovs_extra %s\n" % " -- ".join(ovs_extra) return data
def _add_common(self, base_opt): ovs_extra = [] data = "# This file is autogenerated by os-net-config\n" data += "DEVICE=%s\n" % base_opt.name data += "ONBOOT=yes\n" data += "HOTPLUG=no\n" data += "NM_CONTROLLED=no\n" if isinstance(base_opt, objects.Vlan): if not base_opt.ovs_port: # vlans on OVS bridges are internal ports (no device, etc) data += "VLAN=yes\n" if base_opt.device: data += "PHYSDEV=%s\n" % base_opt.device if base_opt.ovs_port: data += "DEVICETYPE=ovs\n" if base_opt.bridge_name: if isinstance(base_opt, objects.Vlan): data += "TYPE=OVSIntPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_OPTIONS=\"tag=%s\"\n" % base_opt.vlan_id else: data += "TYPE=OVSPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if isinstance(base_opt, objects.OvsBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.use_dhcp: data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.primary_interface_name: mac = utils.interface_mac(base_opt.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (base_opt.name, mac)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name self.bond_primary_ifaces[base_opt.name] = primary_name data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBond\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) else: if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" elif not base_opt.addresses: data += "BOOTPROTO=none\n" if base_opt.mtu != 1500: data += "MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6 or base_opt.v6_addresses(): data += "IPV6INIT=yes\n" if base_opt.mtu != 1500: data += "IPV6_MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6: data += "DHCPV6C=yes\n" elif base_opt.addresses: v4_addresses = base_opt.v4_addresses() if v4_addresses: data += "BOOTPROTO=static\n" for i, address in enumerate(v4_addresses): num = '%s' % i if i else '' data += "IPADDR%s=%s\n" % (num, address.ip) data += "NETMASK%s=%s\n" % (num, address.netmask) v6_addresses = base_opt.v6_addresses() if v6_addresses: first_v6 = v6_addresses[0] data += "IPV6_AUTOCONF=no\n" data += "IPV6ADDR=%s\n" % first_v6.ip_netmask if len(v6_addresses) > 1: secondaries_v6 = " ".join(map(lambda a: a.ip_netmask, v6_addresses[1:])) data += "IPV6ADDR_SECONDARIES=\"%s\"\n" % secondaries_v6 if base_opt.hwaddr: data += "HWADDR=%s\n" % base_opt.hwaddr if ovs_extra: data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) if not base_opt.defroute: data += "DEFROUTE=no\n" if base_opt.dhclient_args: data += "DHCLIENTARGS=%s\n" % base_opt.dhclient_args if base_opt.dns_servers: data += "DNS1=%s\n" % base_opt.dns_servers[0] if len(base_opt.dns_servers) == 2: data += "DNS2=%s\n" % base_opt.dns_servers[1] elif len(base_opt.dns_servers) > 2: logger.warning('ifcfg format supports a max of 2 dns servers.') return data
def _add_common(self, base_opt): ovs_extra = [] data = "# This file is autogenerated by os-net-config\n" data += "DEVICE=%s\n" % base_opt.name data += "ONBOOT=yes\n" if isinstance(base_opt, objects.Interface) and base_opt.hotplug: data += "HOTPLUG=yes\n" else: data += "HOTPLUG=no\n" if base_opt.nm_controlled: data += "NM_CONTROLLED=yes\n" else: data += "NM_CONTROLLED=no\n" if not base_opt.dns_servers and not base_opt.use_dhcp: data += "PEERDNS=no\n" if isinstance(base_opt, objects.Vlan): if not base_opt.ovs_port: # vlans on OVS bridges are internal ports (no device, etc) data += "VLAN=yes\n" if base_opt.device: data += "PHYSDEV=%s\n" % base_opt.device else: if base_opt.linux_bond_name: data += "PHYSDEV=%s\n" % base_opt.linux_bond_name elif isinstance(base_opt, objects.IvsInterface): data += "TYPE=IVSIntPort\n" elif isinstance(base_opt, objects.NfvswitchInternal): data += "TYPE=NFVSWITCHIntPort\n" elif isinstance(base_opt, objects.IbInterface): data += "TYPE=Infiniband\n" if base_opt.ethtool_opts: data += "ETHTOOL_OPTS=\"%s\"\n" % base_opt.ethtool_opts elif re.match('\w+\.\d+$', base_opt.name): data += "VLAN=yes\n" if base_opt.linux_bond_name: data += "MASTER=%s\n" % base_opt.linux_bond_name data += "SLAVE=yes\n" if base_opt.linux_team_name: data += "TEAM_MASTER=%s\n" % base_opt.linux_team_name if base_opt.primary: data += "TEAM_PORT_CONFIG='{\"prio\": 100}'\n" if base_opt.ivs_bridge_name: data += "DEVICETYPE=ivs\n" data += "IVS_BRIDGE=%s\n" % base_opt.ivs_bridge_name if base_opt.nfvswitch_bridge_name: data += "DEVICETYPE=nfvswitch\n" data += "NFVSWITCH_BRIDGE=%s\n" % base_opt.nfvswitch_bridge_name if base_opt.ovs_port: if not isinstance(base_opt, objects.LinuxTeam): data += "DEVICETYPE=ovs\n" if base_opt.bridge_name: if isinstance(base_opt, objects.Vlan): data += "TYPE=OVSIntPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_OPTIONS=\"tag=%s\"\n" % base_opt.vlan_id else: data += "TYPE=OVSPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if base_opt.linux_bridge_name: data += "BRIDGE=%s\n" % base_opt.linux_bridge_name if isinstance(base_opt, objects.OvsBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.use_dhcp: data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.primary_interface_name: mac = utils.interface_mac(base_opt.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (base_opt.name, mac)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsUserBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSUserBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.use_dhcp: data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name self.bond_primary_ifaces[base_opt.name] = primary_name data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBond\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.LinuxBridge): data += "TYPE=Bridge\n" data += "DELAY=0\n" if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac elif isinstance(base_opt, objects.LinuxBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.bonding_options: data += "BONDING_OPTS=\"%s\"\n" % base_opt.bonding_options elif isinstance(base_opt, objects.LinuxTeam): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += "DEVICETYPE=Team\n" if base_opt.bonding_options: data += "TEAM_CONFIG='%s'\n" % base_opt.bonding_options elif isinstance(base_opt, objects.OvsTunnel): ovs_extra.extend(base_opt.ovs_extra) data += "DEVICETYPE=ovs\n" data += "TYPE=OVSTunnel\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_TUNNEL_TYPE=%s\n" % base_opt.tunnel_type data += "OVS_TUNNEL_OPTIONS=\"%s\"\n" % \ ' '.join(base_opt.ovs_options) elif isinstance(base_opt, objects.OvsPatchPort): ovs_extra.extend(base_opt.ovs_extra) data += "DEVICETYPE=ovs\n" data += "TYPE=OVSPatchPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_PATCH_PEER=%s\n" % base_opt.peer elif isinstance(base_opt, objects.OvsDpdkPort): ovs_extra.extend(base_opt.ovs_extra) data += "DEVICETYPE=ovs\n" data += "TYPE=OVSDPDKPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name elif isinstance(base_opt, objects.OvsDpdkBond): ovs_extra.extend(base_opt.ovs_extra) # Referring to bug:1643026, the below commenting of the interfaces, # is to workaround the error, but is not the long term solution. # The long term solution is to run DPDK options before # os-net-config, which is being tracked at BUG:1654975 # if base_opt.primary_interface_name: # primary_name = base_opt.primary_interface_name # self.bond_primary_ifaces[base_opt.name] = primary_name data += "DEVICETYPE=ovs\n" data += "TYPE=OVSDPDKBond\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if base_opt.members: members = [member.name for member in base_opt.members] data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) else: if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" elif not base_opt.addresses: data += "BOOTPROTO=none\n" if isinstance(base_opt, objects.Interface): if base_opt.ethtool_opts: data += "ETHTOOL_OPTS=\"%s\"\n" % base_opt.ethtool_opts if base_opt.mtu: data += "MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6 or base_opt.v6_addresses(): data += "IPV6INIT=yes\n" if base_opt.mtu: data += "IPV6_MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6: data += "DHCPV6C=yes\n" elif base_opt.addresses: v4_addresses = base_opt.v4_addresses() if v4_addresses: data += "BOOTPROTO=static\n" for i, address in enumerate(v4_addresses): num = '%s' % i if i else '' data += "IPADDR%s=%s\n" % (num, address.ip) data += "NETMASK%s=%s\n" % (num, address.netmask) v6_addresses = base_opt.v6_addresses() if v6_addresses: first_v6 = v6_addresses[0] data += "IPV6_AUTOCONF=no\n" data += "IPV6ADDR=%s\n" % first_v6.ip_netmask if len(v6_addresses) > 1: secondaries_v6 = " ".join(map(lambda a: a.ip_netmask, v6_addresses[1:])) data += "IPV6ADDR_SECONDARIES=\"%s\"\n" % secondaries_v6 if base_opt.hwaddr: data += "HWADDR=%s\n" % base_opt.hwaddr if ovs_extra: data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) if not base_opt.defroute: data += "DEFROUTE=no\n" if base_opt.dhclient_args: data += "DHCLIENTARGS=%s\n" % base_opt.dhclient_args if base_opt.dns_servers: data += "DNS1=%s\n" % base_opt.dns_servers[0] if len(base_opt.dns_servers) == 2: data += "DNS2=%s\n" % base_opt.dns_servers[1] elif len(base_opt.dns_servers) > 2: logger.warning('ifcfg format supports a max of 2 dns servers.') return data
def _add_common(self, base_opt): ovs_extra = [] data = "DEVICE=%s\n" % base_opt.name data += "ONBOOT=yes\n" data += "HOTPLUG=no\n" if isinstance(base_opt, objects.Vlan): data += "VLAN=yes\n" if base_opt.device: data += "PHYSDEV=%s\n" % base_opt.device if base_opt.ovs_port: data += "DEVICETYPE=ovs\n" if base_opt.bridge_name: if isinstance(base_opt, objects.Vlan): data += "TYPE=OVSIntPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_OPTIONS=\"tag=%s\"\n" % base_opt.vlan_id else: data += "TYPE=OVSPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if isinstance(base_opt, objects.OvsBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.primary_interface_name: mac = utils.interface_mac(base_opt.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (base_opt.name, mac)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsBond): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBond\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) else: if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" elif not base_opt.addresses: data += "BOOTPROTO=none\n" if base_opt.mtu != 1500: data += "MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6 or base_opt.v6_addresses(): data += "IPV6INIT=yes\n" if base_opt.mtu != 1500: data += "IPV6_MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6: data += "DHCPV6C=yes\n" elif base_opt.addresses: #TODO(dprince): Do we want to support multiple addresses? v4_addresses = base_opt.v4_addresses() if v4_addresses: first_v4 = v4_addresses[0] data += "BOOTPROTO=static\n" data += "IPADDR=%s\n" % first_v4.ip data += "NETMASK=%s\n" % first_v4.netmask v6_addresses = base_opt.v6_addresses() if v6_addresses: first_v6 = v6_addresses[0] data += "IPV6_AUTOCONF=no\n" data += "IPV6ADDR=%s\n" % first_v6.ip if ovs_extra: data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) return data
def _add_common(self, base_opt): ovs_extra = [] data = "# This file is autogenerated by os-net-config\n" data += "DEVICE=%s\n" % base_opt.name data += "ONBOOT=yes\n" data += "HOTPLUG=no\n" data += "NM_CONTROLLED=no\n" if isinstance(base_opt, objects.Vlan): if not base_opt.ovs_port: # vlans on OVS bridges are internal ports (no device, etc) data += "VLAN=yes\n" if base_opt.device: data += "PHYSDEV=%s\n" % base_opt.device if base_opt.ovs_port: data += "DEVICETYPE=ovs\n" if base_opt.bridge_name: if isinstance(base_opt, objects.Vlan): data += "TYPE=OVSIntPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_OPTIONS=\"tag=%s\"\n" % base_opt.vlan_id else: data += "TYPE=OVSPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if base_opt.linux_bridge_name: data += "BRIDGE=%s\n" % base_opt.linux_bridge_name if isinstance(base_opt, objects.OvsBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.use_dhcp: data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.primary_interface_name: mac = utils.interface_mac(base_opt.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (base_opt.name, mac)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name self.bond_primary_ifaces[base_opt.name] = primary_name data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBond\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.LinuxBridge): data += "TYPE=Bridge\n" data += "DELAY=0\n" if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac elif isinstance(base_opt, objects.LinuxBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members for member in members: self.bond_slaves[member] = base_opt.name if base_opt.bonding_options: data += "BONDING_OPTS=\"%s\"\n" % base_opt.bonding_options else: if base_opt.name in self.bond_slaves: data += "MASTER=%s\n" % self.bond_slaves[base_opt.name] data += "SLAVE=yes\n" if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" elif not base_opt.addresses: data += "BOOTPROTO=none\n" if base_opt.mtu != 1500: data += "MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6 or base_opt.v6_addresses(): data += "IPV6INIT=yes\n" if base_opt.mtu != 1500: data += "IPV6_MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6: data += "DHCPV6C=yes\n" elif base_opt.addresses: #TODO(dprince): Do we want to support multiple addresses? v4_addresses = base_opt.v4_addresses() if v4_addresses: first_v4 = v4_addresses[0] data += "BOOTPROTO=static\n" data += "IPADDR=%s\n" % first_v4.ip data += "NETMASK=%s\n" % first_v4.netmask v6_addresses = base_opt.v6_addresses() if v6_addresses: first_v6 = v6_addresses[0] data += "IPV6_AUTOCONF=no\n" data += "IPV6ADDR=%s\n" % first_v6.ip if base_opt.hwaddr: data += "HWADDR=%s\n" % base_opt.hwaddr if ovs_extra: data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) if not base_opt.defroute: data += "DEFROUTE=no\n" if base_opt.dhclient_args: data += "DHCLIENTARGS=%s\n" % base_opt.dhclient_args if base_opt.dns_servers: data += "DNS1=%s\n" % base_opt.dns_servers[0] if len(base_opt.dns_servers) == 2: data += "DNS2=%s\n" % base_opt.dns_servers[1] elif len(base_opt.dns_servers) > 2: logger.warning('ifcfg format supports a max of 2 dns servers.') return data
def _add_common(self, base_opt): ovs_extra = [] data = "DEVICE=%s\n" % base_opt.name data += "ONBOOT=yes\n" data += "HOTPLUG=no\n" if isinstance(base_opt, objects.Vlan): data += "VLAN=yes\n" if base_opt.device: data += "PHYSDEV=%s\n" % base_opt.device if base_opt.ovs_port: data += "DEVICETYPE=ovs\n" if base_opt.bridge_name: if isinstance(base_opt, objects.Vlan): data += "TYPE=OVSIntPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_OPTIONS=\"tag=%s\"\n" % base_opt.vlan_id else: data += "TYPE=OVSPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if isinstance(base_opt, objects.OvsBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.primary_interface_name: mac = utils.interface_mac(base_opt.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (base_opt.name, mac)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsBond): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBond\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) else: if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" elif not base_opt.addresses: data += "BOOTPROTO=none\n" if base_opt.mtu != 1500: data += "MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6 or base_opt.v6_addresses(): data += "IPV6INIT=yes\n" if base_opt.mtu != 1500: data += "IPV6_MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6: data += "DHCPV6C=yes\n" elif base_opt.addresses: #TODO(dprince): Do we want to support multiple addresses? v4_addresses = base_opt.v4_addresses() if v4_addresses: first_v4 = v4_addresses[0] data += "BOOTPROTO=static\n" data += "IPADDR=%s\n" % first_v4.ip data += "NETMASK=%s\n" % first_v4.netmask v6_addresses = base_opt.v6_addresses() if v6_addresses: first_v6 = v6_addresses[0] data += "IPV6_AUTOCONF=no\n" data += "IPV6ADDR=%s\n" % first_v6.ip if base_opt.hwaddr: data += "HWADDR=%s\n" % base_opt.hwaddr if ovs_extra: data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) return data
def _add_common(self, base_opt): ovs_extra = [] data = "# This file is autogenerated by os-net-config\n" data += "DEVICE=%s\n" % base_opt.name data += "ONBOOT=yes\n" data += "HOTPLUG=no\n" data += "NM_CONTROLLED=no\n" if not base_opt.dns_servers and not base_opt.use_dhcp: data += "PEERDNS=no\n" if isinstance(base_opt, objects.Vlan): if not base_opt.ovs_port: # vlans on OVS bridges are internal ports (no device, etc) data += "VLAN=yes\n" if base_opt.device: data += "PHYSDEV=%s\n" % base_opt.device else: if base_opt.linux_bond_name: data += "PHYSDEV=%s\n" % base_opt.linux_bond_name elif isinstance(base_opt, objects.IvsInterface): data += "TYPE=IVSIntPort\n" elif isinstance(base_opt, objects.NfvswitchInternal): data += "TYPE=NFVSWITCHIntPort\n" elif isinstance(base_opt, objects.IbInterface): data += "TYPE=Infiniband\n" elif re.match('\w+\.\d+$', base_opt.name): data += "VLAN=yes\n" if base_opt.linux_bond_name: data += "MASTER=%s\n" % base_opt.linux_bond_name data += "SLAVE=yes\n" if base_opt.linux_team_name: data += "TEAM_MASTER=%s\n" % base_opt.linux_team_name if base_opt.primary: data += "TEAM_PORT_CONFIG='{\"prio\": 100}'\n" if base_opt.ivs_bridge_name: data += "DEVICETYPE=ivs\n" data += "IVS_BRIDGE=%s\n" % base_opt.ivs_bridge_name if base_opt.nfvswitch_bridge_name: data += "DEVICETYPE=nfvswitch\n" data += "NFVSWITCH_BRIDGE=%s\n" % base_opt.nfvswitch_bridge_name if base_opt.ovs_port: if not isinstance(base_opt, objects.LinuxTeam): data += "DEVICETYPE=ovs\n" if base_opt.bridge_name: if isinstance(base_opt, objects.Vlan): data += "TYPE=OVSIntPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_OPTIONS=\"tag=%s\"\n" % base_opt.vlan_id else: data += "TYPE=OVSPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name if base_opt.linux_bridge_name: data += "BRIDGE=%s\n" % base_opt.linux_bridge_name if isinstance(base_opt, objects.OvsBridge): data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBridge\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.use_dhcp: data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members)) if base_opt.primary_interface_name: mac = utils.interface_mac(base_opt.primary_interface_name) ovs_extra.append("set bridge %s other-config:hwaddr=%s" % (base_opt.name, mac)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.OvsBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name self.bond_primary_ifaces[base_opt.name] = primary_name data += "DEVICETYPE=ovs\n" data += "TYPE=OVSBond\n" if base_opt.use_dhcp: data += "OVSBOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += ("BOND_IFACES=\"%s\"\n" % " ".join(members)) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) elif isinstance(base_opt, objects.LinuxBridge): data += "TYPE=Bridge\n" data += "DELAY=0\n" if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac elif isinstance(base_opt, objects.LinuxBond): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members if base_opt.bonding_options: data += "BONDING_OPTS=\"%s\"\n" % base_opt.bonding_options elif isinstance(base_opt, objects.LinuxTeam): if base_opt.primary_interface_name: primary_name = base_opt.primary_interface_name primary_mac = utils.interface_mac(primary_name) data += "MACADDR=\"%s\"\n" % primary_mac if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" if base_opt.members: members = [member.name for member in base_opt.members] self.member_names[base_opt.name] = members data += "DEVICETYPE=Team\n" if base_opt.bonding_options: data += "TEAM_CONFIG='%s'\n" % base_opt.bonding_options elif isinstance(base_opt, objects.OvsTunnel): ovs_extra.extend(base_opt.ovs_extra) data += "DEVICETYPE=ovs\n" data += "TYPE=OVSTunnel\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_TUNNEL_TYPE=%s\n" % base_opt.tunnel_type data += "OVS_TUNNEL_OPTIONS=\"%s\"\n" % \ ' '.join(base_opt.ovs_options) elif isinstance(base_opt, objects.OvsPatchPort): ovs_extra.extend(base_opt.ovs_extra) data += "DEVICETYPE=ovs\n" data += "TYPE=OVSPatchPort\n" data += "OVS_BRIDGE=%s\n" % base_opt.bridge_name data += "OVS_PATCH_PEER=%s\n" % base_opt.peer else: if base_opt.use_dhcp: data += "BOOTPROTO=dhcp\n" elif not base_opt.addresses: data += "BOOTPROTO=none\n" if base_opt.mtu: data += "MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6 or base_opt.v6_addresses(): data += "IPV6INIT=yes\n" if base_opt.mtu: data += "IPV6_MTU=%i\n" % base_opt.mtu if base_opt.use_dhcpv6: data += "DHCPV6C=yes\n" elif base_opt.addresses: v4_addresses = base_opt.v4_addresses() if v4_addresses: data += "BOOTPROTO=static\n" for i, address in enumerate(v4_addresses): num = '%s' % i if i else '' data += "IPADDR%s=%s\n" % (num, address.ip) data += "NETMASK%s=%s\n" % (num, address.netmask) v6_addresses = base_opt.v6_addresses() if v6_addresses: first_v6 = v6_addresses[0] data += "IPV6_AUTOCONF=no\n" data += "IPV6ADDR=%s\n" % first_v6.ip_netmask if len(v6_addresses) > 1: secondaries_v6 = " ".join(map(lambda a: a.ip_netmask, v6_addresses[1:])) data += "IPV6ADDR_SECONDARIES=\"%s\"\n" % secondaries_v6 if base_opt.hwaddr: data += "HWADDR=%s\n" % base_opt.hwaddr if ovs_extra: data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) if not base_opt.defroute: data += "DEFROUTE=no\n" if base_opt.dhclient_args: data += "DHCLIENTARGS=%s\n" % base_opt.dhclient_args if base_opt.dns_servers: data += "DNS1=%s\n" % base_opt.dns_servers[0] if len(base_opt.dns_servers) == 2: data += "DNS2=%s\n" % base_opt.dns_servers[1] elif len(base_opt.dns_servers) > 2: logger.warning('ifcfg format supports a max of 2 dns servers.') return data