Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)