Exemplo n.º 1
0
def is_vlan_number(vlan_number, **_):
    try:
        vlan_int = int(vlan_number)
    except ValueError:
        logging.getLogger("netman.api").info("Rejected vlan content : {}".format(repr(vlan_number)))
        raise BadVlanNumber()

    if not 1 <= vlan_int <= 4094:
        logging.getLogger("netman.api").info("Rejected vlan number : {}".format(vlan_number))
        raise BadVlanNumber()

    return {'vlan_number': vlan_int}
Exemplo n.º 2
0
 def manage_update_vlan_exception(self, message, number):
     if "being used by" in message:
         raise VlanAlreadyExist(number)
     elif "not within range" in message:
         if message.startswith("Value"):
             raise BadVlanNumber()
     elif "Must be a string" in message:
         raise BadVlanName()
Exemplo n.º 3
0
 def get_vlan(self, number):
     result = self.shell.do("show vlan id {}".format(number))
     if regex.match(".*\^.*", result[0]):
         raise BadVlanNumber()
     elif regex.match("^ERROR", result[0]):
         raise UnknownVlan(number)
     else:
         return parse_vlan_list(result)[0]
Exemplo n.º 4
0
    def get_vlan_interfaces(self, vlan_number):
        result = self.shell.do("show vlan id {}".format(vlan_number))

        if regex.match(".*\^.*", result[0]):
            raise BadVlanNumber()
        elif regex.match("^ERROR", result[0]):
            raise UnknownVlan(vlan_number)

        return self.parse_interface_from_vlan_list(vlan_number, result)
Exemplo n.º 5
0
Arquivo: dell.py Projeto: idjaw/netman
    def get_vlan_interfaces(self, vlan_number):
        result = self.shell.do("show vlan id {}".format(vlan_number), wait_for=("--More-- or (q)uit", "#"), include_last_line=True)
        while len(result) > 0 and "--More--" in result[-1]:
            result += self.shell.send_key("m", wait_for=("--More-- or (q)uit", "#"), include_last_line=True)
        if regex.match(".*\^.*", result[0]):
            raise BadVlanNumber()
        elif regex.match("^ERROR", result[0]):
            raise UnknownVlan(vlan_number)

        return self.parse_interface_from_vlan_list(vlan_number, result)
Exemplo n.º 6
0
    def get_vlan(self, vlan_number):
        result = self.page_reader.do(self.shell,
                                     "show vlan id {}".format(vlan_number))

        if regex.match(".*\^.*", result[0]):
            raise BadVlanNumber()
        elif regex.match("^ERROR", result[0]):
            raise UnknownVlan(vlan_number)
        vlan = parse_vlan_list(result)[0]
        return vlan
Exemplo n.º 7
0
    def add_vlan(self, number, name=None):
        result = self.shell.do("show vlan id {}".format(number))
        if regex.match(".*\^.*", result[0]):
            raise BadVlanNumber()
        elif regex.match("^VLAN", result[0]):
            raise VlanAlreadyExist(number)

        with self.config():
            result = self.shell.do('vlan {}'.format(number))
            if len(result) > 0:
                raise BadVlanNumber()
            else:
                if name:
                    result = self.shell.do('name {}'.format(name))

                self.shell.do('exit')

                if len(result) > 0:
                    raise BadVlanName()
Exemplo n.º 8
0
Arquivo: dell.py Projeto: idjaw/netman
    def add_vlan(self, number, name=None):
        result = self.shell.do("show vlan id {}".format(number))
        if regex.match(".*\^.*", result[0]):
            raise BadVlanNumber()
        elif regex.match("^VLAN", result[0]):
            raise VlanAlreadyExist(number)

        with self.config():
            with self.vlan_database():
                self.set('vlan {}', number)

            if name is not None:
                with self.interface("vlan {}".format(number)):
                    self.set('name {}', name).on_any_result(BadVlanName)
Exemplo n.º 9
0
    def add_vlan(self, number, name=None):
        result = self._show_vlan(number)
        if not result[0].startswith("Error"):
            raise VlanAlreadyExist(number)

        with self.config():
            result = self.shell.do('vlan {}{}'.format(number, " name {}".format(name) if name else ""))
            if len(result) > 0:
                if result[0].startswith("Error:"):
                    raise BadVlanNumber()
                else:
                    raise BadVlanName()
            else:
                self.shell.do('exit')
Exemplo n.º 10
0
    def add_vlan(self, number, name=None):
        if self._show_run_vlan(number):
            raise VlanAlreadyExist(number)

        with self.config():
            result = self.ssh.do('vlan {}'.format(number))
            if len(result) > 0:
                raise BadVlanNumber()
            else:
                if name:
                    result = self.ssh.do('name {}'.format(name))

                self.ssh.do('exit')

                if len(result) > 0:
                    raise BadVlanName()
Exemplo n.º 11
0
def is_vlan(data, **_):
    try:
        json_data = json.loads(data)
    except ValueError:
        raise BadRequest("Malformed content, should be a JSON object")

    if "number" not in json_data:
        raise BadVlanNumber()

    name = json_data["name"] if "name" in json_data and len(json_data["name"]) > 0 else None
    if name and " " in name:
        raise BadVlanName()

    return {
        'number': is_vlan_number(json_data["number"])['vlan_number'],
        'name': name
    }
Exemplo n.º 12
0
    def add_vlan(self, number, name=None):
        if not isvlan(number):
            raise BadVlanNumber()
        try:
            self.node.enable(["show vlan {}".format(number)], strict=True)
            raise VlanAlreadyExist(number)
        except CommandError:
            pass

        commands = ["vlan {}".format(number)]
        if name is not None:
            commands.append("name {}".format(name))

        try:
            self.node.config(commands)
        except CommandError:
            raise BadVlanName()
Exemplo n.º 13
0
    def get_vlan(self, number):
        try:
            vlans_result, interfaces_result = self.node.enable(
                ["show vlan {}".format(number), "show interfaces Vlan{}".format(number)], strict=True)
            vlans_info = vlans_result['result']
            interfaces_info = interfaces_result['result']
        except CommandError as e:
            if "not found in current VLAN database" in e.command_error:
                raise UnknownVlan(number)
            elif "Invalid input" in e.command_error:
                raise BadVlanNumber()
            elif "Interface does not exist" in e.command_error:
                vlans_info = e.output[1]
                interfaces_info = {"interfaces": {}}
            else:
                raise

        vlans = _extract_vlans(vlans_info)
        _apply_interface_data(interfaces_info, vlans)
        self._apply_interface_vlan_data(vlans)

        return vlans[0]
Exemplo n.º 14
0
    def add_vlan(self, number, name=None):
        config = self.query(all_vlans)

        try:
            self.get_vlan_config(number, config)
            raise VlanAlreadyExist(number)
        except UnknownVlan:
            pass

        update = Update()
        update.add_vlan(vlan_update(number, name))

        try:
            self._push(update)
        except RPCError as e:
            if "being used by" in e.message:
                raise VlanAlreadyExist(number)
            elif "not within range" in e.message:
                if e.message.startswith("Value"):
                    raise BadVlanNumber()
                elif e.message.startswith("Length"):
                    raise BadVlanName()

            raise