def setup_bms(self, interfaces=None): interfaces = interfaces or self.interfaces self.bms_created = True if len(interfaces) > 1: self._interface = self.create_bonding(interfaces) else: host_mac = interfaces[0]['host_mac'] self._interface = get_intf_name_from_mac(self.mgmt_ip, host_mac, username=self.username, password=self.password) self.logger.info('BMS interface: %s' % self._interface) self.run('ip link set dev %s up' % (self._interface)) if self.vlan_id: self.run('vconfig add %s %s' % (self._interface, self.vlan_id)) self.run('ip link set dev %s.%s up' % (self._interface, self.vlan_id)) pvlanintf = '%s.%s'%(self._interface, self.vlan_id) if self.vlan_id\ else self._interface self.run('ip link set dev %s up' % pvlanintf) self.mvlanintf = '%s-%s' % ( pvlanintf, get_random_string(2, chars=string.ascii_letters)) self.logger.info('BMS mvlanintf: %s' % self.mvlanintf) macaddr = 'address %s' % self.bms_mac if self.bms_mac else '' self.run('ip link add %s link %s %s type macvlan mode bridge' % (self.mvlanintf, pvlanintf, macaddr)) self.run('ip netns add %s' % self.namespace) self.run('ip link set netns %s %s' % (self.namespace, self.mvlanintf)) self.run_namespace('ip link set dev %s up' % self.mvlanintf)
def setup_bms(self, interfaces=None): interfaces = interfaces or self.interfaces self.bms_created = True if len(interfaces) > 1: self._interface = self.create_bonding(interfaces) else: host_mac = interfaces[0]['host_mac'] self._interface = get_intf_name_from_mac(self.mgmt_ip, host_mac, username=self.username, password=self.password) self.logger.info('BMS interface: %s' % self._interface) self.run('ip link set dev %s up'%(self._interface)) if self.vlan_id: # self.run('vconfig add %s %s'%(self._interface, self.vlan_id)) # Removing the dependency on vconfig self.run('ip link add link {ifc} name {ifc}.{vlan} type vlan id ' '{vlan}'.format (ifc=self._interface, vlan=self.vlan_id)) self.run('ip link set dev %s.%s up'%(self._interface, self.vlan_id)) pvlanintf = '%s.%s'%(self._interface, self.vlan_id) if self.vlan_id\ else self._interface self.run('ip link set dev %s up'%pvlanintf) mvlanintf = '%s-%s'%(pvlanintf, get_random_string(2, chars=string.ascii_letters)) # Truncate the interface name length to 15 char due to linux limitation self.mvlanintf = mvlanintf[-15:] self.logger.info('BMS mvlanintf: %s' % self.mvlanintf) macaddr = 'address %s'%self.bms_mac if self.bms_mac else '' self.run('ip link add %s link %s %s type macvlan mode bridge'%( self.mvlanintf, pvlanintf, macaddr)) self.run('ip netns add %s'%self.namespace) self.run('ip link set netns %s %s'%(self.namespace, self.mvlanintf)) self.run_namespace('ip link set dev %s up'%self.mvlanintf)
def create_netns(self, bms_node, namespace, cidr): bms_data = self.inputs.bms_data[bms_node] server_ip = bms_data['mgmt_ip'] username = bms_data['username'] password = bms_data['password'] intf = bms_data['interfaces'][0] mac = intf['host_mac'] gw_ip = get_an_ip(cidr, offset=1) bms_ip = get_an_ip(cidr, offset=2) mask = cidr.split('/')[1] interface = get_intf_name_from_mac(server_ip, mac, username=username, password=password) create_netns(server_ip, username, password, namespace, interface, address=bms_ip, gateway=gw_ip, mask=mask) self.addCleanup(delete_netns, server_ip, username, password, namespace) prouter = self.get_associated_prouters(bms_node, [intf])[0] prouter.configure_interface(intf['tor_port'], gw_ip, mask) self.addCleanup(prouter.delete_interface, intf['tor_port'])
def setup_bms(self): self.bms_created = True if len(self.interfaces) > 1: self._interface = self.create_bonding() else: host_mac = self.interfaces[0]['host_mac'] self._interface = get_intf_name_from_mac(self.mgmt_ip, host_mac, username=self.username, password=self.password) self.logger.info('BMS interface: %s' % self._interface) if self.vlan_id: self.run('vconfig add %s %s' % (self._interface, self.vlan_id)) self.run('ip link set %s.%s up' % (self._interface, self.vlan_id)) pvlanintf = '%s.%s'%(self._interface, self.vlan_id) if self.vlan_id\ else self._interface self.run('ip link set dev %s up' % pvlanintf) self.mvlanintf = '%s-mv%s' % (pvlanintf, get_random_string(4)) self.logger.info('BMS mvlanintf: %s' % self.mvlanintf) macaddr = 'address %s' % self.bms_mac if self.bms_mac else '' self.run('ip link add %s link %s %s type macvlan mode bridge' % (self.mvlanintf, pvlanintf, macaddr)) self.run('ip netns add %s' % self.namespace) self.run('ip link set netns %s %s' % (self.namespace, self.mvlanintf)) self.run_namespace('ip link set dev %s up' % self.mvlanintf) if self.static_ip: addr = self.bms_ip + '/' + str(self.bms_ip_netmask) self.run_namespace('ip addr add %s dev %s' % (addr, self.mvlanintf)) if self.bms_gw_ip is not None: self.run_namespace('ip route add default via %s' % (self.bms_gw_ip))
def delete_bonding(self, interfaces=None): for interface in interfaces or self.interfaces: physical_intf = get_intf_name_from_mac(self.mgmt_ip, interface['host_mac'], username=self.username, password=self.password) self.run('ip link set %s down' % (physical_intf)) self.run('ip link set %s nomaster' % (physical_intf)) self.run('ip link delete %s' % self.bond_name)
def create_bonding(self): self.delete_bonding() bond_intf = 'bond0' self.run('ip link add %s type bond mode 802.3ad' % bond_intf) for interface in self.interfaces: physical_intf = get_intf_name_from_mac(self.mgmt_ip, interface['host_mac'], username=self.username, password=self.password) self.run('ip link set %s master %s' % (physical_intf, bond_intf)) return bond_intf
def add_remove_interface_from_bonding(self, interfaces, remove=False): for interface in interfaces: physical_intf = get_intf_name_from_mac(self.mgmt_ip, interface['host_mac'], username=self.username, password=self.password) if remove: self.run('ip link set %s down'%(physical_intf)) self.run('ip link set %s nomaster'%(physical_intf)) else: self.run('ip link set %s down'%(physical_intf)) self.run('ip link set %s master %s'%(physical_intf, self.bond_name)) self.run('ip link set %s up'%(physical_intf))
def setup_bms(self): self.bms_created = True if len(self.interfaces) > 1: interface = self.create_bonding() else: host_mac = self.interfaces[0]['host_mac'] interface = get_intf_name_from_mac(self.mgmt_ip, host_mac, username=self.username, password=self.password) if self.vlan_id: self.run('vconfig add %s %s' % (interface, self.vlan_id)) pvlanintf = '%s.%s'(interface, self.vlan_id) if self.vlan_id\ else interface self.mvlanintf = '%s-mv%s' % (pvlanintf, get_random_string(4)) macaddr = 'address %s' % self.bms_mac if self.bms_mac else '' self.run('ip link add %s link %s %s type macvlan mode bridge' % (self.mvlanintf, pvlanintf, macaddr)) self.run('ip netns add %s' % self.namespace) self.run('ip link set netns %s %s' % (self.namespace, self.mvlanintf)) self.run_namespace('ip link set dev %s up' % self.mvlanintf)