示例#1
0
    def delete(self, topicName):
        """
    Delete Topic ACL.

    """
        args = acl_detail_parse.parse_args()
        auser = args['user']
        atype = args['type']
        acl_user = "******" + auser
        app.logger.info(
            "Request to delete ACL for topic {0} for user {1} and access type {2}."
            .format(topicName, auser, atype))
        try:

            admin = KafkaAdminClient(
                bootstrap_servers=config['cluster.broker.listeners'],
                security_protocol=config['cluster.security.protocol'],
                ssl_cafile=config['cluster.ssl.cafile'],
                ssl_certfile=config['cluster.ssl.certfile'],
                ssl_keyfile=config['cluster.ssl.keyfile'])
            results = admin.delete_acls([
                ACLFilter(principal=acl_user,
                          host="*",
                          operation=ACLOperation.ANY,
                          permission_type=ACLPermissionType.ANY,
                          resource_pattern=ResourcePattern(
                              ResourceType.TOPIC, topicName))
            ])

        except Exception as e:
            ns_acl.abort(500, str(e.args))
        finally:
            admin.close()

        if len(results[0][1]) > 0:
            return {"delete": "sucess"}
        else:
            ns_acl.abort(500, "Internal Error(Cannot delete any ACL)")
示例#2
0
    def test_create_describe_delete_acls(self):
        """Tests that we can add, list and remove ACLs
        """

        # Setup
        brokers = '%s:%d' % (self.server.host, self.server.port)
        admin_client = KafkaAdminClient(bootstrap_servers=brokers)

        # Check that we don't have any ACLs in the cluster
        acls, error = admin_client.describe_acls(
            ACLFilter(principal=None,
                      host="*",
                      operation=ACLOperation.ANY,
                      permission_type=ACLPermissionType.ANY,
                      resource_pattern=ResourcePattern(ResourceType.TOPIC,
                                                       "topic")))

        self.assertIs(error, NoError)
        self.assertEqual(0, len(acls))

        # Try to add an ACL
        acl = ACL(principal="User:test",
                  host="*",
                  operation=ACLOperation.READ,
                  permission_type=ACLPermissionType.ALLOW,
                  resource_pattern=ResourcePattern(ResourceType.TOPIC,
                                                   "topic"))
        result = admin_client.create_acls([acl])

        self.assertFalse(len(result["failed"]))
        self.assertEqual(len(result["succeeded"]), 1)

        # Check that we can list the ACL we created
        acl_filter = ACLFilter(principal=None,
                               host="*",
                               operation=ACLOperation.ANY,
                               permission_type=ACLPermissionType.ANY,
                               resource_pattern=ResourcePattern(
                                   ResourceType.TOPIC, "topic"))
        acls, error = admin_client.describe_acls(acl_filter)

        self.assertIs(error, NoError)
        self.assertEqual(1, len(acls))

        # Remove the ACL
        delete_results = admin_client.delete_acls([
            ACLFilter(principal="User:test",
                      host="*",
                      operation=ACLOperation.READ,
                      permission_type=ACLPermissionType.ALLOW,
                      resource_pattern=ResourcePattern(ResourceType.TOPIC,
                                                       "topic"))
        ])

        self.assertEqual(1, len(delete_results))
        self.assertEqual(1, len(
            delete_results[0][1]))  # Check number of affected ACLs

        # Make sure the ACL does not exist in the cluster anymore
        acls, error = admin_client.describe_acls(
            ACLFilter(principal="*",
                      host="*",
                      operation=ACLOperation.ANY,
                      permission_type=ACLPermissionType.ANY,
                      resource_pattern=ResourcePattern(ResourceType.TOPIC,
                                                       "topic")))
        self.assertIs(error, NoError)
        self.assertEqual(0, len(acls))