예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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))
예제 #4
0
    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)