def remove_vrrp_group(self, vlan_id, group_id): config = self.query(one_interface_vlan(vlan_id)) if len(config.xpath( "data/configuration/interfaces/interface/unit")) < 1: raise UnknownVlan(vlan_id) address_node = first( config.xpath( "data/configuration/interfaces/interface/unit/family" "/inet/address/vrrp-group/name[text()=\"{}\"]/../..".format( group_id))) if address_node is None: raise VrrpDoesNotExistForVlan(vlan=vlan_id, vrrp_group_id=group_id) vrrp_node = to_ele(""" <vrrp-group operation="delete"> <name>{group_id}</name> </vrrp-group>""".format(group_id=group_id)) update = Update() update.add_interface( irb_address_update(vlan_id, first_text(address_node.xpath("name")), children=[vrrp_node])) self._push(update)
def unset_interface_access_vlan(self, interface_id): config = self.query(one_interface(interface_id)) if len(config.xpath("data/configuration/interfaces/interface")) < 1: raise UnknownInterface(interface_id) if len( config.xpath( "data/configuration/interfaces/interface/unit/family/bridge/vlan-id" )) < 1: raise AccessVlanNotSet(interface_id) update = Update() update.add_interface( self.custom_strategies.interface_update( interface_id, "0", [to_ele('<vlan-id operation="delete" />')])) self._push(update)
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)
def set_vlan_icmp_redirects_state(self, vlan_number, state): config = self.query( self.custom_strategies.one_vlan_by_vlan_id(vlan_number), one_interface_vlan(vlan_number, extra_path="""<family> <inet> <no-redirects /> </inet> </family>""" )) self.custom_strategies.vlan_node(config, vlan_number) no_redirects_node = first( config.xpath( "data/configuration/interfaces/interface/unit/family/inet/no-redirects" )) update = Update() if no_redirects_node is None and state is False: self.custom_strategies.add_update_vlan_interface(update, vlan_number, name=None) update.add_interface(no_redirects(vlan_number=vlan_number)) self._push(update) elif no_redirects_node is not None and state is True: update.add_interface( no_redirects(vlan_number=vlan_number, operation="delete")) self._push(update)
def remove_ip_from_vlan(self, vlan_number, ip_network): config = self.query(one_interface_vlan(vlan_number)) if len(config.xpath( "data/configuration/interfaces/interface/unit")) < 1: raise UnknownVlan(vlan_number) 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: update = Update() update.add_interface( irb_address_update(vlan_number, ip_network, operation="delete")) self._push(update) return raise UnknownIP(ip_network)
def add_vrrp_group(self, vlan_number, group_id, ips=None, priority=None, hello_interval=None, dead_interval=None, track_id=None, track_decrement=None): config = self.query(one_interface_vlan(vlan_number)) if len(config.xpath( "data/configuration/interfaces/interface/unit")) < 1: raise UnknownVlan(vlan_number) adresses = [ IPNetwork(addr_node.text) for addr_node in config.xpath( "data/configuration/interfaces/interface/unit/family/inet/address/name" ) ] parent_address = self._get_address_that_contains_all_ips(adresses, ips) vrrp_node = to_ele(""" <vrrp-group> <name>{group_id}</name> <priority>{priority}</priority> <preempt> <hold-time>{preempt_hold_time}</hold-time> </preempt> <accept-data/> <authentication-type>simple</authentication-type> <authentication-key>{auth}</authentication-key> <track> <route> <route_address>{tracking}</route_address> <routing-instance>default</routing-instance> <priority-cost>{tracking_decrement}</priority-cost> </route> </track> </vrrp-group>""".format(vlan_number=vlan_number, parent_address=parent_address, group_id=group_id, vip=ips[0], preempt_hold_time=PREEMPT_HOLD_TIME, priority=priority, auth="VLAN{}".format(vlan_number), tracking=track_id, tracking_decrement=track_decrement)) for ip in ips: vrrp_node.append( to_ele("<virtual-address>{}</virtual-address>".format(ip))) update = Update() update.add_interface( irb_address_update(vlan_number, parent_address, children=[vrrp_node])) self._push(update)