Ejemplo n.º 1
0
    def delete_ipv4_acl_rule_bulk(self, **kwargs):
        """
        Delete ACL rules from IPv4 ACL.
        Args:
            acl_name (str): Name of the access list.
            seq_ids(string): Range of ACL sequence rules.
        Returns:
            True, False or None for Success, failure and no-change respectively
            for each seq_ids.

        Examples:
            >>> from pyswitch.device import Device
            >>> with Device(conn=conn, auth=auth,
                            connection_type='NETCONF') as dev:
            >>>     print dev.acl.create_acl(acl_name='Acl_1',
                                             acl_type='standard',
                                             address_type='ip')
            >>>     print dev.acl.add_ip_acl_rule(acl_name='Acl_1',
                        acl_rules = [{"seq_id": 10, "action": "permit",
                                      "source": "host 192.168.0.3")
        """
        # Validate required and accepted parameters
        params_validator.validate_params_slx_nos_delete_acl_rule(**kwargs)

        # Parse params
        acl_name = self.ap.parse_acl_name(**kwargs)
        callback = kwargs.pop('callback', self._callback)

        acl = self._get_acl_info(acl_name, get_seqs=True)
        acl_type = acl['type']
        address_type = acl['protocol']

        if address_type != 'ip':
            raise ValueError("IPv4 Rule can not be added to non-ip ACL."
                             "ACL {} is of type {}".format(
                                 acl_name, address_type))

        seq_range = self.ap.parse_seq_id_by_range(acl['seq_ids'], **kwargs)
        user_data_list = [{'seq_id': seq_id} for seq_id in seq_range]

        # send the rules in a chunk of Acl.RULE_CHUNK_SIZE
        chunks = [
            user_data_list[i:i + SlxNosAcl.RULE_CHUNK_SIZE]
            for i in xrange(0, len(user_data_list), SlxNosAcl.RULE_CHUNK_SIZE)
        ]

        for chunk in chunks:
            t = jinja2.Template(acl_template.acl_rule_ipx_delete_bulk)
            config = t.render(address_type=address_type,
                              acl_type=acl_type,
                              acl_name=acl_name,
                              user_data_list=chunk)
            config = ' '.join(config.split())

            try:
                callback(config)
            except Exception as rpc_err:
                raise ValueError(rpc_err)

        return True
Ejemplo n.º 2
0
    def delete_ipv6_acl_rule(self, **kwargs):
        # Validate required and accepted parameters
        params_validator.validate_params_slx_nos_delete_acl_rule(**kwargs)

        self.delete_acl_rule(**kwargs)