def add_ip_to_vlan(self, vlan_number, ip_network): vlan = self.get_vlan_interface_data(vlan_number) ip_found = next((ip for ip in vlan.ips if ip.ip == ip_network.ip), False) if not ip_found: has_ips = len(vlan.ips) > 0 with self.config(), self.interface_vlan(vlan_number): if has_ips: self.ssh.do('no ip redirects') result = self.ssh.do('ip address {} {}{}'.format(ip_network.ip, ip_network.netmask, " secondary" if has_ips else "")) if len(result) > 0: raise IPNotAvailable(ip_network, reason="; ".join(result)) else: raise IPAlreadySet(ip_network, ip_found)
def add_ip_to_vlan(self, vlan_number, ip_network): vlan = self._get_vlan(vlan_number, include_vif_data=True) ip_exists = next((ip for ip in vlan.ips if ip.ip == ip_network.ip), False) if ip_exists: raise IPAlreadySet(ip_network) with self.config(), self.interface_vlan(vlan): ip_is_in_an_existing_network = any(ip_network in existing_ip for existing_ip in vlan.ips) result = self.shell.do("ip address {}{}".format( ip_network, " secondary" if ip_is_in_an_existing_network else "")) if len(result) > 0: raise IPNotAvailable(ip_network)
def add_ip_to_vlan(self, vlan_number, ip_network): vlan = self.get_vlan(vlan_number) ip_found = next((ip for ip in vlan.ips if ip.ip == ip_network.ip), False) if ip_found: raise IPAlreadySet(ip_network, ip_found) has_ips = len(vlan.ips) > 0 add_ip_command = "ip address {}{}".format(str(ip_network), " secondary" if has_ips else "") commands = [ "interface vlan {}".format(vlan_number), add_ip_command ] try: self.node.config(commands) except CommandError as e: raise IPNotAvailable(ip_network, reason=str(e))
def add_ip_to_vlan(self, vlan_number, ip_network): config = self.query( self.custom_strategies.one_vlan_by_vlan_id(vlan_number), one_interface_vlan(vlan_number)) self.custom_strategies.vlan_node(config, vlan_number) update = Update() self.custom_strategies.add_update_vlan_interface(update, vlan_number, name=None) for addr_node in config.xpath( "data/configuration/interfaces/interface/unit/family/inet/address/name" ): address = IPNetwork(addr_node.text) if ip_network in address: raise IPAlreadySet(ip_network) update.add_interface(irb_address_update(vlan_number, ip_network)) self._push(update)