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}
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()
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]
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)
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)
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
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()
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)
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')
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()
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 }
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()
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]
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