From 993b91e7e4957bbb02953d52af23753fdb6b2cf5 Mon Sep 17 00:00:00 2001 From: Luc DUZAN Date: Mon, 24 Jun 2024 15:32:27 +0200 Subject: [PATCH] add resource priority --- cmd/apply.go | 69 +- cmd/root.go | 5 +- schema/default-schema.json | 2 +- schema/docs_with_order.yaml | 12029 ++++++++++++++++ schema/{docs.yaml => docs_without_order.yaml} | 0 schema/kind.go | 10 +- schema/multiple_version.yaml | 4 +- schema/schema.go | 42 +- schema/schema_test.go | 143 +- 9 files changed, 12249 insertions(+), 55 deletions(-) create mode 100644 schema/docs_with_order.yaml rename schema/{docs.yaml => docs_without_order.yaml} (100%) diff --git a/cmd/apply.go b/cmd/apply.go index 4fe6ace..17a8163 100644 --- a/cmd/apply.go +++ b/cmd/apply.go @@ -2,45 +2,16 @@ package cmd import ( "fmt" + "os" + "github.com/conduktor/ctl/resource" + "github.com/conduktor/ctl/schema" "github.com/spf13/cobra" - "os" ) var filePath *[]string var dryRun *bool -// applyCmd represents the apply command -var applyCmd = &cobra.Command{ - Use: "apply", - Short: "Upsert a resource on Conduktor", - Long: ``, - Run: func(cmd *cobra.Command, args []string) { - var resources = make([]resource.Resource, 0) - for _, path := range *filePath { - r, err := resourceForPath(path) - if err != nil { - fmt.Fprintf(os.Stderr, "%s\n", err) - os.Exit(1) - } - resources = append(resources, r...) - } - var allSuccess = true - for _, resource := range resources { - upsertResult, err := apiClient().Apply(&resource, *dryRun) - if err != nil { - fmt.Fprintf(os.Stderr, "Could not apply resource %s/%s: %s\n", resource.Kind, resource.Name, err) - allSuccess = false - } else { - fmt.Printf("%s/%s: %s\n", resource.Kind, resource.Name, upsertResult) - } - } - if !allSuccess { - os.Exit(1) - } - }, -} - func resourceForPath(path string) ([]resource.Resource, error) { directory, err := isDirectory(path) if err != nil { @@ -54,7 +25,39 @@ func resourceForPath(path string) ([]resource.Resource, error) { } } -func initApply() { +func initApply(kinds schema.KindCatalog) { + // applyCmd represents the apply command + var applyCmd = &cobra.Command{ + Use: "apply", + Short: "Upsert a resource on Conduktor", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + var resources = make([]resource.Resource, 0) + for _, path := range *filePath { + r, err := resourceForPath(path) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + resources = append(resources, r...) + } + var allSuccess = true + schema.SortResources(kinds, resources, *debug) + for _, resource := range resources { + upsertResult, err := apiClient().Apply(&resource, *dryRun) + if err != nil { + fmt.Fprintf(os.Stderr, "Could not apply resource %s/%s: %s\n", resource.Kind, resource.Name, err) + allSuccess = false + } else { + fmt.Printf("%s/%s: %s\n", resource.Kind, resource.Name, upsertResult) + } + } + if !allSuccess { + os.Exit(1) + } + }, + } + rootCmd.AddCommand(applyCmd) // Here you will define your flags and configuration settings. diff --git a/cmd/root.go b/cmd/root.go index 36d0aba..0f40241 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,10 +2,11 @@ package cmd import ( "fmt" + "os" + "github.com/conduktor/ctl/client" "github.com/conduktor/ctl/schema" "github.com/spf13/cobra" - "os" ) var debug *bool @@ -58,7 +59,7 @@ func init() { debug = rootCmd.PersistentFlags().BoolP("verbose", "v", false, "show more information for debugging") initGet(kinds) initDelete(kinds) - initApply() + initApply(kinds) initMkKind() initPrintKind(kinds) } diff --git a/schema/default-schema.json b/schema/default-schema.json index 4cf0b71..1d4bd9b 100644 --- a/schema/default-schema.json +++ b/schema/default-schema.json @@ -1 +1 @@ -{"Application":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application","Name":"Application","ParentPathParam":[]}}},"ApplicationGroup":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application-group","Name":"ApplicationGroup","ParentPathParam":[]}}},"ApplicationInstance":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application-instance","Name":"ApplicationInstance","ParentPathParam":[]}}},"ApplicationInstancePermission":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application-instance-permission","Name":"ApplicationInstancePermission","ParentPathParam":[]}}},"Group":{"Versions":{"2":{"ListPath":"/public/iam/v2/group","Name":"Group","ParentPathParam":[]}}},"KafkaCluster":{"Versions":{"2":{"ListPath":"/public/console/v2/kafka-cluster","Name":"KafkaCluster","ParentPathParam":[]}}},"Subject":{"Versions":{"2":{"ListPath":"/public/kafka/v2/cluster/{cluster}/subject","Name":"Subject","ParentPathParam":["cluster"]}}},"Topic":{"Versions":{"2":{"ListPath":"/public/kafka/v2/cluster/{cluster}/topic","Name":"Topic","ParentPathParam":["cluster"]}}},"TopicPolicy":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/topic-policy","Name":"TopicPolicy","ParentPathParam":[]}}},"User":{"Versions":{"2":{"ListPath":"/public/iam/v2/user","Name":"User","ParentPathParam":[]}}}} \ No newline at end of file +{"Application":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application","Name":"Application","ParentPathParam":[],"Order":6}}},"ApplicationGroup":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application-group","Name":"ApplicationGroup","ParentPathParam":[],"Order":9}}},"ApplicationInstance":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application-instance","Name":"ApplicationInstance","ParentPathParam":[],"Order":7}}},"ApplicationInstancePermission":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/application-instance-permission","Name":"ApplicationInstancePermission","ParentPathParam":[],"Order":8}}},"Group":{"Versions":{"2":{"ListPath":"/public/iam/v2/group","Name":"Group","ParentPathParam":[],"Order":1}}},"KafkaCluster":{"Versions":{"2":{"ListPath":"/public/console/v2/kafka-cluster","Name":"KafkaCluster","ParentPathParam":[],"Order":2}}},"Subject":{"Versions":{"2":{"ListPath":"/public/kafka/v2/cluster/{cluster}/subject","Name":"Subject","ParentPathParam":["cluster"],"Order":4}}},"Topic":{"Versions":{"2":{"ListPath":"/public/kafka/v2/cluster/{cluster}/topic","Name":"Topic","ParentPathParam":["cluster"],"Order":3}}},"TopicPolicy":{"Versions":{"1":{"ListPath":"/public/self-serve/v1/topic-policy","Name":"TopicPolicy","ParentPathParam":[],"Order":5}}},"User":{"Versions":{"2":{"ListPath":"/public/iam/v2/user","Name":"User","ParentPathParam":[],"Order":0}}}} \ No newline at end of file diff --git a/schema/docs_with_order.yaml b/schema/docs_with_order.yaml new file mode 100644 index 0000000..47403cd --- /dev/null +++ b/schema/docs_with_order.yaml @@ -0,0 +1,12029 @@ +openapi: 3.0.3 +info: + title: Conduktor API + version: v2 + summary: The API to interact with Conduktor Console programmatically + contact: + email: contact@conduktor.io + url: https://docs.conduktor.io + x-logo: + url: https://avatars.githubusercontent.com/u/60062294?s=200&v=4 + backgroundColor: '#FFFFFF' + altText: Conduktor logo +tags: +- name: Introduction + description: | + The Conduktor REST API 's aim is to help you automate the way your Kafka resources are handled by your teams. + + Get started with Conduktor [self-hosted](https://docs.conduktor.io/platform/installation/get-started/docker/) today. Setup takes only a few minutes. +- name: Authentication + description: | + Authentication to the API requires a token set in the **authorization** header. + + To get a token and use it you must go through the following steps: + + * Log in to Conduktor Console and go to the **Settings** page. + + * Click on the **API Keys** tab. + + * Click on the **Create API Key** button. + + * Give your key a name and click on the **Generate Key** button. + + * Copy the key and store it in a safe place. You will not be able to see it again. + + * Use the key in the **authorization** header of your requests. + + Example: + + ```shell + API_KEY="your_api_key" + curl -X GET "https://your.conduktor.host/public/v1/clusters" -H "accept: application/json" -H "authorization: Bearer $API_KEY" + ``` +- name: Kinds + description: |+ + ### Definition + + Kinds the resource types of the Conduktor platform. They follow a set of conventions inspired by K8S that improve the experience and the consistency of the tool chain for the users. + It is important to understand that this standardization is made with the goal of a global __Conduktor automation experience__ (including not only API, but also CLI, files resources definition, devops, scripting, UI) and should result in a __better governance__ of your Kafka resources. + + ### Conduktor Kinds + + The following kinds are available in the Conduktor API: + * `Topic` + * `Application` + * `ApplicationInstance` + * `ApplicationInstancePermission` + * `TopicPolicy` + + ### Properties + Each kind has the following groups of properties: + * `kind`: the kind of the resource (e.g. `Topic`, `Application`...). This field is mandatory, immutable, and case sensitive. + * `version`: the version of the kind that the resource was created with. The version is inherited from the [api group](#tag/Api-Groups) of the kind. Breaking changes to the kind schema will result in a new version. + * `metadata` - common metadata for any kinds. + * `name`: the unique identifier for the resource. It is unique __in the scope of the kind__, not universally. `name` can have different formats depending on the kind. For example clusters names must follow this pattern `^[0-9a-z\\-\\_]+$$` although other kinds can have different patterns. + * `labels`: a set of key-value pairs that can be by the used to organize and categorize resources in a custom way. + * `spec` - the specific fields of each kind. + + + Example: + ```json + { + "metadata":{ + "name":"my-topic", + "cluster":"my-cluster", + "labels": { + "env": "prod", + "team": "infra" + } + }, + "spec":{ + "partitions":1, + "replicationFactor":1, + "configs":{ + } + }, + "apiVersion":"kafka/v2", + "kind":"Topic" + } + ``` + + +- name: Api Groups + description: |+ + ### Definition + + API groups a set of resources that share the same API path prefix. They are used to organize the API endpoints and the + resources they manage. + The versioning is set at this level, so all the resources in the same group share the same version. + Kinds of a same group can be nested paths in the API, for example, the `clusters` group can have a `connectors` kind + nested in it. + + ### Conduktor Api Groups + + The following groups are available in the Conduktor API: + + * `console` : Manage the metadata concerning the connection and the information of the Kafka clusters that you have + access to. + * `iam`: Define the users, groups, and permissions of your Conduktor platform. + * `self-serve`: Empower teams to govern their Kafka applications. + * `kafka`: Endpoints to interact with your Kafka clusters. + * `gateway`: Manage the virtual clusters, interceptors, and topic mappings of your Conduktor Gateway. + + | Api Group | Kinds | + |--------------|----------------------------------------------------------------------------------------------------------| + | `console` | `clusters`, `certificates` | + | `iam` | `users`, `groups`, `permissions` | + | `self-serve` | `application`, `application-instance`, `application-instance-permission`, `topic-policy` | + | `kafka` | `topic`, `consumergroup`, `service-accounts`, `ksqlDBs` | + | `gateway` | `interceptors` | + + + + +- name: Versioning + description: |+ + * __The version is set at the api group level__. It is incremented when a breaking change happens in the schema of an endpoint of the group (that has been marked `stable`). The n-1 version is still available for a while to allow users to migrate. The version is part of the endpoint path. + + + Endpoint also have a status to manage their API lifecycle, following the order below: + * __preview__: this is an early-stage feature, really likely to change + * __beta__: early access feature, breaking change + * __stable__: Production-ready endpoint, no breaking change + * __deprecated__: This endpoint isn't supported anymore and the user should migrate + + + +- name: Conventions + description: | + ### Path conventions + + The API follows as much as possible the endpoints structure below for each kind of resource: + * `GET /{api-group}/{version}/{kind}/{name}` to read a resource + * `GET /{api-group}/{version}/{kind}` to list resources of a kind + * `PUT /{api-group}/{version}/{kind}` to update or create a resource + * The `name` field is mandatory in the request body for updates. If not matching an existing resource, a 404 Not Found is returned. + * The `name` field is omitted in the request body for creations. + * 201 Created is returned for creations, 200 OK for updates. + * `DELETE /{api-group}/{version}/{kind}/{name}` to delete a resource + * `POST` is used for specific operations that don't fit this CRUD model. PUT is the default verb for updates and creations. + * Important principle: the result of a GET can be reused as the body of a PUT to update the resource. + + __Nested paths__: + When a kind is nested in another kind, the parent kind is used in the endpoint path. + For example, the `topic` kind is nested in the `cluster` group, so the endpoints for connectors are: + * `GET /kafka/v2/cluster/{name}/topic` + * `GET /kafka/v2/cluster/{name}/topic/{name}` + * `PUT /kafka/v2/cluster/{name}/topic` + * `DELETE /kafka/v2/cluster/{name}/topic/{name}` +- name: cli_user_iam_v2_0 + x-displayName: user +- name: cli_group_iam_v2_1 + x-displayName: group +- name: cli_kafka-cluster_console_v2_2 + x-displayName: kafka-cluster +- name: cli_topic_kafka_v2_3 + x-displayName: topic +- name: cli_subject_kafka_v2_4 + x-displayName: subject +- name: cli_topic-policy_self-serve_v1_5 + x-displayName: topic-policy +- name: cli_application_self-serve_v1_6 + x-displayName: application +- name: cli_application-instance_self-serve_v1_7 + x-displayName: application-instance +- name: cli_application-instance-permission_self-serve_v1_8 + x-displayName: application-instance-permission +- name: cli_application-group_self-serve_v1_9 + x-displayName: application-group +paths: + /public/v1/groups: + get: + tags: + - groups + description: Return all groups of an organization + operationId: List all groups + responses: + '200': + description: The list of groups + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/PublicGroupResponse' + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/groups' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + post: + tags: + - groups + description: Create a new group in the organization + operationId: Create a group + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PublicCreateGroupRequest' + example: + name: Data engineering + description: Data department. + groupId: data-engineering + externalGroups: + - data + - dataeng + required: true + responses: + '201': + description: '' + '400': + description: 'Invalid value for: body, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/groups' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"name":"Data engineering","description":"Data department.","groupId":"data-engineering","externalGroups":["data","dataeng"]}' \ + --location \ + --max-redirs 32 + /public/v1/groups/{groupId}: + get: + tags: + - groups + description: Return a group by id with its users + operationId: Get a group + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: The group matching the given slug + content: + application/json: + schema: + $ref: '#/components/schemas/PublicGroupResponse' + '400': + description: 'Invalid value for: path parameter groupId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group found with this slug + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group found with this slug + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/groups/data-engineering' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - groups + description: Create or update a group in the organization + operationId: Create or update a group + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateGroupRequest' + example: + name: Data engineering + description: Data department. + externalGroups: + - data + - dataeng + required: true + responses: + '200': + description: '' + '400': + description: 'Invalid value for: path parameter groupId, Invalid value for: + body, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/groups/data-engineering' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"name":"Data engineering","description":"Data department.","externalGroups":["data","dataeng"]}' \ + --location \ + --max-redirs 32 + delete: + tags: + - groups + description: Delete a group from the organization + operationId: Delete a Group + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '204': + description: The group was deleted + '400': + description: 'Invalid value for: path parameter groupId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: The searched entity was not found + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: The searched entity was not found + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/groups/data-engineering' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/groups/{groupId}/users/{userId}: + put: + tags: + - groups + description: Add a user to a group + operationId: Add User To Group using ID + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + - name: userId + in: path + required: true + schema: + type: integer + format: int32 + responses: + '200': + description: '' + '400': + description: 'Invalid value for: path parameter groupId, Invalid value for: + path parameter userId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: The searched entity was not found + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: The searched entity was not found + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + deprecated: true + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/users/42' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - groups + description: Remove a user from a group + operationId: Remove User from Group using ID + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + - name: userId + in: path + required: true + schema: + type: integer + format: int32 + responses: + '200': + description: '' + '400': + description: 'Invalid value for: path parameter groupId, Invalid value for: + path parameter userId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + deprecated: true + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/users/42' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/groups/{groupId}/userEmail/{email}: + put: + tags: + - groups + description: Add a user to a group + operationId: Add User To Group using Email + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + - name: email + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + '400': + description: 'Invalid value for: path parameter groupId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: The searched entity was not found + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: The searched entity was not found + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/userEmail/user@cdk.com' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - groups + description: Remove a user from a group + operationId: Remove User from Group using Email + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + - name: email + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + '400': + description: 'Invalid value for: path parameter groupId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/userEmail/user@cdk.com' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/groups/{groupId}/permissions: + get: + tags: + - groups + description: Get group's permissions + operationId: Get permissions + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + example: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + '400': + description: 'Invalid value for: path parameter groupId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - groups + description: Set permissions to group + operationId: Set permissions + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + example: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + required: false + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group found with this slug + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group found with this slug + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '[{"resourceType":"Topic","clusterId":"my-cluster","topicPattern":"finance-*","permissions":["topicCreate","topicDelete"]}]' \ + --location \ + --max-redirs 32 + delete: + tags: + - groups + description: Delete group's permissions + operationId: Delete permissions + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + example: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + required: false + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group found with this slug + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group found with this slug + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '[{"resourceType":"Topic","clusterId":"my-cluster","topicPattern":"finance-*","permissions":["topicCreate","topicDelete"]}]' \ + --location \ + --max-redirs 32 + patch: + tags: + - groups + description: Add permissions to group + operationId: Add permissions + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + example: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + required: false + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PATCH \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '[{"resourceType":"Topic","clusterId":"my-cluster","topicPattern":"finance-*","permissions":["topicCreate","topicDelete"]}]' \ + --location \ + --max-redirs 32 + /public/v1/groups/{groupId}/permissions/all: + delete: + tags: + - groups + description: Delete all user's permissions + operationId: Delete all permissions + parameters: + - name: groupId + in: path + description: id of the group + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group found with this slug + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group found with this slug + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/groups/data-engineering/permissions/all' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/iam/v2/group/{group name}: + get: + tags: + - cli_group_iam_v2_1 + operationId: Get Group by name + parameters: + - name: group name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GroupResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/iam/v2/group/my-group' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_group_iam_v2_1 + operationId: Delete a Group + parameters: + - name: group name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/iam/v2/group/my-group' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/iam/v2/group: + get: + tags: + - cli_group_iam_v2_1 + operationId: List Group resources + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/GroupResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/iam/v2/group' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_group_iam_v2_1 + operationId: Create or update a Group + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GroupResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GroupApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No group with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No group with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/iam/v2/group?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v2","kind":"Group","metadata":{"name":"group"},"spec":{"displayName":"test","description":"description","externalGroups":["test"],"members":["user@conduktor.io"],"membersFromExternalGroups":[],"permissions":[{"resourceType":"TOPIC","cluster":"*","name":"test","patternType":"LITERAL","permissions":["topicConsume"]},{"resourceType":"TOPIC","cluster":"*","name":"test2","patternType":"PREFIXED","permissions":["topicConsume"]}]}}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}: + get: + tags: + - clusters + description: Get cluster from its technical id + operationId: Get a cluster + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '200': + description: The cluster + content: + application/json: + schema: + $ref: '#/components/schemas/PublicKafkaClusterResponse' + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - clusters + description: |2 + + Create or update a cluster inside the organization + The technical is mandatory. if it matches an existing cluster, it will be updated, otherwise it will be created. + The slugs of the kafka connects must be unique within the cluster. + operationId: Create or update a cluster + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + requestBody: + description: The cluster to create or update + content: + application/json: + schema: + $ref: '#/components/schemas/UpsertKafkaClusterRequest' + examples: + Simple Kafka cluster: + value: + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + ignoreUntrustedCertificate: false + Simple Kafka cluster with UI config: + value: + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + color: '#000000' + icon: icon + ignoreUntrustedCertificate: false + Kafka cluster with properties: + value: + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + properties: |2 + + security.protocol=SSL + ssl.truststore.location=/etc/kafka/secrets/kafka.truststore.jks + ssl.truststore.password=conduktor + ssl.keystore.location=/etc/kafka/secrets/kafka.keystore.jks + ssl.keystore.password=conduktor + ignoreUntrustedCertificate: false + Kafka cluster with a Schema Registry: + value: + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + schemaRegistry: + url: https://schema-registry:8081 + security: + key: key + certificateChain: certificateChain + type: SSLAuth + properties: |2 + + schema.registry.ssl.truststore.location=/etc/kafka/secrets/kafka.truststore.jks + schema.registry.ssl.truststore.password=conduktor + schema.registry.ssl.keystore.location=/etc/kafka/secrets/kafka.keystore.jks + schema.registry.ssl.keystore.password=conduktor + ignoreUntrustedCertificate: false + type: ConfluentLikeSchemaRegistryRequest + ignoreUntrustedCertificate: false + Kafka cluster with Kafka Connect: + value: + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + kafkaConnects: + - url: http://kafka-connect:8083 + slug: kafka-connect + name: kafka-connect + security: + key: key + certificateChain: certificateChain + type: KafkaConnectSSLAuth + headers: |2 + + "transforms": "insertAppIdHeader", + "transforms.insertAppIdHeader.type": "org.apache.kafka.connect.transforms.InsertHeader", + "transforms.insertAppIdHeader.header": "app.id", + "transforms.insertAppIdHeader.value.literal": "best-app-ever" + ignoreUntrustedCertificate: false + ignoreUntrustedCertificate: false + Kafka cluster with ksqlDB: + value: + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + ignoreUntrustedCertificate: false + ksqlDBs: + - url: http://ksqlDB:8088 + slug: ksqlDB + name: ksqlDB + security: + key: key + certificateChain: certificateChain + type: KsqlDBSSLAuth + headers: '' + ignoreUntrustedCertificate: false + required: true + responses: + '200': + description: The created or updated cluster + content: + application/json: + schema: + $ref: '#/components/schemas/PublicKafkaClusterResponse' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"name":"My Kafka cluster","bootstrapServers":"broker1:9092, broker2:9092","properties":"\nsecurity.protocol=SSL\nssl.truststore.location=/etc/kafka/secrets/kafka.truststore.jks\nssl.truststore.password=conduktor\nssl.keystore.location=/etc/kafka/secrets/kafka.keystore.jks\nssl.keystore.password=conduktor\n","color":null,"icon":null,"schemaRegistry":null,"kafkaConnects":null,"ignoreUntrustedCertificate":false,"amazonSecurity":null,"kafkaFlavor":null,"ksqlDBs":null}' \ + --location \ + --max-redirs 32 + delete: + tags: + - clusters + operationId: Delete a cluster + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '204': + description: The cluster has been deleted + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters: + get: + tags: + - clusters + description: Get all clusters of the organization + operationId: List all clusters + responses: + '200': + description: The list of the clusters of the organization + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/PublicKafkaClusterResponse' + example: + - technicalId: silent-hill + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + kafkaConnects: [] + ignoreUntrustedCertificate: false + createdAt: '1970-01-01T00:00:00Z' + updatedAt: '1970-01-01T00:00:00Z' + ksqlDBs: [] + - technicalId: silent-hill + name: My Kafka cluster + bootstrapServers: broker1:9092, broker2:9092 + properties: |2 + + security.protocol=SSL + ssl.truststore.location=/etc/kafka/secrets/kafka.truststore.jks + ssl.truststore.password=conduktor + ssl.keystore.location=/etc/kafka/secrets/kafka.keystore.jks + ssl.keystore.password=conduktor + kafkaConnects: [] + ignoreUntrustedCertificate: false + createdAt: '1970-01-01T00:00:00Z' + updatedAt: '1970-01-01T00:00:00Z' + ksqlDBs: [] + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/certificates: + get: + tags: + - certificates + description: List the certificates of the organization + operationId: List certificates + responses: + '200': + description: The list of certificates of the organization + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DecodedCertificate' + example: + - id: 1 + version: 1 + serialNumber: 123 + issuerDN: CN=Test Root CA + subjectDN: CN=Test Subordinate CA + notBefore: 1672531200000 + notAfter: 1704067200000 + - id: 2 + version: 1 + serialNumber: 456 + issuerDN: CN=Test Root CA + subjectDN: CN=Test Subordinate CA + notBefore: 1672531200000 + notAfter: 1704067200000 + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/certificates' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + post: + tags: + - certificates + description: Add one or several certificates from a text input to the organization + operationId: Add a certificate + requestBody: + description: |2 + + The certificate(s) as a String to add to the organization. + * The input field must match the following regex pattern (cf. example): -----BEGIN CERTIFICATE-----(?:[\\s\\S]*?)-----END CERTIFICATE----- + * The input field must contain a valid x509 certificate (PEM or CRT formats are supported) + content: + application/json: + schema: + $ref: '#/components/schemas/CreateCertificateRequest' + example: + input: |- + -----BEGIN CERTIFICATE----- + MIIDRjCCAi6gAwIBAgIQbgEc+n3F+Gqe8YQqls+DRDANBgkqhkiG9w0BAQsFADAX + MRUwEwYDVQQDDAxUZXN0IFJvb3QgQ0EwHhcNMjIxMDI0MTk1OTUyWhcNMzIxMDIx + MTk1OTUyWjAeMRwwGgYDVQQDDBNUZXN0IFN1Ym9yZGluYXRlIENBMIIBIjANBgkq + hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr4XNztsNyAaewOH9QkrpQWkT78FYg7Ke + j/C2vfzwVb8d/IVP6L8bKIA5/lGlQb5fWEB0AQnlRYVxQyVkycRGpPN3mAzfsD0g + v786pDxxkKAeXMFup+Pc6vRDA+kJ6ok6JcrjhJr+9mBrRCVP6hlUswlQnR2fiYGG + Z4A0VYQu9u2gPwsIBuTBNI9vH6+cKdjdWZIJ4+XJNJ8ohbr8URDa7g3pEIHr71kk + L5mabsB4KLPm0l3W6mu6QTYXn51NAvTMtDx9XCEThNqLammls0xio9Qpp7gxI1QY + huKwNkSz2a50HbhR2kbjSlUw+ugqHBLajB9RwhRtJJT4oF7/V1ZOzQIDAQABo4GG + MIGDMB8GA1UdIwQYMBaAFDpynTg8PcVyv8i1s4qxgQlIT1EhMBIGA1UdEwEB/wQI + MAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMA4GA1UdDwEB + /wQEAwIBBjAdBgNVHQ4EFgQUbFpG1G+/QTgbgEa8nRc75m1b2TwwDQYJKoZIhvcN + AQELBQADggEBAEfcOpW/VZjlYdClTBVDi8bpMfs3AN+gFouetPMddEXJPJ6xm7My + a5+rmXdLX+l5ThsNkFQ5+UOXu7PBtpgQfn7W1q2el2oDgg2uc0I0f4WFlMyM1N9z + YkN80/7S5g3n2bbkAWjhyx2b/zh73ChM/rbLGKlsjz+mRIJzI7DXcEwVNJjRMUtG + xxp9PBMZ7uZyoyHru592oaX9Ehm6UDpBDUia8POTENzEz0+9msv0mWbYCzOBKupc + mnd4jMMbT8MSlANCmqPV8VjbnBKT+lVL7nXSqrxlZ6jb8ZA5I9lHK7XS1sQab574 + UC7flGdjN3Ml05raSgAz3mh7qGhv8iQDMbo= + -----END CERTIFICATE----- + required: true + responses: + '201': + description: The certificate(s) added to the organization + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DecodedCertificate' + example: + - id: 1 + version: 1 + serialNumber: 123 + issuerDN: CN=Test Root CA + subjectDN: CN=Test Subordinate CA + notBefore: 1672531200000 + notAfter: 1704067200000 + - id: 2 + version: 1 + serialNumber: 456 + issuerDN: CN=Test Root CA + subjectDN: CN=Test Subordinate CA + notBefore: 1672531200000 + notAfter: 1704067200000 + '400': + description: |2 + + The Json is invalid or the certificate input does not contain a (or several) valid certificate(s): + * The input field must match the following pattern: -----BEGIN CERTIFICATE-----(?:[\\s\\S]*?)-----END CERTIFICATE----- + * The input field must contain a valid x509 certificate (PEM or CRT formats are supported) + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: |2 + + The Json is invalid or the certificate input does not contain a (or several) valid certificate(s): + * The input field must match the following pattern: -----BEGIN CERTIFICATE-----(?:[\\s\\S]*?)-----END CERTIFICATE----- + * The input field must contain a valid x509 certificate (PEM or CRT formats are supported) + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/certificates' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"input":"-----BEGIN CERTIFICATE-----\nMIIDRjCCAi6gAwIBAgIQbgEc+n3F+Gqe8YQqls+DRDANBgkqhkiG9w0BAQsFADAX\nMRUwEwYDVQQDDAxUZXN0IFJvb3QgQ0EwHhcNMjIxMDI0MTk1OTUyWhcNMzIxMDIx\nMTk1OTUyWjAeMRwwGgYDVQQDDBNUZXN0IFN1Ym9yZGluYXRlIENBMIIBIjANBgkq\nhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr4XNztsNyAaewOH9QkrpQWkT78FYg7Ke\nj/C2vfzwVb8d/IVP6L8bKIA5/lGlQb5fWEB0AQnlRYVxQyVkycRGpPN3mAzfsD0g\nv786pDxxkKAeXMFup+Pc6vRDA+kJ6ok6JcrjhJr+9mBrRCVP6hlUswlQnR2fiYGG\nZ4A0VYQu9u2gPwsIBuTBNI9vH6+cKdjdWZIJ4+XJNJ8ohbr8URDa7g3pEIHr71kk\nL5mabsB4KLPm0l3W6mu6QTYXn51NAvTMtDx9XCEThNqLammls0xio9Qpp7gxI1QY\nhuKwNkSz2a50HbhR2kbjSlUw+ugqHBLajB9RwhRtJJT4oF7/V1ZOzQIDAQABo4GG\nMIGDMB8GA1UdIwQYMBaAFDpynTg8PcVyv8i1s4qxgQlIT1EhMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMA4GA1UdDwEB\n/wQEAwIBBjAdBgNVHQ4EFgQUbFpG1G+/QTgbgEa8nRc75m1b2TwwDQYJKoZIhvcN\nAQELBQADggEBAEfcOpW/VZjlYdClTBVDi8bpMfs3AN+gFouetPMddEXJPJ6xm7My\na5+rmXdLX+l5ThsNkFQ5+UOXu7PBtpgQfn7W1q2el2oDgg2uc0I0f4WFlMyM1N9z\nYkN80/7S5g3n2bbkAWjhyx2b/zh73ChM/rbLGKlsjz+mRIJzI7DXcEwVNJjRMUtG\nxxp9PBMZ7uZyoyHru592oaX9Ehm6UDpBDUia8POTENzEz0+9msv0mWbYCzOBKupc\nmnd4jMMbT8MSlANCmqPV8VjbnBKT+lVL7nXSqrxlZ6jb8ZA5I9lHK7XS1sQab574\nUC7flGdjN3Ml05raSgAz3mh7qGhv8iQDMbo=\n-----END CERTIFICATE-----"}' \ + --location \ + --max-redirs 32 + delete: + tags: + - certificates + description: Delete multiple certificates from the organization + operationId: Delete certificates + parameters: + - name: ids + in: query + description: The ids of the certificates to delete + required: true + schema: + type: array + minItems: 1 + items: + type: integer + format: int32 + example: + - 1 + - 2 + - 3 + responses: + '200': + description: The list of certificate ids effectively deleted + content: + application/json: + schema: + type: array + items: + type: integer + format: int32 + example: + - 1 + - 2 + - 3 + '400': + description: The ids query parameter is invalid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The ids query parameter is invalid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/certificates?ids=1&ids=2&ids=3' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/certificates/file: + post: + tags: + - certificates + description: Import certificates in the organization from a file (.crt, .pem. + or .jks) + operationId: Upload a certificate + requestBody: + description: |2 + + The certificate(s) as a file to add to the organization and the password if the file is in the JKS format. + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/CreateCertificateFromFileRequest' + required: true + responses: + '201': + description: The certificate(s) added to the organization + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DecodedCertificate' + example: + - id: 1 + version: 1 + serialNumber: 123 + issuerDN: CN=Test Root CA + subjectDN: CN=Test Subordinate CA + notBefore: 1672531200000 + notAfter: 1704067200000 + - id: 2 + version: 1 + serialNumber: 456 + issuerDN: CN=Test Root CA + subjectDN: CN=Test Subordinate CA + notBefore: 1672531200000 + notAfter: 1704067200000 + '400': + description: |2 + + The input file is invalid for one of the following reasons: + * The content is not a valid x509 certificate (PEM, CRT or JKS formats are supported) + * If the file is in the JKS format the password field is mandatory and a valid password must be provided + * The file exceeds the maximum size allowed (50MB) + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: |2 + + The input file is invalid for one of the following reasons: + * The content is not a valid x509 certificate (PEM, CRT or JKS formats are supported) + * If the file is in the JKS format the password field is mandatory and a valid password must be provided + * The file exceeds the maximum size allowed (50MB) + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/certificates/file' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: multipart/form-data' \ + --form 'file=@keystore.jks' \ + --form 'jksPassword=password' \ + --location \ + --max-redirs 32 + /public/v1/certificates/{certificateId}: + delete: + tags: + - certificates + description: Delete a certificate from the organization + operationId: Delete a certificate + parameters: + - name: certificateId + in: path + description: The id of the certificate to delete + required: true + schema: + type: integer + format: int32 + responses: + '204': + description: The certificate has been deleted + '400': + description: 'Invalid value for: path parameter certificateId, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/certificates/42' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/certificates/tls-test: + post: + tags: + - certificates + description: Test a tcp target with the organization's certificates (Kafka uses + the TLS/TCP protocol) + operationId: TLS check + requestBody: + description: ' The connection (host, port) to test with the organization''s + certificates' + content: + application/json: + schema: + $ref: '#/components/schemas/TlsTestRequest' + example: + host: www.google.com + port: 443 + required: true + responses: + '200': + description: The result of the TLS check + content: + application/json: + schema: + $ref: '#/components/schemas/TlsTestResponse' + examples: + The server is authenticated: + value: + status: checked_certificate + The server could NOT be authenticated: + value: + status: unchecked_certificate + The server is unsecure (not using TLS): + value: + status: tls_not_supported + The given url and port could not be reached (timeout 5 seconds): + value: + status: unreachable_target + The server is not authenticated (unexpected response): + value: + status: unexpected_status + '400': + description: The input is invalid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The input is invalid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/certificates/tls-test' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"host":"www.google.com","port":443}' \ + --location \ + --max-redirs 32 + /public/v1/users: + get: + tags: + - users + operationId: Get the list of users + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/PublicWithAllDetailsAndGroup' + example: + - userId: john.doe@conduktor.io + firstName: John + lastName: Doe + fullName: John Doe + pictureUrl: https://www.gravatar.com/avatar/123 + phoneNumber: '+33612345678' + country: France + platformRole: admin + groups: + - name: Admin + groupId: admin + - userId: jane.doe@conduktor.io + firstName: Jane + lastName: Doe + fullName: John Doe + pictureUrl: https://www.gravatar.com/avatar/123 + phoneNumber: '+33612345678' + country: France + platformRole: member + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/users' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - users + description: Create or update a user in the organization + operationId: Update a user + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserRequest' + example: + lastName: Doe + firstName: John + email: john.doe@conduktor.io + required: true + responses: + '200': + description: The user was created or updated + '400': + description: 'Invalid value for: body, Invalid value' + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/users' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"lastName":"Doe","firstName":"John","email":"john.doe@conduktor.io"}' \ + --location \ + --max-redirs 32 + /public/v1/users/{email}: + get: + tags: + - users + description: Get a user by email + operationId: Get user + parameters: + - name: email + in: path + description: Email address of user + required: true + schema: + type: string + responses: + '200': + description: The user found + content: + application/json: + schema: + $ref: '#/components/schemas/PublicWithAllDetailsAndGroup' + example: + userId: john.doe@conduktor.io + firstName: John + lastName: Doe + fullName: John Doe + pictureUrl: https://www.gravatar.com/avatar/123 + phoneNumber: '+33612345678' + country: France + platformRole: admin + groups: + - name: Admin + groupId: admin + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No user found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/users/john.doe@conduktor.io' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - users + description: Removes a user from the organization + operationId: Delete a user + parameters: + - name: email + in: path + description: Email address of user + required: true + schema: + type: string + responses: + '204': + description: The user was deleted + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No user found with this id + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user found with this id + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/users/john.doe@conduktor.io' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/users/{email}/permissions: + get: + tags: + - users + description: Get user's permissions + operationId: Get permissions + parameters: + - name: email + in: path + description: Email address of user + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UserPermissions' + example: + user: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + groups: + '42': + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicRead + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No user found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/users/john.doe@conduktor.io/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - users + description: Set permissions to user + operationId: Set permissions + parameters: + - name: email + in: path + description: Email address of user + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + example: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + required: false + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No user found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/users/john.doe@conduktor.io/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '[{"resourceType":"Topic","clusterId":"my-cluster","topicPattern":"finance-*","permissions":["topicCreate","topicDelete"]}]' \ + --location \ + --max-redirs 32 + delete: + tags: + - users + description: Delete user's permissions + operationId: Delete permissions + parameters: + - name: email + in: path + description: Email address of user + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + example: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + required: false + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No user found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/users/john.doe@conduktor.io/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '[{"resourceType":"Topic","clusterId":"my-cluster","topicPattern":"finance-*","permissions":["topicCreate","topicDelete"]}]' \ + --location \ + --max-redirs 32 + patch: + tags: + - users + description: Add permissions to user + operationId: Add permissions + parameters: + - name: email + in: path + description: Email address of user + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + example: + - resourceType: Topic + clusterId: my-cluster + topicPattern: finance-* + permissions: + - topicCreate + - topicDelete + required: false + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No user found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PATCH \ + --url 'http://localhost:8080/public/v1/users/john.doe@conduktor.io/permissions' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '[{"resourceType":"Topic","clusterId":"my-cluster","topicPattern":"finance-*","permissions":["topicCreate","topicDelete"]}]' \ + --location \ + --max-redirs 32 + /public/v1/users/{email}/permissions/all: + delete: + tags: + - users + description: Delete all user's permissions + operationId: Delete all permissions + parameters: + - name: email + in: path + description: Email address of user + required: true + schema: + type: string + responses: + '204': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '404': + description: No user found with this email + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user found with this email + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/users/john.doe@conduktor.io/permissions/all' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/iam/v2/user/{user name}: + get: + tags: + - cli_user_iam_v2_0 + operationId: Get User by name + parameters: + - name: user name + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UserResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No user with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/iam/v2/user/user@conduktor.io' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_user_iam_v2_0 + operationId: Delete a User + parameters: + - name: user name + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No user with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/iam/v2/user/user@conduktor.io' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/iam/v2/user: + get: + tags: + - cli_user_iam_v2_0 + operationId: List User resources + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UserResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No user with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/iam/v2/user' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_user_iam_v2_0 + operationId: Create or update a User + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UserApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No user with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No user with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/iam/v2/user?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v2","kind":"User","metadata":{"name":"user@conduktor.io"},"spec":{"firstName":"description","lastName":"test","permissions":[]}}' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application/{application name}: + get: + tags: + - cli_application_self-serve_v1_6 + operationId: Get Application by name + parameters: + - name: application name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application/my-application' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_application_self-serve_v1_6 + operationId: Delete a Application + parameters: + - name: application name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/self-serve/v1/application/my-application' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application: + get: + tags: + - cli_application_self-serve_v1_6 + operationId: List Application resources + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ApplicationResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_application_self-serve_v1_6 + operationId: Create or update a Application + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/self-serve/v1/application?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v1","kind":"Application","metadata":{"name":"my-application"},"spec":{"title":"My Application","owner":"me"}}' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application-instance/{application-instance name}: + get: + tags: + - cli_application-instance_self-serve_v1_7 + operationId: Get ApplicationInstance by name + parameters: + - name: application-instance name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationInstanceResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance/my-application-instance' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_application-instance_self-serve_v1_7 + operationId: Delete a ApplicationInstance + parameters: + - name: application-instance name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance/my-application-instance' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application-instance: + get: + tags: + - cli_application-instance_self-serve_v1_7 + operationId: List ApplicationInstance resources + parameters: + - name: application + in: query + description: Filter by application name + required: false + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ApplicationInstanceResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_application-instance_self-serve_v1_7 + operationId: Create or update a ApplicationInstance + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationInstanceResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationInstanceApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v1","kind":"ApplicationInstance","metadata":{"name":"my-app-instance-prod","application":"my-app"},"spec":{"cluster":"prod-cluster","topicPolicyRef":["my-topic-policy"],"resources":[{"type":"TOPIC","name":"my-topic","patternType":"LITERAL"},{"type":"CONSUMER_GROUP","name":"my-consumer-group","patternType":"LITERAL"}],"serviceAccount":"my-service-account"}}' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application-instance-permission/{application-instance-permission name}: + get: + tags: + - cli_application-instance-permission_self-serve_v1_8 + operationId: Get ApplicationInstancePermission by name + parameters: + - name: application-instance-permission name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationInstancePermissionResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance-permission with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance-permission with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance-permission/my-application-instance-permission' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_application-instance-permission_self-serve_v1_8 + operationId: Delete a ApplicationInstancePermission + parameters: + - name: application-instance-permission name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance-permission with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance-permission with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance-permission/my-application-instance-permission' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application-instance-permission: + get: + tags: + - cli_application-instance-permission_self-serve_v1_8 + operationId: List ApplicationInstancePermission resources + parameters: + - name: filterByApplication + in: query + description: Filter by application + required: false + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + - name: filterByApplicationInstance + in: query + description: Filter by application instance + required: false + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + - name: filterByGrantedTo + in: query + description: Filter by granted to + required: false + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ApplicationInstancePermissionResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance-permission with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance-permission with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance-permission' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_application-instance-permission_self-serve_v1_8 + operationId: Create or update a ApplicationInstancePermission + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationInstancePermissionResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationInstancePermissionApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-instance-permission with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-instance-permission with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/self-serve/v1/application-instance-permission?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v1","kind":"ApplicationInstancePermission","metadata":{"application":"test","appInstance":"test","name":"test"},"spec":{"resource":{"type":"TOPIC","name":"test","patternType":"LITERAL"},"permission":"READ","grantedTo":"test"}}' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application-group/{application-group name}: + get: + tags: + - cli_application-group_self-serve_v1_9 + operationId: Get ApplicationGroup by name + parameters: + - name: application-group name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationGroupResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-group with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-group with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application-group/my-application-group' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_application-group_self-serve_v1_9 + operationId: Delete a ApplicationGroup + parameters: + - name: application-group name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-group with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-group with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/self-serve/v1/application-group/my-application-group' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/application-group: + get: + tags: + - cli_application-group_self-serve_v1_9 + operationId: List ApplicationGroup resources + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ApplicationGroupResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-group with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-group with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/application-group' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_application-group_self-serve_v1_9 + operationId: Create or update a ApplicationGroup + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationGroupResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationGroupApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No application-group with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No application-group with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/self-serve/v1/application-group?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v1","kind":"ApplicationGroup","metadata":{"application":"clickstream-app","name":"clickstream-support"},"spec":{"displayName":"Support Clickstream","description":"Members of the Support Group are allowed:\nRead access on all the resources\nCan restart owned connectors\nCan reset offsets","permissions":[{"appInstance":"clickstream-app-dev","patternType":"LITERAL","name":"*","permissions":["topicConsume","topicViewConfig"],"resourceType":"TOPIC"}],"members":["user1@company.org","user2@company.org"]}}' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/topic-policy/{topic-policy name}: + get: + tags: + - cli_topic-policy_self-serve_v1_5 + operationId: Get TopicPolicy by name + parameters: + - name: topic-policy name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TopicPolicyResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic-policy with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic-policy with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/topic-policy/my-topic-policy' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_topic-policy_self-serve_v1_5 + operationId: Delete a TopicPolicy + parameters: + - name: topic-policy name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic-policy with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic-policy with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/self-serve/v1/topic-policy/my-topic-policy' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/topic-policy: + get: + tags: + - cli_topic-policy_self-serve_v1_5 + operationId: List TopicPolicy resources + parameters: + - name: app-instance + in: query + description: Filter by application instance name + required: false + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TopicPolicyResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic-policy with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic-policy with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/topic-policy' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_topic-policy_self-serve_v1_5 + operationId: Create or update a TopicPolicy + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TopicPolicyResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TopicPolicyApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic-policy with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic-policy with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/self-serve/v1/topic-policy?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v1","kind":"TopicPolicy","metadata":{"name":"my-app-instance-prod"},"spec":{"policies":{"my-policy":{"constraint":"OneOf","optional":true,"values":["value1","value2"]}}}}' \ + --location \ + --max-redirs 32 + /public/kafka/v2/cluster/{cluster}/topic/{topic name}: + get: + tags: + - cli_topic_kafka_v2_3 + operationId: Get Topic by name + parameters: + - name: cluster + in: path + required: true + schema: + type: string + - name: topic name + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TopicResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/topic/my-topic' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_topic_kafka_v2_3 + operationId: Delete a Topic + parameters: + - name: cluster + in: path + required: true + schema: + type: string + - name: topic name + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/topic/my-topic' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/kafka/v2/cluster/{cluster}/topic: + get: + tags: + - cli_topic_kafka_v2_3 + operationId: List Topic resources + parameters: + - name: cluster + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TopicResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/topic' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_topic_kafka_v2_3 + operationId: Create or update a Topic + parameters: + - name: cluster + in: path + required: true + schema: + type: string + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TopicResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TopicApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No topic with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No topic with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/topic?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v2","kind":"Topic","metadata":{"name":"my-topic","cluster":"my-cluster","labels":{"conduktor.io/description":"This is a topic","conduktor.io/description.editable":"true","conduktor.io/application-instance":"staging","user-labels":"I am a user label","conduktor.io/application":"application-a"}},"spec":{"partitions":1,"replicationFactor":1,"configs":{"cleanup.policy":"delete","retention.ms":"86400000"}}}' \ + --location \ + --max-redirs 32 + /public/kafka/v2/cluster/{cluster}/subject/{subject name}: + get: + tags: + - cli_subject_kafka_v2_4 + operationId: Get Subject by name + parameters: + - name: cluster + in: path + required: true + schema: + type: string + - name: subject name + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/SubjectResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No subject with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No subject with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/subject/my-subject' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_subject_kafka_v2_4 + operationId: Delete a Subject + parameters: + - name: cluster + in: path + required: true + schema: + type: string + - name: subject name + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No subject with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No subject with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/subject/my-subject' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/kafka/v2/cluster/{cluster}/subject: + get: + tags: + - cli_subject_kafka_v2_4 + operationId: List Subject resources + parameters: + - name: cluster + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SubjectResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No subject with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No subject with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/subject' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_subject_kafka_v2_4 + operationId: Create or update a Subject + parameters: + - name: cluster + in: path + required: true + schema: + type: string + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SubjectResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/SubjectApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No subject with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No subject with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/kafka/v2/cluster/my-cluster/subject?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v2","kind":"Subject","metadata":{"name":"my-subject","cluster":"my-cluster","labels":{"conduktor.io/application":"application-a","conduktor.io/application-instance":"staging"}},"spec":{"format":"AVRO","compatibility":"BACKWARD_TRANSITIVE","schema":"{\"type\": \"long\"}"}}' \ + --location \ + --max-redirs 32 + /public/console/v2/kafka-cluster/{kafka-cluster name}: + get: + tags: + - cli_kafka-cluster_console_v2_2 + operationId: Get KafkaCluster by name + parameters: + - name: kafka-cluster name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/KafkaClusterResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No kafka-cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No kafka-cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/console/v2/kafka-cluster/my-kafka-cluster' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + delete: + tags: + - cli_kafka-cluster_console_v2_2 + operationId: Delete a KafkaCluster + parameters: + - name: kafka-cluster name + in: path + required: true + schema: + type: string + pattern: ^[0-9a-z\_-]+$ + responses: + '200': + description: '' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No kafka-cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No kafka-cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/console/v2/kafka-cluster/my-kafka-cluster' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/console/v2/kafka-cluster: + get: + tags: + - cli_kafka-cluster_console_v2_2 + operationId: List KafkaCluster resources + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/KafkaClusterResource' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No kafka-cluster with this name exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No kafka-cluster with this name exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/console/v2/kafka-cluster' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - cli_kafka-cluster_console_v2_2 + operationId: Create or update a KafkaCluster + parameters: + - name: dryMode + in: query + required: false + schema: + default: false + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/KafkaClusterResource' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/KafkaClusterApplyResult' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No kafka-cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No kafka-cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/console/v2/kafka-cluster?dryMode=false' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"apiVersion":"v2","kind":"KafkaCluster","metadata":{"name":"my-kafka-cluster","labels":{"env":"prod"}},"spec":{"displayName":"yo","bootstrapServers":"localhost:9092","properties":{"sasl.jaas.config":"org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin-secret\";"},"color":"#FF0000","icon":"icon","schemaRegistry":{"url":"https://my-schema-registry:8081","security":{"username":"admin","password":"admin-secret","type":"BasicAuth"},"ignoreUntrustedCertificate":false,"type":"ConfluentLike"},"accessCert":"-----BEGIN CERTIFICATE-----\n MIIOXzCCDUegAwIBAgIRAPRytMVYJNUgCbhnA+eYumgwDQYJKoZIhvcNAQELBQAw\n RjELMAkGA1UEBhMCVVMxIjAgBgNVBAoTGUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBM\n TEMxEzARBgNVBAMTCkdUUyBDQSAxQzMwHhcNMjQwMzE4MTkzNzE5WhcNMjQwNjEw\n MTkzNzE4WjAXMRUwEwYDVQQDDAwqLmdvb2dsZS5jb20wWTATBgcqhkjOPQIBBggq\n ...\n 8/s+YDKveNdoeQoAmGQpUmxhvJ9rbNYj+4jiaujkfxT/6WtFN8N95r+k3W/1K4hs\n IFyCs+xkcgvHFtBjjel4pnIET0agtbGJbGDEQBNxX+i4MDA=\n -----END CERTIFICATE-----"}}' \ + --location \ + --max-redirs 32 + /public/self-serve/v1/catalog: + get: + tags: + - catalog + operationId: Data catalog + parameters: + - name: page + in: query + required: false + schema: + type: integer + format: int32 + - name: itemsPerPage + in: query + required: false + schema: + type: integer + format: int32 + - name: sort + in: query + required: false + schema: + $ref: '#/components/schemas/Ord' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Page_Resource' + example: + kind: DataCatalogList + data: + - apiVersion: v2 + kind: Topic + metadata: + name: topic1 + cluster: cluster1 + spec: + partitions: 3 + replicationFactor: 3 + configs: + min.insync.replicas: '3' + page: 1 + totalPages: 1 + perPage: 1 + totalElements: 1 + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/self-serve/v1/catalog?fulltext=I'm+searching+for+something+in+full+text&name=my-topic&cluster=my-cluster&attr.label1=value1&attr.label2=value2&page=1&itemsPerPage=50&sort=desc' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts: + get: + tags: + - service-accounts + operationId: Get service accounts + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '200': + description: All service accounts created on the cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/AclPrincipal' + example: + - type: User + name: Gertrude + - type: Group + name: Data + '400': + description: Security disabled on this kafka cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: Security disabled on this kafka cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - service-accounts + operationId: Put acl for a given service account + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AllAclForPrincipal' + example: + aclPrincipal: + type: User + name: Gertrude + acls: + - pattern: + resourceType: Topic + name: topicB + patternType: Literal + host: '*' + operationStates: + Describe: Allow + required: true + responses: + '200': + description: '' + '400': + description: Security disabled on this kafka cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: Security disabled on this kafka cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.create, + kafka.clusters.acl.delete" to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.create, + kafka.clusters.acl.delete" to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"aclPrincipal":{"type":"User","name":"Gertrude"},"acls":[{"pattern":{"resourceType":"Topic","name":"topicB","patternType":"Literal"},"host":"*","operationStates":{"Describe":"Allow"}}]}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts-confluent: + get: + tags: + - service-accounts + operationId: Get Confluent service accounts + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '200': + description: All service accounts created on a confluent cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/ServiceAccount' + example: + - resourceId: sa-pg7y0o + internalId: 675350 + serviceName: my application + description: my business application + '400': + description: This cluster isn't a confluent cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't a confluent cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '429': + description: rate limit exceeded on Confluent API + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequest' + example: + title: rate limit exceeded on Confluent API + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-confluent' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + post: + tags: + - service-accounts + operationId: Create Confluent service accounts + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + requestBody: + description: New Confluent service account. + content: + application/json: + schema: + $ref: '#/components/schemas/CreateServiceAccount' + example: + name: prod-service-account + description: my service account. + required: true + responses: + '201': + description: Create a service accounts. + content: + application/json: + schema: + $ref: '#/components/schemas/ServiceAccount' + example: + resourceId: sa-pg7y0o + internalId: 675350 + serviceName: my application + description: my business application + '400': + description: This cluster isn't a confluent cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't a confluent cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.create" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.create" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '429': + description: rate limit exceeded on Confluent API + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequest' + example: + title: rate limit exceeded on Confluent API + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-confluent' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"name":"prod-service-account","description":"my service account."}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts-confluent/{confluentResourceId}/api-keys: + get: + tags: + - service-accounts + operationId: Get Confluent api keys + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: confluentResourceId + in: path + description: Confluent service Account's id + required: true + schema: + type: string + responses: + '200': + description: All confluent's api keys related to a service account. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/ApiKey' + example: + - key: VJF6UG6VSXYIGY32 + description: my api key. + createdAt: -1000000000-01-01T00:00:00Z + secret: R15hoiDIq8Nxu/lY4mPO3DwAVIfU5W7OI+efsB607mLgHTnVW5XJGVqX2ysDx987 + '400': + description: This cluster isn't a confluent cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't a confluent cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '429': + description: rate limit exceeded on Confluent API + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequest' + example: + title: rate limit exceeded on Confluent API + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-confluent/sa-pg7y0y/api-keys' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + post: + tags: + - service-accounts + operationId: Create Confluent api keys + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: confluentResourceId + in: path + description: Confluent service Account's id + required: true + schema: + type: string + requestBody: + description: New Confluent API key. + content: + application/json: + schema: + $ref: '#/components/schemas/CreateApiKey' + example: + name: key + description: my api key. + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + example: + key: VJF6UG6VSXYIGY32 + description: my api key. + createdAt: -1000000000-01-01T00:00:00Z + secret: R15hoiDIq8Nxu/lY4mPO3DwAVIfU5W7OI+efsB607mLgHTnVW5XJGVqX2ysDx987 + '400': + description: This cluster isn't a confluent cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't a confluent cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.create" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.create" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '429': + description: rate limit exceeded on Confluent API + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequest' + example: + title: rate limit exceeded on Confluent API + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-confluent/sa-pg7y0y/api-keys' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"name":"key","description":"my api key."}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts-aiven: + get: + tags: + - service-accounts + operationId: Get Aiven service accounts + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '200': + description: All service accounts created on an Aiven cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + type: string + example: + - example-account + '400': + description: This cluster isn't an Aiven cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't an Aiven cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-aiven' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + post: + tags: + - service-accounts + operationId: Create an Aiven service accounts + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AivenServiceAccountCreateRequest' + required: true + responses: + '201': + description: Create a service account on an Aiven cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/AivenServiceAccountCreateResponse' + '400': + description: This cluster isn't an Aiven cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't an Aiven cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.create" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.create" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-aiven' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"username":"my-service-account"}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts-confluent/{confluentResourceId}/api-keys/{confluentApiKeyId}: + delete: + tags: + - service-accounts + operationId: Delete Confluent api keys + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: confluentResourceId + in: path + description: Confluent service Account's id + required: true + schema: + type: string + - name: confluentApiKeyId + in: path + description: Confluent API key's id + required: true + schema: + type: string + responses: + '204': + description: '' + '400': + description: This cluster isn't a confluent cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't a confluent cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.delete" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.delete" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '429': + description: rate limit exceeded on Confluent API + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequest' + example: + title: rate limit exceeded on Confluent API + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-confluent/sa-pg7y0y/api-keys/VJF6UG6VSXYIGY32' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts-aiven/{aivenSAUsername}: + delete: + tags: + - service-accounts + operationId: Delete an Aiven service account + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: aivenSAUsername + in: path + description: Aiven's service account username + required: true + schema: + type: string + responses: + '204': + description: '' + '400': + description: This cluster isn't an Aiven cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't an Aiven cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.delete" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.delete" + to do this operation + '404': + description: No cluster with this technical id exist or no service account + with this username exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist or no service account + with this username exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-aiven/my-service-account' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts-aiven/{AivenSAUsernamePattern}/acl: + get: + tags: + - service-accounts + operationId: Get Aiven ACLs of a cluster + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: AivenSAUsernamePattern + in: path + description: Aiven service account username pattern + required: true + schema: + type: string + responses: + '200': + description: All ACLs created on an Aiven cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/AivenListAclResponse' + example: + acls: + - id: acl453f874ec16 + permission: read + topic: topicA + username: bob + - id: acl453f874ec17 + permission: read + topic: topicB + username: bob + schemaRegistryAcls: + - id: acl453f874ec16 + permission: read + resource: 'Config:' + username: bob + - id: acl453f874ec17 + permission: write + resource: 'Subject: topicA-value' + username: bob + '400': + description: This cluster isn't an Aiven cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't an Aiven cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-aiven/my-service-account/acl' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + put: + tags: + - service-accounts + operationId: Create (or update) acls for a given Aiven service account + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: AivenSAUsernamePattern + in: path + description: Aiven service account username pattern + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AivenAclsCreateRequest' + example: + acls: + - permission: read + topic: topicA + - permission: write + topic: topicB-* + schemaRegistryAcls: + - permission: schema_registry_read + resource: 'Config:' + - permission: schema_registry_write + resource: Subject:topicA-value + required: true + responses: + '200': + description: '' + '400': + description: This cluster isn't an Aiven cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: This cluster isn't an Aiven cluster. + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.create, + kafka.clusters.acl.delete" to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.create, + kafka.clusters.acl.delete" to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts-aiven/my-username/acl' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"acls":[{"permission":"read","topic":"topicA"},{"permission":"write","topic":"topicB-*"}],"schemaRegistryAcls":[{"permission":"schema_registry_read","resource":"Config:"},{"permission":"schema_registry_write","resource":"Subject:topicA-value"}]}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/service-accounts/{aclPrincipal}: + get: + tags: + - service-accounts + operationId: Get acls for a given service account + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: aclPrincipal + in: path + description: Kafka ACL principal + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/AclBinding' + example: + - pattern: + resourceType: Topic + name: topicB + patternType: Literal + entry: + principal: + type: User + name: Gertrude + host: '*' + operation: Read + permissionType: Allow + '400': + description: Invalid value + content: + text/plain: + schema: + type: string + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.clusters.acl.read" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/service-accounts/User:bob' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/interceptors: + get: + tags: + - interceptors + operationId: Get interceptors + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '200': + description: All interceptors created on the cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/Interceptor' + example: + - name: myEncryptionInterceptor + pluginClass: io.conduktor.gateway.interceptor.EncryptPlugin + priority: 50 + config: + topic: topicName + - name: myInjectHeaderInterceptor + pluginClass: io.conduktor.gateway.interceptor.DynamicHeaderInjectionPlugin + priority: 51 + config: + topic: topicName + - name: myInjectHeaderInterceptor + pluginClass: io.conduktor.gateway.interceptor.DynamicHeaderInjectionPlugin + priority: 52 + config: + topic: topicName + '400': + description: The cluster is not a valid gateway cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The cluster is not a valid gateway cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/interceptors' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + post: + tags: + - interceptors + operationId: Create an Interceptor + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + requestBody: + description: The interceptor to create. + content: + application/json: + schema: + $ref: '#/components/schemas/Interceptor' + example: + name: myEncryptionInterceptor + pluginClass: io.conduktor.gateway.interceptor.EncryptPlugin + priority: 50 + config: + topic: topicName + required: true + responses: + '201': + description: '' + '400': + description: The cluster is not a valid gateway cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The cluster is not a valid gateway cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '409': + description: The interceptor already exist + content: + application/json: + schema: + $ref: '#/components/schemas/Conflict' + example: + title: The interceptor already exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/interceptors' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"name":"myEncryptionInterceptor","pluginClass":"io.conduktor.gateway.interceptor.EncryptPlugin","priority":50,"config":{"topic":"topicName"}}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/plugins: + get: + tags: + - interceptors + operationId: Get plugins + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '200': + description: All plugins available on the cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/Plugin' + example: + - plugin: io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin + pluginId: io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin + tags: + parent: Console + description: Validate your application behaves correctly when broker + errors occur. + license: enterprise + version: 1.0.1-SNAPSHOT + title: Broker errors + '400': + description: The cluster is not a valid gateway cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The cluster is not a valid gateway cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/plugins' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/plugins/{pluginId}: + get: + tags: + - interceptors + operationId: Get a plugin + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: pluginId + in: path + required: true + schema: + type: string + responses: + '200': + description: Get a specific plugin available on the cluster. + content: + application/json: + schema: + $ref: '#/components/schemas/PluginWithReadme' + example: + plugin: io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin + pluginId: io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin + tags: + parent: Console + description: Validate your application behaves correctly when broker + errors occur. + license: enterprise + version: 1.0.1-SNAPSHOT + title: Broker errors + readme: "---\nversion: 1.0.1-SNAPSHOT\ntitle: Broker errors\ndescription:\ + \ Validate your application behaves correctly when broker errors\ + \ occur.\nparent: chaos\nlicense: enterprise\n---\n\n## What is\ + \ Broken broker chaos?\n\nThis interceptor inject intermittent errors\ + \ in client connections to brokers that are consistent with broker\ + \ side issues. \n\nThis only works on Produce requests and Fetch\ + \ requests.\n\n## Configuration\n\n| config | type | description\ + \ \ + \ \ + \ |\n|:--------------|------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n\ + | rateInPercent | int | The percentage of requests that will result\ + \ in a broker not available response \ + \ \ + \ |\n| errorMap | Map | Map of ApiKeys and Error you\ + \ want to response, not required.Default errorMap when errorMap\ + \ is not configured:FETCH: UNKNOWN_SERVER_ERRORPRODUCE: CORRUPT_MESSAGE\ + \ |\n\n## Possible Error for Api Key\n\n### [FETCH](https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/requests/FetchResponse.java#L48-L65):\n\ + \n- OFFSET_OUT_OF_RANGE\n- TOPIC_AUTHORIZATION_FAILED\n- REPLICA_NOT_AVAILABLE\n\ + - NOT_LEADER_OR_FOLLOWER\n- FENCED_LEADER_EPOCH\n- UNKNOWN_LEADER_EPOCH\n\ + - UNKNOWN_TOPIC_OR_PARTITION\n- KAFKA_STORAGE_ERROR\n- UNSUPPORTED_COMPRESSION_TYPE\n\ + - CORRUPT_MESSAGE\n- UNKNOWN_TOPIC_ID\n- FETCH_SESSION_TOPIC_ID_ERROR,\n\ + - INCONSISTENT_TOPIC_ID,\n- UNKNOWN_SERVER_ERROR\n\n### [PRODUCE](https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/requests/ProduceResponse.java#L39-L53):\n\ + \n- CORRUPT_MESSAGE,\n- UNKNOWN_TOPIC_OR_PARTITION,\n- NOT_LEADER_OR_FOLLOWER,\n\ + - INVALID_TOPIC_EXCEPTION,\n- RECORD_LIST_TOO_LARGE,\n- NOT_ENOUGH_REPLICAS,\n\ + - NOT_ENOUGH_REPLICAS_AFTER_APPEND,\n- INVALID_REQUIRED_ACKS,\n\ + - TOPIC_AUTHORIZATION_FAILED,\n- UNSUPPORTED_FOR_MESSAGE_FORMAT,\n\ + - INVALID_PRODUCER_EPOCH,\n- CLUSTER_AUTHORIZATION_FAILED,\n- TRANSACTIONAL_ID_AUTHORIZATION_FAILED,\n\ + - INVALID_RECORD\n\n## Example\n\n```yaml\n name: myBrokenBrokerChaosInterceptor\n\ + \ pluginClass: io.conduktor.gateway.interceptor.BrokenBrokerChaosPlugin\n\ + \ priority: 100\n config:\n - key: rateInPercent\n \ + \ value: 100\n - key: errorMap\n value:\n \ + \ FETCH: UNKNOWN_SERVER_ERROR\n PRODUCE: CORRUPT_MESSAGE\n\ + ```" + '400': + description: The cluster is not a valid gateway cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The cluster is not a valid gateway cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/plugins/io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/interceptors/{interceptorName}: + put: + tags: + - interceptors + operationId: Update an Interceptor + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: interceptorName + in: path + required: true + schema: + type: string + requestBody: + description: The interceptor to update. + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateInterceptor' + example: + pluginClass: io.conduktor.gateway.interceptor.EncryptPlugin + priority: 50 + config: + topic: topicName + required: true + responses: + '204': + description: '' + '400': + description: The cluster is not a valid gateway cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The cluster is not a valid gateway cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request PUT \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/interceptors/name' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"pluginClass":"io.conduktor.gateway.interceptor.EncryptPlugin","priority":50,"config":{"topic":"topicName"}}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/interceptors/{technicalId}: + delete: + tags: + - interceptors + operationId: Delete a plugin + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: technicalId + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + '400': + description: The cluster is not a valid gateway cluster + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The cluster is not a valid gateway cluster + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/interceptors/name' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/topics: + post: + tags: + - topic + operationId: List topic on a kafka cluster + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TopicListRequest' + example: + page: 1 + itemsPerPage: 20 + filter: + - contains: opi + type: TopicNameFilter + - oneOf: + - compact + type: CleanupPolicyFilter + - type: HideInternal + sort: ByMessageCount + descSort: true + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Page_TopicResponse' + example: + data: + - name: topic + type: NotIndexedTopic + - name: topic + replicationFactor: 3 + partitionCount: 3 + recordCount: 191829 + topicSize: 42390 + cleanupPolicy: compact + retentionInSize: -1 + retentionInMs: -1 + minIsr: 1 + tags: + - id: f9ae435d-ac85-4d9f-ae0b-e1eb3ee0bf28 + name: a_tag + color: '#008000' + lastActivityAt: '2021-03-18T14:00:00Z' + produceRate: 0 + type: IndexedTopic + page: 1 + totalPages: 1 + perPage: 10 + totalElements: 1 + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.topics.read" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.topics.read" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/topics' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"page":1,"itemsPerPage":20,"filter":[{"contains":"opi","type":"TopicNameFilter"},{"oneOf":["compact"],"type":"CleanupPolicyFilter"},{"type":"HideInternal"}],"sort":"ByMessageCount","descSort":true}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/consumergroups: + post: + tags: + - consumergroup + operationId: List consumer group + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConsumerGroupRequest' + example: + page: 1 + itemsPerPage: 20 + filter: + - contains: opi + type: OnConsumerGroupName + - oneOf: + - Dead + type: OnState + sort: ByMaxLagTimeInSeconds + descSort: true + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Page_ConsumerGroupResponse' + example: + data: + - name: cg1 + state: Dead + members: 1 + overallLag: 542 + topics: + - topic1 + maxLagTimeInSeconds: 100 + type: IndexedConsumerGroup + page: 1 + totalPages: 1 + perPage: 20 + totalElements: 1 + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have the required permission(s) "kafka.groups.describe" + to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have the required permission(s) "kafka.groups.describe" + to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/consumergroups' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"page":1,"itemsPerPage":20,"filter":[{"contains":"opi","type":"OnConsumerGroupName"},{"oneOf":["Dead"],"type":"OnState"}],"sort":"ByMaxLagTimeInSeconds","descSort":true}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/queries: + get: + tags: + - ksqlDBs + operationId: List queries + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + responses: + '200': + description: All queries available on the cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/Query' + example: + - queryString: "CREATE TABLE WIKIPEDIA_COUNT_GT_1 WITH (KAFKA_TOPIC='WIKIPEDIA_COUNT_GT_1',\ + \ KEY_FORMAT='JSON', PARTITIONS=2, REPLICAS=2) AS SELECT\n WIKIPEDIA.USER\ + \ USER,\n WIKIPEDIA.META->URI URI,\n COUNT(*) COUNT\nFROM WIKIPEDIA\ + \ WIKIPEDIA\nWINDOW TUMBLING ( SIZE 300 SECONDS ) \nWHERE (WIKIPEDIA.META->DOMAIN\ + \ = 'commons.wikimedia.org')\nGROUP BY WIKIPEDIA.USER, WIKIPEDIA.META->URI\n\ + HAVING (COUNT(*) > 1)\nEMIT CHANGES;" + sinks: + - WIKIPEDIA_COUNT_GT_1 + sinkKafkaTopics: + - WIKIPEDIA_COUNT_GT_1 + id: CTAS_WIKIPEDIA_COUNT_GT_1_7 + statusCount: + RUNNING: 1 + ERROR: 0 + TERMINATED: 0 + SUCCESS: 0 + queryType: PERSISTENT + state: RUNNING + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/server/queries' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + post: + tags: + - ksqlDBs + operationId: Execute a query + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + requestBody: + description: example + content: + application/json: + schema: + $ref: '#/components/schemas/KsqlDBQuery' + example: + ksql: SELECT * FROM WIKIPEDIA EMIT CHANGES; + properties: + ksql.streams.auto.offset.reset: earliest + required: true + responses: + '200': + description: The result of the query. + content: + application/json: + schema: + $ref: '#/components/schemas/List_String' + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/ksqldbSlug/queries' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"ksql":"SELECT * FROM WIKIPEDIA EMIT CHANGES;","properties":{"ksql.streams.auto.offset.reset":"earliest"}}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/tables: + get: + tags: + - ksqlDBs + operationId: List tables + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + responses: + '200': + description: All tables available on the cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/Table' + example: + - name: table1 + topic: topic1 + keyFormat: JSON + valueFormat: JSON + reads: 3 + writes: 1 + isWindowed: false + - name: table2 + topic: topic2 + keyFormat: JSON + valueFormat: JSON + reads: 5 + writes: 1 + isWindowed: false + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/server/tables' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/describe/{sourceName}: + get: + tags: + - ksqlDBs + operationId: Describe source + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + - name: sourceName + in: path + required: true + schema: + type: string + responses: + '200': + description: The description of the source. (stream or table) + content: + application/json: + schema: + $ref: '#/components/schemas/SourceDescription' + example: + name: WIKIPEDIA_COUNT_GT_1 + windowType: TUMBLING + topic: WIKIPEDIA_COUNT_GT_1 + type: TABLE + keyFormat: JSON + valueFormat: JSON + sourceConstraints: + - TOPIC1 + - TOPIC2 + statement: CREATE STREAM WIKIPEDIA (BOT BOOLEAN, COMMENT STRING, ID + BIGINT, LENGTH STRUCT, LOG_ACTION STRING, + LOG_ACTION_COMMENT STRING, LOG_ID BIGINT, LOG_TYPE STRING, META + STRUCT, MINOR BOOLEAN, `NAMESPACE` BIGINT, + PARSEDCOMMENT STRING, PATROLLED BOOLEAN, REVISION STRUCT, SERVER_NAME STRING, SERVER_SCRIPT_PATH STRING, SERVER_URL + STRING, TIMESTAMP BIGINT, TITLE STRING, TYPE STRING, USER STRING, + WIKI STRING) WITH (KAFKA_TOPIC='wikipedia.parsed', KEY_FORMAT='KAFKA', + VALUE_FORMAT='AVRO'); + statistics: + consumer-message-per-sec: 0.0 + consumer-total-messages: 0.0 + consumer-total-bytes: 0.0 + last-message: 1.696268412825E12 + readQueriesCount: 2 + writeQueriesCount: 10 + fields: + - name: BOT + type: BOOLEAN + - name: COMMENT + type: STRING + - name: ID + type: BIGINT + - name: LENGTH + type: STRUCT + fields: + - name: NEW + type: BIGINT + - name: OLD + type: BIGINT + - name: LOG_ACTION + type: STRING + - name: LOG_ACTION_COMMENT + type: STRING + - name: LOG_ID + type: BIGINT + - name: LOG_TYPE + type: STRING + - name: META + type: STRUCT + fields: + - name: DOMAIN + type: STRING + - name: DT + type: TIMESTAMP + - name: ID + type: STRING + - name: REQUEST_ID + type: STRING + - name: STREAM + type: STRING + - name: URI + type: STRING + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/ksqldbSlug/describe/sourceName' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/explain/{query}: + get: + tags: + - ksqlDBs + operationId: Explain a query + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + - name: query + in: path + required: true + schema: + type: string + responses: + '200': + description: The description of a query. + content: + application/json: + schema: + $ref: '#/components/schemas/ExplainQuery' + example: + statementText: |- + CREATE STREAM WIKIPEDIANOBOT WITH (KAFKA_TOPIC='WIKIPEDIANOBOT', PARTITIONS=2, REPLICAS=2) AS SELECT + *, + (WIKIPEDIA.LENGTH->NEW - WIKIPEDIA.LENGTH->OLD) BYTECHANGE + FROM WIKIPEDIA WIKIPEDIA + WHERE ((((WIKIPEDIA.BOT = false) AND (WIKIPEDIA.LENGTH IS NOT NULL)) AND (WIKIPEDIA.LENGTH->NEW IS NOT NULL)) AND (WIKIPEDIA.LENGTH->OLD IS NOT NULL)) + EMIT CHANGES; + sources: + - WIKIPEDIA + sinks: + - WIKIPEDIANOBOT + topology: |+ + Topologies: + Sub-topology: 0 + Source: KSTREAM-SOURCE-0000000000 (topics: [wikipedia.parsed]) + --> KSTREAM-TRANSFORMVALUES-0000000001 + Processor: KSTREAM-TRANSFORMVALUES-0000000001 (stores: []) + --> WhereFilter + <-- KSTREAM-SOURCE-0000000000 + Processor: WhereFilter (stores: []) + --> Project + <-- KSTREAM-TRANSFORMVALUES-0000000001 + Processor: Project (stores: []) + --> KSTREAM-SINK-0000000004 + <-- WhereFilter + Sink: KSTREAM-SINK-0000000004 (topic: WIKIPEDIANOBOT) + <-- Project + + executionPlan: " > [ SINK ] | Schema: BOT BOOLEAN, COMMENT STRING,\ + \ ID BIGINT, LENGTH STRUCT, LOG_ACTION STRING,\ + \ LOG_ACTION_COMMENT STRING, LOG_ID BIGINT, LOG_TYPE STRING, META\ + \ STRUCT, MINOR BOOLEAN, `NAMESPACE` BIGINT,\ + \ PARSEDCOMMENT STRING, PATROLLED BOOLEAN, REVISION STRUCT, SERVER_NAME STRING, SERVER_SCRIPT_PATH STRING, SERVER_URL\ + \ STRING, TIMESTAMP BIGINT, TITLE STRING, TYPE STRING, USER STRING,\ + \ WIKI STRING, BYTECHANGE BIGINT | Logger: CSAS_WIKIPEDIANOBOT_3.WIKIPEDIANOBOT\n\ + \t\t > [ PROJECT ] | Schema: BOT BOOLEAN, COMMENT STRING, ID BIGINT,\ + \ LENGTH STRUCT, LOG_ACTION STRING, LOG_ACTION_COMMENT\ + \ STRING, LOG_ID BIGINT, LOG_TYPE STRING, META STRUCT, MINOR BOOLEAN, `NAMESPACE` BIGINT, PARSEDCOMMENT STRING,\ + \ PATROLLED BOOLEAN, REVISION STRUCT, SERVER_NAME\ + \ STRING, SERVER_SCRIPT_PATH STRING, SERVER_URL STRING, TIMESTAMP\ + \ BIGINT, TITLE STRING, TYPE STRING, USER STRING, WIKI STRING, BYTECHANGE\ + \ BIGINT | Logger: CSAS_WIKIPEDIANOBOT_3.Project\n\t\t\t\t > [ FILTER\ + \ ] | Schema: BOT BOOLEAN, COMMENT STRING, ID BIGINT, LENGTH STRUCT, LOG_ACTION STRING, LOG_ACTION_COMMENT STRING,\ + \ LOG_ID BIGINT, LOG_TYPE STRING, META STRUCT, MINOR BOOLEAN, `NAMESPACE` BIGINT, PARSEDCOMMENT STRING,\ + \ PATROLLED BOOLEAN, REVISION STRUCT, SERVER_NAME\ + \ STRING, SERVER_SCRIPT_PATH STRING, SERVER_URL STRING, TIMESTAMP\ + \ BIGINT, TITLE STRING, TYPE STRING, USER STRING, WIKI STRING, ROWTIME\ + \ BIGINT, ROWPARTITION INTEGER, ROWOFFSET BIGINT | Logger: CSAS_WIKIPEDIANOBOT_3.WhereFilter\n\ + \t\t\t\t\t\t > [ SOURCE ] | Schema: BOT BOOLEAN, COMMENT STRING,\ + \ ID BIGINT, LENGTH STRUCT, LOG_ACTION STRING,\ + \ LOG_ACTION_COMMENT STRING, LOG_ID BIGINT, LOG_TYPE STRING, META\ + \ STRUCT, MINOR BOOLEAN, `NAMESPACE` BIGINT,\ + \ PARSEDCOMMENT STRING, PATROLLED BOOLEAN, REVISION STRUCT, SERVER_NAME STRING, SERVER_SCRIPT_PATH STRING, SERVER_URL\ + \ STRING, TIMESTAMP BIGINT, TITLE STRING, TYPE STRING, USER STRING,\ + \ WIKI STRING, ROWTIME BIGINT, ROWPARTITION INTEGER, ROWOFFSET BIGINT\ + \ | Logger: CSAS_WIKIPEDIANOBOT_3.KsqlTopic.Source\n" + state: RUNNING + fields: + - name: BOT + type: BOOLEAN + - name: COMMENT + type: STRING + - name: ID + type: BIGINT + - name: LENGTH + type: STRUCT + fields: + - name: NEW + type: BIGINT + - name: OLD + type: BIGINT + - name: LOG_ACTION + type: STRING + - name: LOG_ACTION_COMMENT + type: STRING + - name: LOG_ID + type: BIGINT + - name: LOG_TYPE + type: STRING + - name: META + type: STRUCT + fields: + - name: DOMAIN + type: STRING + - name: DT + type: TIMESTAMP + - name: ID + type: STRING + - name: REQUEST_ID + type: STRING + - name: STREAM + type: STRING + - name: URI + type: STRING + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/ksqldbSlug/explain/queryName' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/tables/{sourceName}: + delete: + tags: + - ksqlDBs + operationId: Delete a table + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + - name: sourceName + in: path + required: true + schema: + type: string + responses: + '200': + description: The table has been dropped. + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/ksqldbSlug/tables/WIKIPEDIA' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/streams/{sourceName}: + delete: + tags: + - ksqlDBs + operationId: Delete a stream + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + - name: sourceName + in: path + required: true + schema: + type: string + responses: + '200': + description: The stream has been dropped. + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/ksqldbSlug/streams/WIKIPEDIA' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/queries/{queryId}: + delete: + tags: + - ksqlDBs + operationId: Terminate a query + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + - name: queryId + in: path + required: true + schema: + type: string + responses: + '200': + description: The query has been terminated. + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request DELETE \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/ksqldbSlug/queries/transient_WIKIPEDIA_8560267961308778116' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}/statements: + post: + tags: + - ksqlDBs + operationId: Execute a statement + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + requestBody: + description: example + content: + application/json: + schema: + $ref: '#/components/schemas/KsqlDBStatement' + example: + ksql: LIST TABLES; + required: true + responses: + '200': + description: The statement has been executed. + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request POST \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/ksqldbSlug/statements' \ + --header 'Authorization: Bearer $BEARER' \ + --header 'Content-Type: application/json' \ + --data-raw '{"ksql":"LIST TABLES;"}' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs: + get: + tags: + - ksqlDBs + operationId: List server infos + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + responses: + '200': + description: All server infos available on the cluster. + content: + application/json: + schema: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/KsqlServerInfo' + example: + - name: my name + slug: my-name + version: 7.2.1 + tableCount: 1 + streamCount: 10 + queryCount: 3 + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 + /public/v1/clusters/{technicalId}/ksqldbs/{ksqlDBSlug}: + get: + tags: + - ksqlDBs + operationId: Get server infos of a specific ksqldb server + parameters: + - name: technicalId + in: path + description: Technical id of the cluster + required: true + schema: + type: string + - name: ksqlDBSlug + in: path + required: true + schema: + type: string + responses: + '200': + description: server infos for a specific ksqldb server. + content: + application/json: + schema: + $ref: '#/components/schemas/KsqlServerInfo' + example: + name: my name + slug: my-name + version: 7.2.1 + tableCount: 1 + streamCount: 10 + queryCount: 3 + '400': + description: The request is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequest' + example: + title: The request is not valid + '401': + description: The user is not authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/Unauthorized' + example: + title: The user is not authenticated + '403': + description: The user doesn't have sufficient privilege to do this operation + content: + application/json: + schema: + $ref: '#/components/schemas/Forbidden' + example: + title: The user doesn't have sufficient privilege to do this operation + '404': + description: No cluster with this technical id exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFound' + example: + title: No cluster with this technical id exist + '500': + description: An unexpected error occurred in the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerError' + example: + title: An unexpected error occurred in the server + security: + - httpAuth: [] + x-codeSamples: + - lang: Shell + Curl + source: |- + curl \ + --request GET \ + --url 'http://localhost:8080/public/v1/clusters/my-cluster/ksqldbs/server' \ + --header 'Authorization: Bearer $BEARER' \ + --location \ + --max-redirs 32 +components: + schemas: + AccessControlEntry: + title: AccessControlEntry + type: object + required: + - principal + - host + - operation + - permissionType + properties: + principal: + $ref: '#/components/schemas/AclPrincipal' + host: + type: string + operation: + $ref: '#/components/schemas/AclOperationForAccessControlEntry' + permissionType: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + AclBinding: + title: AclBinding + type: object + required: + - pattern + - entry + properties: + pattern: + $ref: '#/components/schemas/ResourcePattern' + entry: + $ref: '#/components/schemas/AccessControlEntry' + AclForResourceAndHost: + title: AclForResourceAndHost + type: object + required: + - pattern + - host + - operationStates + properties: + pattern: + $ref: '#/components/schemas/ResourcePattern' + host: + type: string + operationStates: + $ref: '#/components/schemas/OperationStates' + AclOperationForAccessControlEntry: + title: AclOperationForAccessControlEntry + type: string + enum: + - Unknown + - All + - Read + - Write + - Create + - Delete + - Alter + - Describe + - ClusterAction + - DescribeConfigs + - AlterConfigs + - IdempotentWrite + - CreateTokens + - DescribeTokens + AclPermissionTypeForAccessControlEntry: + title: AclPermissionTypeForAccessControlEntry + type: string + enum: + - Unknown + - Deny + - Allow + AclPrincipal: + title: AclPrincipal + type: object + required: + - type + - name + properties: + type: + type: string + name: + type: string + Aiven: + title: Aiven + type: object + required: + - apiToken + - project + - serviceName + - type + properties: + apiToken: + type: string + project: + type: string + serviceName: + type: string + type: + type: string + AivenAcl: + title: AivenAcl + type: object + required: + - id + - permission + - topic + - username + properties: + id: + type: string + permission: + type: string + topic: + type: string + username: + type: string + AivenAclCreatePayload: + title: AivenAclCreatePayload + type: object + required: + - permission + - topic + properties: + permission: + $ref: '#/components/schemas/AivenAclPermission' + topic: + type: string + AivenAclPermission: + title: AivenAclPermission + type: string + enum: + - read + - write + - readwrite + - admin + AivenAclsCreateRequest: + title: AivenAclsCreateRequest + type: object + properties: + acls: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/AivenAclCreatePayload' + schemaRegistryAcls: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/AivenSRAclCreatePayload' + AivenListAclResponse: + title: AivenListAclResponse + type: object + properties: + acls: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/AivenAcl' + schemaRegistryAcls: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/AivenSchemaRegistryAcl' + AivenSRAclCreatePayload: + title: AivenSRAclCreatePayload + type: object + required: + - permission + - resource + properties: + permission: + $ref: '#/components/schemas/AivenSchemaRegistryAclPermission' + resource: + type: string + AivenSchemaRegistryAcl: + title: AivenSchemaRegistryAcl + type: object + required: + - id + - permission + - resource + - username + properties: + id: + type: string + permission: + type: string + resource: + type: string + username: + type: string + AivenSchemaRegistryAclPermission: + title: AivenSchemaRegistryAclPermission + type: string + enum: + - schema_registry_read + - schema_registry_write + AivenServiceAccountCreateRequest: + title: AivenServiceAccountCreateRequest + type: object + required: + - username + properties: + username: + type: string + AivenServiceAccountCreateResponse: + title: AivenServiceAccountCreateResponse + type: object + required: + - access_cert + - access_key + - password + - type + - username + properties: + access_cert: + type: string + access_key: + type: string + password: + type: string + type: + type: string + username: + type: string + AllAclForPrincipal: + title: AllAclForPrincipal + type: object + required: + - aclPrincipal + properties: + aclPrincipal: + $ref: '#/components/schemas/AclPrincipal' + acls: + type: array + items: + $ref: '#/components/schemas/AclForResourceAndHost' + AmazonSecurity: + title: AmazonSecurity + oneOf: + - $ref: '#/components/schemas/Credentials' + - $ref: '#/components/schemas/FromContext' + - $ref: '#/components/schemas/FromRole' + - $ref: '#/components/schemas/IAMAnywhere' + discriminator: + propertyName: type + mapping: + Credentials: '#/components/schemas/Credentials' + FromContext: '#/components/schemas/FromContext' + FromRole: '#/components/schemas/FromRole' + IAMAnywhere: '#/components/schemas/IAMAnywhere' + ApiKey: + title: ApiKey + type: object + required: + - key + - description + - createdAt + - secret + properties: + key: + type: string + description: + type: string + createdAt: + type: string + format: date-time + secret: + type: string + ApplicationApplyResult: + title: ApplicationApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/ApplicationResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + ApplicationGroupApplyResult: + title: ApplicationGroupApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/ApplicationGroupResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + ApplicationGroupKind: + title: ApplicationGroupKind + type: string + enum: + - ApplicationGroup + ApplicationGroupMetadata: + title: ApplicationGroupMetadata + type: object + required: + - application + - name + properties: + application: + type: string + pattern: ^[0-9a-z\_-]+$ + name: + type: string + pattern: ^[0-9a-z\_-]+$ + ApplicationGroupResource: + title: ApplicationGroupResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v1 + kind: + $ref: '#/components/schemas/ApplicationGroupKind' + metadata: + $ref: '#/components/schemas/ApplicationGroupMetadata' + spec: + $ref: '#/components/schemas/ApplicationGroupSpec' + ApplicationGroupSpec: + title: ApplicationGroupSpec + type: object + required: + - displayName + properties: + displayName: + type: string + description: + type: string + permissions: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/ApplicationResourcePermissionDto_Any' + members: + type: array + uniqueItems: true + items: + type: string + ApplicationInstanceApplyResult: + title: ApplicationInstanceApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/ApplicationInstanceResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + ApplicationInstanceKind: + title: ApplicationInstanceKind + type: string + enum: + - ApplicationInstance + ApplicationInstanceMetadata: + title: ApplicationInstanceMetadata + type: object + required: + - name + - application + properties: + name: + type: string + pattern: ^[0-9a-z\_-]+$ + application: + type: string + pattern: ^[0-9a-z\_-]+$ + ApplicationInstancePermissionApplyResult: + title: ApplicationInstancePermissionApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/ApplicationInstancePermissionResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + ApplicationInstancePermissionKind: + title: ApplicationInstancePermissionKind + type: string + enum: + - ApplicationInstancePermission + ApplicationInstancePermissionMetadata: + title: ApplicationInstancePermissionMetadata + type: object + required: + - application + - appInstance + - name + properties: + application: + type: string + pattern: ^[0-9a-z\_-]+$ + appInstance: + type: string + pattern: ^[0-9a-z\_-]+$ + name: + type: string + pattern: ^[0-9a-z\_-]+$ + ApplicationInstancePermissionResource: + title: ApplicationInstancePermissionResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v1 + kind: + $ref: '#/components/schemas/ApplicationInstancePermissionKind' + metadata: + $ref: '#/components/schemas/ApplicationInstancePermissionMetadata' + spec: + $ref: '#/components/schemas/ApplicationInstancePermissionSpec' + ApplicationInstancePermissionSpec: + title: ApplicationInstancePermissionSpec + type: object + required: + - resource + - permission + - grantedTo + properties: + resource: + $ref: '#/components/schemas/Resource' + permission: + $ref: '#/components/schemas/ResourcePermission' + grantedTo: + type: string + pattern: ^[0-9a-z\_-]+$ + ApplicationInstanceResource: + title: ApplicationInstanceResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v1 + kind: + $ref: '#/components/schemas/ApplicationInstanceKind' + metadata: + $ref: '#/components/schemas/ApplicationInstanceMetadata' + spec: + $ref: '#/components/schemas/ApplicationInstanceSpec' + ApplicationInstanceSpec: + title: ApplicationInstanceSpec + type: object + required: + - cluster + properties: + cluster: + type: string + topicPolicyRef: + type: array + uniqueItems: true + items: + type: string + pattern: ^[0-9a-z\_-]+$ + resources: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/Resource' + serviceAccount: + type: string + ApplicationKind: + title: ApplicationKind + type: string + enum: + - Application + ApplicationMetadata: + title: ApplicationMetadata + type: object + required: + - name + properties: + name: + type: string + pattern: ^[0-9a-z\_-]+$ + ApplicationPolicyMetadata: + title: ApplicationPolicyMetadata + type: object + required: + - name + properties: + name: + type: string + pattern: ^[0-9a-z\_-]+$ + ApplicationPolicySpec: + title: ApplicationPolicySpec + type: object + required: + - policies + properties: + policies: + $ref: '#/components/schemas/Map_PolicyConstraintDto' + ApplicationResource: + title: ApplicationResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v1 + kind: + $ref: '#/components/schemas/ApplicationKind' + metadata: + $ref: '#/components/schemas/ApplicationMetadata' + spec: + $ref: '#/components/schemas/ApplicationSpec' + ApplicationResourcePermissionDto_Any: + title: ApplicationResourcePermissionDto_Any + oneOf: + - $ref: '#/components/schemas/CONNECTOR' + - $ref: '#/components/schemas/CONSUMER_GROUP1' + - $ref: '#/components/schemas/SUBJECT1' + - $ref: '#/components/schemas/TOPIC1' + discriminator: + propertyName: resourceType + mapping: + CONNECTOR: '#/components/schemas/CONNECTOR' + CONSUMER_GROUP: '#/components/schemas/CONSUMER_GROUP1' + SUBJECT: '#/components/schemas/SUBJECT1' + TOPIC: '#/components/schemas/TOPIC1' + ApplicationSpec: + title: ApplicationSpec + type: object + required: + - title + - owner + properties: + title: + type: string + description: + type: string + owner: + type: string + BadRequest: + title: BadRequest + type: object + required: + - title + properties: + title: + type: string + msg: + type: string + cause: + type: string + BasicAuth: + title: BasicAuth + type: object + required: + - username + - password + - type + properties: + username: + type: string + minLength: 1 + password: + type: string + type: + type: string + BearerToken: + title: BearerToken + type: object + required: + - token + - type + properties: + token: + type: string + minLength: 1 + type: + type: string + CLUSTER: + title: CLUSTER + type: object + required: + - name + - resourceType + properties: + name: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - clusterViewBroker + - clusterEditSRCompatibility + - clusterEditBroker + - clusterViewACL + - clusterManageACL + resourceType: + type: string + enum: + - PLATFORM + - CLUSTER + - TOPIC + - CONSUMER_GROUP + - KAFKA_CONNECT + - SUBJECT + - KSQLDB + CONNECTOR: + title: CONNECTOR + type: object + required: + - appInstance + - patternType + - name + - resourceType + properties: + appInstance: + type: string + pattern: ^[0-9a-z\_-]+$ + patternType: + $ref: '#/components/schemas/PatternType' + name: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - kafkaConnectorViewConfig + - kafkaConnectorStatus + - kafkaConnectorEditConfig + - kafkaConnectorDelete + - kafkaConnectorUpdate + - kafkaConnectorCreate + - kafkaConnectPauseResume + - kafkaConnectRestart + resourceType: + type: string + CONSUMER_GROUP: + title: CONSUMER_GROUP + type: object + required: + - cluster + - name + - patternType + - resourceType + properties: + cluster: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + name: + type: string + patternType: + $ref: '#/components/schemas/PatternType' + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - consumerGroupView + - consumerGroupReset + - consumerGroupDelete + - consumerGroupCreate + resourceType: + type: string + enum: + - PLATFORM + - CLUSTER + - TOPIC + - CONSUMER_GROUP + - KAFKA_CONNECT + - SUBJECT + - KSQLDB + CONSUMER_GROUP1: + title: CONSUMER_GROUP + type: object + required: + - appInstance + - patternType + - name + - resourceType + properties: + appInstance: + type: string + pattern: ^[0-9a-z\_-]+$ + patternType: + $ref: '#/components/schemas/PatternType' + name: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - consumerGroupView + - consumerGroupReset + - consumerGroupDelete + - consumerGroupCreate + resourceType: + type: string + CheckedCertificate: + title: CheckedCertificate + type: object + CleanupPolicy: + title: CleanupPolicy + type: string + enum: + - delete + - compact + - compact,delete + CleanupPolicyFilter: + title: CleanupPolicyFilter + type: object + required: + - type + properties: + oneOf: + type: array + items: + $ref: '#/components/schemas/CleanupPolicy' + type: + type: string + Cluster: + title: Cluster + type: object + required: + - clusterId + - resourceType + properties: + clusterId: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - clusterViewBroker + - clusterEditSRCompatibility + - clusterEditBroker + - clusterViewACL + - clusterManageACL + resourceType: + type: string + enum: + - Platform + - Cluster + - Topic + - ConsumerGroup + - KafkaConnect + - Subject + - KsqlDB + Conflict: + title: Conflict + type: object + required: + - title + properties: + title: + type: string + msg: + type: string + cause: + type: string + Confluent: + title: Confluent + type: object + required: + - key + - secret + - confluentEnvironmentId + - confluentClusterId + - type + properties: + key: + type: string + secret: + type: string + confluentEnvironmentId: + type: string + confluentClusterId: + type: string + type: + type: string + ConfluentLike: + title: ConfluentLike + type: object + required: + - url + - security + - ignoreUntrustedCertificate + properties: + url: + type: string + security: + $ref: '#/components/schemas/ConfluentLikeSchemaRegistrySecurity' + properties: + type: string + ignoreUntrustedCertificate: + type: boolean + ConfluentLikeSchemaRegistryRequest: + title: ConfluentLikeSchemaRegistryRequest + type: object + required: + - url + - type + properties: + url: + type: string + security: + $ref: '#/components/schemas/ConfluentLikeSchemaRegistrySecurity' + properties: + type: string + ignoreUntrustedCertificate: + type: boolean + type: + type: string + ConfluentLikeSchemaRegistryResponse: + title: ConfluentLikeSchemaRegistryResponse + type: object + required: + - id + - url + - security + - ignoreUntrustedCertificate + - type + properties: + id: + type: string + format: uuid + url: + type: string + security: + $ref: '#/components/schemas/ConfluentLikeSchemaRegistrySecurity' + properties: + type: string + ignoreUntrustedCertificate: + type: boolean + type: + type: string + ConfluentLikeSchemaRegistrySecurity: + title: ConfluentLikeSchemaRegistrySecurity + oneOf: + - $ref: '#/components/schemas/BasicAuth' + - $ref: '#/components/schemas/BearerToken' + - $ref: '#/components/schemas/NoSecurity' + - $ref: '#/components/schemas/SSLAuth' + discriminator: + propertyName: type + mapping: + BasicAuth: '#/components/schemas/BasicAuth' + BearerToken: '#/components/schemas/BearerToken' + NoSecurity: '#/components/schemas/NoSecurity' + SSLAuth: '#/components/schemas/SSLAuth' + ConstraintKind: + title: ConstraintKind + type: string + enum: + - Match + - NoneOf + - OneOf + - Range + ConsumerGroup: + title: ConsumerGroup + type: object + required: + - clusterId + - consumerGroupPattern + - resourceType + properties: + clusterId: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + consumerGroupPattern: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - consumerGroupView + - consumerGroupReset + - consumerGroupDelete + - consumerGroupCreate + resourceType: + type: string + enum: + - Platform + - Cluster + - Topic + - ConsumerGroup + - KafkaConnect + - Subject + - KsqlDB + ConsumerGroupFilter: + title: ConsumerGroupFilter + oneOf: + - $ref: '#/components/schemas/OnConsumerGroupName' + - $ref: '#/components/schemas/OnState' + discriminator: + propertyName: type + mapping: + OnConsumerGroupName: '#/components/schemas/OnConsumerGroupName' + OnState: '#/components/schemas/OnState' + ConsumerGroupRequest: + title: ConsumerGroupRequest + type: object + required: + - page + - itemsPerPage + - sort + properties: + page: + type: integer + format: int32 + itemsPerPage: + type: integer + format: int32 + filter: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/ConsumerGroupFilter' + sort: + $ref: '#/components/schemas/ConsumerGroupSort' + descSort: + type: boolean + ConsumerGroupResponse: + title: ConsumerGroupResponse + oneOf: + - $ref: '#/components/schemas/IndexedConsumerGroup' + - $ref: '#/components/schemas/NotIndexedConsumerGroup' + discriminator: + propertyName: type + mapping: + IndexedConsumerGroup: '#/components/schemas/IndexedConsumerGroup' + NotIndexedConsumerGroup: '#/components/schemas/NotIndexedConsumerGroup' + ConsumerGroupSort: + title: ConsumerGroupSort + type: string + enum: + - ByName + - ByState + - ByOverallLag + - ByMaxLagTimeInSeconds + - ByMembers + ConsumerGroupState: + title: ConsumerGroupState + type: string + enum: + - Unknown + - PreparingRebalance + - CompletingRebalance + - Stable + - Dead + - Empty + CreateApiKey: + title: CreateApiKey + type: object + required: + - name + - description + properties: + name: + type: string + description: + type: string + CreateCertificateFromFileRequest: + title: CreateCertificateFromFileRequest + type: object + required: + - file + properties: + file: + type: string + format: binary + jksPassword: + type: string + CreateCertificateRequest: + title: CreateCertificateRequest + type: object + required: + - input + properties: + input: + type: string + CreateServiceAccount: + title: CreateServiceAccount + type: object + required: + - name + - description + properties: + name: + type: string + pattern: ^[0-9a-zA-Z_\-]+$ + description: + type: string + Credentials: + title: Credentials + type: object + required: + - accessKeyId + - secretKey + - type + properties: + accessKeyId: + type: string + minLength: 1 + secretKey: + type: string + minLength: 1 + type: + type: string + DecodedCertificate: + title: DecodedCertificate + type: object + required: + - id + - version + - serialNumber + - issuerDN + - subjectDN + - notBefore + - notAfter + properties: + id: + type: integer + format: int32 + version: + type: integer + format: int32 + serialNumber: + type: integer + issuerDN: + type: string + subjectDN: + type: string + notBefore: + type: string + format: date-time + notAfter: + type: string + format: date-time + ExplainQuery: + title: ExplainQuery + type: object + required: + - statementText + - topology + - executionPlan + - state + properties: + statementText: + type: string + sources: + type: array + items: + type: string + sinks: + type: array + items: + type: string + topology: + type: string + executionPlan: + type: string + state: + type: string + windowType: + type: string + fields: + type: array + items: + $ref: '#/components/schemas/Field' + Field: + title: Field + type: object + required: + - name + - type + properties: + name: + type: string + type: + type: string + fields: + type: array + items: + $ref: '#/components/schemas/Field' + Forbidden: + title: Forbidden + type: object + required: + - title + properties: + title: + type: string + msg: + type: string + cause: + type: string + FromContext: + title: FromContext + type: object + required: + - type + properties: + profile: + type: string + minLength: 1 + type: + type: string + FromRole: + title: FromRole + type: object + required: + - role + - type + properties: + role: + type: string + minLength: 1 + type: + type: string + Gateway: + title: Gateway + type: object + required: + - url + - user + - password + - virtualCluster + - type + properties: + url: + type: string + user: + type: string + password: + type: string + virtualCluster: + type: string + type: + type: string + Glue: + title: Glue + type: object + required: + - region + - security + properties: + registryName: + type: string + minLength: 1 + region: + type: string + minLength: 1 + security: + $ref: '#/components/schemas/AmazonSecurity' + GlueSchemaRegistryRequest: + title: GlueSchemaRegistryRequest + type: object + required: + - region + - security + - type + properties: + registryName: + type: string + minLength: 1 + region: + type: string + minLength: 1 + security: + $ref: '#/components/schemas/AmazonSecurity' + type: + type: string + GlueSchemaRegistryResponse: + title: GlueSchemaRegistryResponse + type: object + required: + - id + - region + - security + - type + properties: + id: + type: string + format: uuid + registryName: + type: string + minLength: 1 + region: + type: string + minLength: 1 + security: + $ref: '#/components/schemas/AmazonSecurity' + type: + type: string + GroupApplyResult: + title: GroupApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/GroupResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + GroupKind: + title: GroupKind + type: string + enum: + - Group + GroupMetadata: + title: GroupMetadata + type: object + required: + - name + properties: + name: + type: string + pattern: ^[0-9a-z\_-]+$ + GroupResource: + title: GroupResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v2 + kind: + $ref: '#/components/schemas/GroupKind' + metadata: + $ref: '#/components/schemas/GroupMetadata' + spec: + $ref: '#/components/schemas/GroupSpec' + GroupSpec: + title: GroupSpec + type: object + required: + - displayName + properties: + displayName: + type: string + description: + type: string + externalGroups: + type: array + items: + type: string + members: + type: array + uniqueItems: true + items: + type: string + membersFromExternalGroups: + type: array + uniqueItems: true + items: + type: string + permissions: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions1' + HideInternal: + title: HideInternal + type: object + required: + - type + properties: + type: + type: string + HideStream: + title: HideStream + type: object + required: + - type + properties: + type: + type: string + IAMAnywhere: + title: IAMAnywhere + type: object + required: + - trustAnchorArn + - profileArn + - roleArn + - certificate + - privateKey + - type + properties: + trustAnchorArn: + type: string + minLength: 1 + profileArn: + type: string + minLength: 1 + roleArn: + type: string + minLength: 1 + certificate: + type: string + minLength: 1 + privateKey: + type: string + minLength: 1 + type: + type: string + IndexedConsumerGroup: + title: IndexedConsumerGroup + type: object + required: + - name + - state + - members + - type + properties: + name: + type: string + state: + $ref: '#/components/schemas/ConsumerGroupState' + members: + type: integer + format: int32 + overallLag: + type: integer + format: int64 + topics: + type: array + uniqueItems: true + items: + type: string + maxLagTimeInSeconds: + type: integer + format: int64 + type: + type: string + IndexedTopic: + title: IndexedTopic + type: object + required: + - name + - replicationFactor + - partitionCount + - recordCount + - produceRate + - type + properties: + name: + type: string + replicationFactor: + type: integer + format: int32 + partitionCount: + type: integer + format: int32 + recordCount: + type: integer + format: int64 + topicSize: + type: integer + cleanupPolicy: + $ref: '#/components/schemas/CleanupPolicy' + retentionInSize: + type: integer + format: int64 + retentionInMs: + type: integer + format: int64 + minIsr: + type: integer + format: int32 + tags: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/TagInfo' + lastActivityAt: + type: string + format: date-time + produceRate: + type: integer + format: int32 + type: + type: string + Interceptor: + title: Interceptor + type: object + required: + - name + - pluginClass + - priority + - config + properties: + name: + type: string + pluginClass: + type: string + priority: + type: integer + format: int32 + config: {} + KAFKA_CONNECT: + title: KAFKA_CONNECT + type: object + required: + - cluster + - kafkaConnect + - name + - patternType + - resourceType + properties: + cluster: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + kafkaConnect: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + name: + type: string + patternType: + $ref: '#/components/schemas/PatternType' + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - kafkaConnectorViewConfig + - kafkaConnectorStatus + - kafkaConnectorEditConfig + - kafkaConnectorDelete + - kafkaConnectorUpdate + - kafkaConnectorCreate + - kafkaConnectPauseResume + - kafkaConnectRestart + resourceType: + type: string + enum: + - PLATFORM + - CLUSTER + - TOPIC + - CONSUMER_GROUP + - KAFKA_CONNECT + - SUBJECT + - KSQLDB + KSQLDB: + title: KSQLDB + type: object + required: + - cluster + - ksqlDB + - resourceType + properties: + cluster: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + ksqlDB: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - ksqldbAccess + resourceType: + type: string + enum: + - PLATFORM + - CLUSTER + - TOPIC + - CONSUMER_GROUP + - KAFKA_CONNECT + - SUBJECT + - KSQLDB + KafkaClusterApplyResult: + title: KafkaClusterApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/KafkaClusterResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + KafkaClusterKind: + title: KafkaClusterKind + type: string + enum: + - KafkaCluster + KafkaClusterMetadata: + title: KafkaClusterMetadata + type: object + required: + - name + properties: + name: + type: string + pattern: ^[0-9a-z\_-]+$ + labels: + $ref: '#/components/schemas/Map_LabelKey_String' + KafkaClusterResource: + title: KafkaClusterResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v2 + kind: + $ref: '#/components/schemas/KafkaClusterKind' + metadata: + $ref: '#/components/schemas/KafkaClusterMetadata' + spec: + $ref: '#/components/schemas/KafkaClusterSpec' + KafkaClusterSpec: + title: KafkaClusterSpec + type: object + required: + - displayName + - bootstrapServers + properties: + displayName: + type: string + minLength: 1 + bootstrapServers: + type: string + properties: + $ref: '#/components/schemas/Map_String' + color: + type: string + icon: + type: string + minLength: 1 + schemaRegistry: + $ref: '#/components/schemas/SchemaRegistry' + amazonSecurity: + $ref: '#/components/schemas/AmazonSecurity' + ignoreUntrustedCertificate: + type: boolean + accessCert: + type: string + accessKey: + type: string + kafkaFlavor: + $ref: '#/components/schemas/KafkaFlavor' + KafkaConnect: + title: KafkaConnect + type: object + required: + - clusterId + - connectClusterId + - connectorNamePattern + - resourceType + properties: + clusterId: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + connectClusterId: + type: string + pattern: ^([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}|\*)$ + connectorNamePattern: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - kafkaConnectorViewConfig + - kafkaConnectorStatus + - kafkaConnectorEditConfig + - kafkaConnectorDelete + - kafkaConnectorUpdate + - kafkaConnectorCreate + - kafkaConnectPauseResume + - kafkaConnectRestart + resourceType: + type: string + enum: + - Platform + - Cluster + - Topic + - ConsumerGroup + - KafkaConnect + - Subject + - KsqlDB + KafkaConnectBasicAuth: + title: KafkaConnectBasicAuth + type: object + required: + - username + - password + - type + properties: + username: + type: string + minLength: 1 + password: + type: string + type: + type: string + KafkaConnectBearerToken: + title: KafkaConnectBearerToken + type: object + required: + - token + - type + properties: + token: + type: string + minLength: 1 + type: + type: string + KafkaConnectNoSecurity: + title: KafkaConnectNoSecurity + type: object + required: + - type + properties: + type: + type: string + KafkaConnectSSLAuth: + title: KafkaConnectSSLAuth + type: object + required: + - key + - certificateChain + - type + properties: + key: + type: string + minLength: 1 + certificateChain: + type: string + minLength: 1 + type: + type: string + KafkaConnectSecurity: + title: KafkaConnectSecurity + oneOf: + - $ref: '#/components/schemas/KafkaConnectBasicAuth' + - $ref: '#/components/schemas/KafkaConnectBearerToken' + - $ref: '#/components/schemas/KafkaConnectNoSecurity' + - $ref: '#/components/schemas/KafkaConnectSSLAuth' + discriminator: + propertyName: type + mapping: + KafkaConnectBasicAuth: '#/components/schemas/KafkaConnectBasicAuth' + KafkaConnectBearerToken: '#/components/schemas/KafkaConnectBearerToken' + KafkaConnectNoSecurity: '#/components/schemas/KafkaConnectNoSecurity' + KafkaConnectSSLAuth: '#/components/schemas/KafkaConnectSSLAuth' + KafkaConnectUpsert: + title: KafkaConnectUpsert + type: object + required: + - url + - name + properties: + url: + type: string + slug: + type: string + minLength: 1 + name: + type: string + minLength: 1 + security: + $ref: '#/components/schemas/KafkaConnectSecurity' + headers: + type: string + ignoreUntrustedCertificate: + type: boolean + KafkaConnectWithId: + title: KafkaConnectWithId + type: object + required: + - id + - slug + - url + - name + - security + - ignoreUntrustedCertificate + properties: + id: + type: string + format: uuid + slug: + type: string + minLength: 1 + url: + type: string + name: + type: string + minLength: 1 + security: + $ref: '#/components/schemas/KafkaConnectSecurity' + headers: + type: string + ignoreUntrustedCertificate: + type: boolean + KafkaFlavor: + title: KafkaFlavor + oneOf: + - $ref: '#/components/schemas/Aiven' + - $ref: '#/components/schemas/Confluent' + - $ref: '#/components/schemas/Gateway' + discriminator: + propertyName: type + mapping: + Aiven: '#/components/schemas/Aiven' + Confluent: '#/components/schemas/Confluent' + Gateway: '#/components/schemas/Gateway' + KsqlDB: + title: KsqlDB + type: object + required: + - clusterId + - ksqlDBServerSlug + - resourceType + properties: + clusterId: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + ksqlDBServerSlug: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - ksqldbAccess + resourceType: + type: string + enum: + - Platform + - Cluster + - Topic + - ConsumerGroup + - KafkaConnect + - Subject + - KsqlDB + KsqlDBBasicAuth: + title: KsqlDBBasicAuth + type: object + required: + - username + - password + - type + properties: + username: + type: string + minLength: 1 + password: + type: string + type: + type: string + KsqlDBBearerToken: + title: KsqlDBBearerToken + type: object + required: + - token + - type + properties: + token: + type: string + minLength: 1 + type: + type: string + KsqlDBNoSecurity: + title: KsqlDBNoSecurity + type: object + required: + - type + properties: + type: + type: string + KsqlDBQuery: + title: KsqlDBQuery + type: object + required: + - ksql + properties: + ksql: + type: string + properties: + $ref: '#/components/schemas/Map_String' + KsqlDBSSLAuth: + title: KsqlDBSSLAuth + type: object + required: + - key + - certificateChain + - type + properties: + key: + type: string + minLength: 1 + certificateChain: + type: string + minLength: 1 + type: + type: string + KsqlDBSecurity: + title: KsqlDBSecurity + oneOf: + - $ref: '#/components/schemas/KsqlDBBasicAuth' + - $ref: '#/components/schemas/KsqlDBBearerToken' + - $ref: '#/components/schemas/KsqlDBNoSecurity' + - $ref: '#/components/schemas/KsqlDBSSLAuth' + discriminator: + propertyName: type + mapping: + KsqlDBBasicAuth: '#/components/schemas/KsqlDBBasicAuth' + KsqlDBBearerToken: '#/components/schemas/KsqlDBBearerToken' + KsqlDBNoSecurity: '#/components/schemas/KsqlDBNoSecurity' + KsqlDBSSLAuth: '#/components/schemas/KsqlDBSSLAuth' + KsqlDBStatement: + title: KsqlDBStatement + type: object + required: + - ksql + properties: + ksql: + type: string + KsqlDBUpsert: + title: KsqlDBUpsert + type: object + required: + - url + - name + properties: + url: + type: string + slug: + type: string + minLength: 1 + name: + type: string + minLength: 1 + security: + $ref: '#/components/schemas/KsqlDBSecurity' + headers: + type: string + ignoreUntrustedCertificate: + type: boolean + KsqlDBWithId: + title: KsqlDBWithId + type: object + required: + - id + - slug + - url + - name + - security + - ignoreUntrustedCertificate + properties: + id: + type: string + format: uuid + slug: + type: string + minLength: 1 + url: + type: string + name: + type: string + minLength: 1 + security: + $ref: '#/components/schemas/KsqlDBSecurity' + headers: + type: string + ignoreUntrustedCertificate: + type: boolean + KsqlServerInfo: + title: KsqlServerInfo + type: object + required: + - name + - slug + properties: + name: + type: string + slug: + type: string + version: + type: string + tableCount: + type: integer + format: int32 + streamCount: + type: integer + format: int32 + queryCount: + type: integer + format: int32 + error: + type: string + List_String: + title: List_String + oneOf: + - $ref: '#/components/schemas/Nil' + - type: array + items: + type: string + Map_Double: + title: Map_Double + type: object + additionalProperties: + type: number + format: double + Map_GroupId_List_ResourcePermissions: + title: Map_GroupId_List_ResourcePermissions + type: object + additionalProperties: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + Map_Int: + title: Map_Int + type: object + additionalProperties: + type: integer + format: int32 + Map_LabelKey_String: + title: Map_LabelKey_String + type: object + additionalProperties: + type: string + Map_PolicyConstraintDto: + title: Map_PolicyConstraintDto + type: object + additionalProperties: + $ref: '#/components/schemas/PolicyConstraintDto' + Map_String: + title: Map_String + type: object + additionalProperties: + type: string + Map_TopicConfigKey_TopicConfigValue: + title: Map_TopicConfigKey_TopicConfigValue + type: object + additionalProperties: + type: string + Match: + title: Match + type: object + required: + - constraint + - pattern + properties: + constraint: + $ref: '#/components/schemas/ConstraintKind' + optional: + type: boolean + pattern: + type: string + Nil: + title: Nil + type: object + NoSecurity: + title: NoSecurity + type: object + required: + - type + properties: + type: + type: string + NoneOf: + title: NoneOf + type: object + required: + - constraint + properties: + constraint: + $ref: '#/components/schemas/ConstraintKind' + optional: + type: boolean + values: + type: array + items: + type: string + NotFound: + title: NotFound + type: object + required: + - title + properties: + title: + type: string + msg: + type: string + cause: + type: string + NotIndexedConsumerGroup: + title: NotIndexedConsumerGroup + type: object + required: + - name + - type + properties: + name: + type: string + type: + type: string + NotIndexedTopic: + title: NotIndexedTopic + type: object + required: + - name + - type + properties: + name: + type: string + type: + type: string + OnConsumerGroupName: + title: OnConsumerGroupName + type: object + required: + - contains + - type + properties: + contains: + type: string + type: + type: string + OnState: + title: OnState + type: object + required: + - type + properties: + oneOf: + type: array + items: + $ref: '#/components/schemas/ConsumerGroupState' + type: + type: string + OneOf: + title: OneOf + type: object + required: + - constraint + properties: + constraint: + $ref: '#/components/schemas/ConstraintKind' + optional: + type: boolean + values: + type: array + items: + type: string + OperationStates: + title: OperationStates + type: object + properties: + Unknown: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + All: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + Read: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + Write: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + Create: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + Delete: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + Alter: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + Describe: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + ClusterAction: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + DescribeConfigs: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + AlterConfigs: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + IdempotentWrite: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + CreateTokens: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + DescribeTokens: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + additionalProperties: + $ref: '#/components/schemas/AclPermissionTypeForAccessControlEntry' + Ord: + title: Ord + type: string + enum: + - asc + - desc + PLATFORM: + title: PLATFORM + type: object + required: + - resourceType + properties: + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - auditLogView + - taasView + - certificateManage + - userManage + - clusterConnectionsManage + - notificationChannelManage + - datamaskingView + - userView + - testingView + - datamaskingManage + - taasManage + - notificationChannelView + resourceType: + type: string + enum: + - PLATFORM + - CLUSTER + - TOPIC + - CONSUMER_GROUP + - KAFKA_CONNECT + - SUBJECT + - KSQLDB + Page_ConsumerGroupResponse: + title: Page_ConsumerGroupResponse + type: object + required: + - page + - totalPages + - perPage + - totalElements + properties: + data: + type: array + items: + $ref: '#/components/schemas/ConsumerGroupResponse' + page: + type: integer + format: int32 + totalPages: + type: integer + format: int32 + perPage: + type: integer + format: int32 + totalElements: + type: integer + format: int64 + Page_Resource: + title: Page_Resource + type: object + required: + - page + - totalPages + - perPage + - totalElements + properties: + data: + type: array + items: + $ref: '#/components/schemas/Resource_TopicMetadata_TopicSpec_String_V2' + page: + type: integer + format: int32 + totalPages: + type: integer + format: int32 + perPage: + type: integer + format: int32 + totalElements: + type: integer + format: int64 + Page_TopicResponse: + title: Page_TopicResponse + type: object + required: + - page + - totalPages + - perPage + - totalElements + properties: + data: + type: array + items: + $ref: '#/components/schemas/TopicResponse' + page: + type: integer + format: int32 + totalPages: + type: integer + format: int32 + perPage: + type: integer + format: int32 + totalElements: + type: integer + format: int64 + PatternType: + title: PatternType + type: string + enum: + - LITERAL + - PREFIXED + PatternTypeForResourcePattern: + title: PatternTypeForResourcePattern + type: string + enum: + - Literal + - Prefixed + - Unknown + Platform: + title: Platform + type: object + required: + - resourceType + properties: + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - auditLogView + - taasView + - certificateManage + - userManage + - clusterConnectionsManage + - notificationChannelManage + - datamaskingView + - userView + - testingView + - datamaskingManage + - taasManage + - notificationChannelView + resourceType: + type: string + enum: + - Platform + - Cluster + - Topic + - ConsumerGroup + - KafkaConnect + - Subject + - KsqlDB + Plugin: + title: Plugin + type: object + required: + - plugin + - pluginId + - tags + properties: + plugin: + type: string + pluginId: + type: string + tags: + $ref: '#/components/schemas/Map_String' + PluginWithReadme: + title: PluginWithReadme + type: object + required: + - plugin + - pluginId + - tags + - readme + properties: + plugin: + type: string + pluginId: + type: string + tags: + $ref: '#/components/schemas/Map_String' + readme: + type: string + PolicyConstraintDto: + title: PolicyConstraintDto + oneOf: + - $ref: '#/components/schemas/Match' + - $ref: '#/components/schemas/NoneOf' + - $ref: '#/components/schemas/OneOf' + - $ref: '#/components/schemas/Range' + discriminator: + propertyName: constraint + mapping: + Match: '#/components/schemas/Match' + NoneOf: '#/components/schemas/NoneOf' + OneOf: '#/components/schemas/OneOf' + Range: '#/components/schemas/Range' + PublicCreateGroupRequest: + title: PublicCreateGroupRequest + type: object + required: + - name + - groupId + properties: + name: + type: string + description: + type: string + groupId: + type: string + pattern: ^[0-9a-z\_-]+$ + externalGroups: + type: array + items: + type: string + PublicGroupOfUser: + title: PublicGroupOfUser + type: object + required: + - name + - groupId + properties: + name: + type: string + groupId: + type: string + pattern: ^[0-9a-z\_-]+$ + PublicGroupResponse: + title: PublicGroupResponse + type: object + required: + - groupId + - name + - isAdmin + properties: + groupId: + type: string + pattern: ^[0-9a-z\_-]+$ + name: + type: string + description: + type: string + users: + type: array + items: + $ref: '#/components/schemas/PublicUserOfGroup' + externalGroups: + type: array + items: + type: string + isAdmin: + type: boolean + PublicKafkaClusterResponse: + title: PublicKafkaClusterResponse + type: object + required: + - technicalId + - name + - bootstrapServers + - ignoreUntrustedCertificate + - createdAt + - updatedAt + properties: + technicalId: + type: string + name: + type: string + minLength: 1 + bootstrapServers: + type: string + properties: + type: string + color: + type: string + icon: + type: string + minLength: 1 + schemaRegistry: + $ref: '#/components/schemas/SharedSchemaRegistryResponseV2' + kafkaConnects: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/KafkaConnectWithId' + ignoreUntrustedCertificate: + type: boolean + accessCert: + type: string + accessKey: + type: string + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + amazonSecurity: + $ref: '#/components/schemas/AmazonSecurity' + kafkaFlavor: + $ref: '#/components/schemas/KafkaFlavor' + ksqlDBs: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/KsqlDBWithId' + PublicUserOfGroup: + title: PublicUserOfGroup + type: object + required: + - email + - externalMapping + properties: + email: + type: string + externalMapping: + type: boolean + PublicWithAllDetailsAndGroup: + title: PublicWithAllDetailsAndGroup + type: object + required: + - userId + - fullName + properties: + userId: + type: string + firstName: + type: string + lastName: + type: string + fullName: + type: string + pictureUrl: + type: string + phoneNumber: + type: string + country: + type: string + platformRole: + type: string + groups: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/PublicGroupOfUser' + Query: + title: Query + type: object + required: + - queryString + - id + - statusCount + - queryType + - state + properties: + queryString: + type: string + sinks: + type: array + items: + type: string + sinkKafkaTopics: + type: array + items: + type: string + id: + type: string + statusCount: + $ref: '#/components/schemas/Map_Int' + queryType: + type: string + state: + type: string + Range: + title: Range + type: object + required: + - constraint + - min + - max + properties: + constraint: + $ref: '#/components/schemas/ConstraintKind' + optional: + type: boolean + min: + type: integer + format: int64 + max: + type: integer + format: int64 + Resource: + title: Resource + type: object + required: + - type + - name + - patternType + properties: + type: + $ref: '#/components/schemas/ResourceType' + name: + type: string + patternType: + $ref: '#/components/schemas/ResourcePatternType' + ResourcePattern: + title: ResourcePattern + type: object + required: + - resourceType + - name + - patternType + properties: + resourceType: + $ref: '#/components/schemas/ResourceTypeForResourcePattern' + name: + type: string + patternType: + $ref: '#/components/schemas/PatternTypeForResourcePattern' + ResourcePatternType: + title: ResourcePatternType + type: string + enum: + - LITERAL + - PREFIXED + ResourcePermission: + title: ResourcePermission + type: string + enum: + - READ + - WRITE + ResourcePermissions: + title: ResourcePermissions + oneOf: + - $ref: '#/components/schemas/Cluster' + - $ref: '#/components/schemas/ConsumerGroup' + - $ref: '#/components/schemas/KafkaConnect' + - $ref: '#/components/schemas/KsqlDB' + - $ref: '#/components/schemas/Platform' + - $ref: '#/components/schemas/Subject' + - $ref: '#/components/schemas/Topic' + discriminator: + propertyName: resourceType + ResourcePermissions1: + title: ResourcePermissions + oneOf: + - $ref: '#/components/schemas/CLUSTER' + - $ref: '#/components/schemas/CONSUMER_GROUP' + - $ref: '#/components/schemas/KAFKA_CONNECT' + - $ref: '#/components/schemas/KSQLDB' + - $ref: '#/components/schemas/PLATFORM' + - $ref: '#/components/schemas/SUBJECT' + - $ref: '#/components/schemas/TOPIC' + discriminator: + propertyName: resourceType + ResourceType: + title: ResourceType + type: string + enum: + - TOPIC + - CONSUMER_GROUP + - SUBJECT + ResourceTypeForResourcePattern: + title: ResourceTypeForResourcePattern + type: string + enum: + - Unknown + - Topic + - Group + - Cluster + - TransactionalId + - DelegationToken + - User + Resource_TopicMetadata_TopicSpec_String_V2: + title: Resource_TopicMetadata_TopicSpec_String_V2 + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v2 + kind: + type: string + metadata: + $ref: '#/components/schemas/TopicMetadata' + spec: + $ref: '#/components/schemas/TopicSpec' + SSLAuth: + title: SSLAuth + type: object + required: + - key + - certificateChain + - type + properties: + key: + type: string + minLength: 1 + certificateChain: + type: string + minLength: 1 + type: + type: string + SUBJECT: + title: SUBJECT + type: object + required: + - cluster + - name + - patternType + - resourceType + properties: + cluster: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + name: + type: string + patternType: + $ref: '#/components/schemas/PatternType' + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - subjectCreateUpdate + - subjectView + - subjectEditCompatibility + - subjectDelete + resourceType: + type: string + enum: + - PLATFORM + - CLUSTER + - TOPIC + - CONSUMER_GROUP + - KAFKA_CONNECT + - SUBJECT + - KSQLDB + SUBJECT1: + title: SUBJECT + type: object + required: + - appInstance + - patternType + - name + - resourceType + properties: + appInstance: + type: string + pattern: ^[0-9a-z\_-]+$ + patternType: + $ref: '#/components/schemas/PatternType' + name: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - subjectCreateUpdate + - subjectView + - subjectEditCompatibility + - subjectDelete + resourceType: + type: string + SchemaCompatibility: + title: SchemaCompatibility + type: string + enum: + - BACKWARD + - BACKWARD_TRANSITIVE + - FORWARD + - FORWARD_TRANSITIVE + - FULL + - FULL_TRANSITIVE + - NONE + SchemaFormat: + title: SchemaFormat + type: string + enum: + - AVRO + - JSON + - PROTOBUF + SchemaReference: + title: SchemaReference + type: object + required: + - name + - subject + - version + properties: + name: + type: string + subject: + type: string + version: + type: integer + format: int32 + SchemaRegistry: + title: SchemaRegistry + oneOf: + - $ref: '#/components/schemas/ConfluentLike' + - $ref: '#/components/schemas/Glue' + SchemaRegistryRequest: + title: SchemaRegistryRequest + oneOf: + - $ref: '#/components/schemas/ConfluentLikeSchemaRegistryRequest' + - $ref: '#/components/schemas/GlueSchemaRegistryRequest' + discriminator: + propertyName: type + mapping: + ConfluentLikeSchemaRegistryRequest: '#/components/schemas/ConfluentLikeSchemaRegistryRequest' + GlueSchemaRegistryRequest: '#/components/schemas/GlueSchemaRegistryRequest' + ServerError: + title: ServerError + type: object + required: + - title + properties: + title: + type: string + msg: + type: string + cause: + type: string + ServiceAccount: + title: ServiceAccount + type: object + required: + - resourceId + - internalId + - serviceName + - description + properties: + resourceId: + type: string + internalId: + type: integer + format: int32 + serviceName: + type: string + description: + type: string + SharedSchemaRegistryResponseV2: + title: SharedSchemaRegistryResponseV2 + oneOf: + - $ref: '#/components/schemas/ConfluentLikeSchemaRegistryResponse' + - $ref: '#/components/schemas/GlueSchemaRegistryResponse' + discriminator: + propertyName: type + mapping: + ConfluentLikeSchemaRegistryResponse: '#/components/schemas/ConfluentLikeSchemaRegistryResponse' + GlueSchemaRegistryResponse: '#/components/schemas/GlueSchemaRegistryResponse' + SourceDescription: + title: SourceDescription + type: object + required: + - name + - topic + - type + - keyFormat + - valueFormat + - statement + - statistics + - readQueriesCount + - writeQueriesCount + properties: + name: + type: string + windowType: + type: string + topic: + type: string + type: + type: string + keyFormat: + type: string + valueFormat: + type: string + sourceConstraints: + type: array + items: + type: string + statement: + type: string + statistics: + $ref: '#/components/schemas/Map_Double' + readQueriesCount: + type: integer + format: int32 + writeQueriesCount: + type: integer + format: int32 + fields: + type: array + items: + $ref: '#/components/schemas/Field' + Subject: + title: Subject + type: object + required: + - clusterId + - subjectPattern + - resourceType + properties: + clusterId: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + subjectPattern: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - subjectCreateUpdate + - subjectView + - subjectEditCompatibility + - subjectDelete + resourceType: + type: string + enum: + - Platform + - Cluster + - Topic + - ConsumerGroup + - KafkaConnect + - Subject + - KsqlDB + SubjectApplyResult: + title: SubjectApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/SubjectResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + SubjectKind: + title: SubjectKind + type: string + enum: + - Subject + SubjectMetadata: + title: SubjectMetadata + type: object + required: + - name + - cluster + properties: + name: + type: string + cluster: + type: string + labels: + $ref: '#/components/schemas/Map_LabelKey_String' + SubjectResource: + title: SubjectResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v2 + kind: + $ref: '#/components/schemas/SubjectKind' + metadata: + $ref: '#/components/schemas/SubjectMetadata' + spec: + $ref: '#/components/schemas/SubjectSpec' + SubjectSpec: + title: SubjectSpec + type: object + required: + - format + - schema + properties: + format: + $ref: '#/components/schemas/SchemaFormat' + compatibility: + $ref: '#/components/schemas/SchemaCompatibility' + schema: + type: string + id: + type: integer + format: int32 + version: + type: integer + format: int32 + references: + type: array + items: + $ref: '#/components/schemas/SchemaReference' + TOPIC: + title: TOPIC + type: object + required: + - cluster + - name + - patternType + - resourceType + properties: + cluster: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + name: + type: string + patternType: + $ref: '#/components/schemas/PatternType' + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - topicViewConfig + - topicEmpty + - topicConsume + - topicProduce + - topicEditConfig + - topicCreate + - topicAddPartition + - topicDelete + resourceType: + type: string + enum: + - PLATFORM + - CLUSTER + - TOPIC + - CONSUMER_GROUP + - KAFKA_CONNECT + - SUBJECT + - KSQLDB + TOPIC1: + title: TOPIC + type: object + required: + - appInstance + - patternType + - name + - resourceType + properties: + appInstance: + type: string + pattern: ^[0-9a-z\_-]+$ + patternType: + $ref: '#/components/schemas/PatternType' + name: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - topicViewConfig + - topicEmpty + - topicConsume + - topicProduce + - topicEditConfig + - topicCreate + - topicAddPartition + - topicDelete + resourceType: + type: string + Table: + title: Table + type: object + required: + - name + - topic + - keyFormat + - valueFormat + - reads + - writes + - isWindowed + properties: + name: + type: string + topic: + type: string + keyFormat: + type: string + valueFormat: + type: string + reads: + type: integer + format: int32 + writes: + type: integer + format: int32 + isWindowed: + type: boolean + TagInfo: + title: TagInfo + type: object + required: + - id + - name + - color + properties: + id: + type: string + format: uuid + name: + type: string + color: + type: string + TagsFilter: + title: TagsFilter + type: object + required: + - type + properties: + atLeast: + type: array + items: + type: string + type: + type: string + TlsNotSupported: + title: TlsNotSupported + type: object + TlsStatus: + title: TlsStatus + oneOf: + - $ref: '#/components/schemas/CheckedCertificate' + - $ref: '#/components/schemas/TlsNotSupported' + - $ref: '#/components/schemas/UncheckedCertificate' + - $ref: '#/components/schemas/UnexpectedStatus' + - $ref: '#/components/schemas/UnreachableTarget' + TlsTestRequest: + title: TlsTestRequest + type: object + required: + - host + - port + properties: + host: + type: string + port: + type: integer + format: int32 + TlsTestResponse: + title: TlsTestResponse + type: object + required: + - status + properties: + status: + $ref: '#/components/schemas/TlsStatus' + TooManyRequest: + title: TooManyRequest + type: object + required: + - title + properties: + title: + type: string + msg: + type: string + cause: + type: string + Topic: + title: Topic + type: object + required: + - clusterId + - topicPattern + - resourceType + properties: + clusterId: + type: string + pattern: ^([0-9a-z\-]+|\*)$ + topicPattern: + type: string + permissions: + type: array + uniqueItems: true + items: + type: string + enum: + - topicViewConfig + - topicEmpty + - topicConsume + - topicProduce + - topicEditConfig + - topicCreate + - topicAddPartition + - topicDelete + resourceType: + type: string + enum: + - Platform + - Cluster + - Topic + - ConsumerGroup + - KafkaConnect + - Subject + - KsqlDB + TopicApplyResult: + title: TopicApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/TopicResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + TopicKind: + title: TopicKind + type: string + enum: + - Topic + TopicListFilter: + title: TopicListFilter + oneOf: + - $ref: '#/components/schemas/CleanupPolicyFilter' + - $ref: '#/components/schemas/HideInternal' + - $ref: '#/components/schemas/HideStream' + - $ref: '#/components/schemas/TagsFilter' + - $ref: '#/components/schemas/TopicNameFilter' + discriminator: + propertyName: type + mapping: + CleanupPolicyFilter: '#/components/schemas/CleanupPolicyFilter' + HideInternal: '#/components/schemas/HideInternal' + HideStream: '#/components/schemas/HideStream' + TagsFilter: '#/components/schemas/TagsFilter' + TopicNameFilter: '#/components/schemas/TopicNameFilter' + TopicListRequest: + title: TopicListRequest + type: object + required: + - page + - itemsPerPage + - sort + properties: + page: + type: integer + format: int32 + itemsPerPage: + type: integer + format: int32 + filter: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/TopicListFilter' + sort: + $ref: '#/components/schemas/TopicListSort' + descSort: + type: boolean + TopicListSort: + title: TopicListSort + type: string + enum: + - ByName + - ByReplicationFactor + - ByNumPartition + - ByMessageCount + - ByTopicSizeByte + - ByCleanupPolicy + - ByRetentionTimes + - ByMinIsr + - ByLastActivityAt + - ByProduceRate + TopicMetadata: + title: TopicMetadata + type: object + required: + - name + - cluster + properties: + name: + type: string + cluster: + type: string + labels: + $ref: '#/components/schemas/Map_LabelKey_String' + TopicNameFilter: + title: TopicNameFilter + type: object + required: + - contains + - type + properties: + contains: + type: string + type: + type: string + TopicPolicyApplyResult: + title: TopicPolicyApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/TopicPolicyResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + TopicPolicyKind: + title: TopicPolicyKind + type: string + enum: + - TopicPolicy + TopicPolicyResource: + title: TopicPolicyResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v1 + kind: + $ref: '#/components/schemas/TopicPolicyKind' + metadata: + $ref: '#/components/schemas/ApplicationPolicyMetadata' + spec: + $ref: '#/components/schemas/ApplicationPolicySpec' + TopicResource: + title: TopicResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v2 + kind: + $ref: '#/components/schemas/TopicKind' + metadata: + $ref: '#/components/schemas/TopicMetadata' + spec: + $ref: '#/components/schemas/TopicSpec' + TopicResponse: + title: TopicResponse + oneOf: + - $ref: '#/components/schemas/IndexedTopic' + - $ref: '#/components/schemas/NotIndexedTopic' + discriminator: + propertyName: type + mapping: + IndexedTopic: '#/components/schemas/IndexedTopic' + NotIndexedTopic: '#/components/schemas/NotIndexedTopic' + TopicSpec: + title: TopicSpec + type: object + required: + - partitions + - replicationFactor + properties: + partitions: + type: integer + format: int32 + replicationFactor: + type: integer + format: int32 + configs: + $ref: '#/components/schemas/Map_TopicConfigKey_TopicConfigValue' + Unauthorized: + title: Unauthorized + type: object + required: + - title + properties: + title: + type: string + msg: + type: string + cause: + type: string + UncheckedCertificate: + title: UncheckedCertificate + type: object + UnexpectedStatus: + title: UnexpectedStatus + type: object + UnreachableTarget: + title: UnreachableTarget + type: object + UpdateGroupRequest: + title: UpdateGroupRequest + type: object + required: + - name + properties: + name: + type: string + description: + type: string + externalGroups: + type: array + items: + type: string + UpdateInterceptor: + title: UpdateInterceptor + type: object + required: + - pluginClass + - priority + - config + properties: + pluginClass: + type: string + priority: + type: integer + format: int32 + config: {} + UpdateUserRequest: + title: UpdateUserRequest + type: object + required: + - email + properties: + lastName: + type: string + firstName: + type: string + email: + type: string + UpsertKafkaClusterRequest: + title: UpsertKafkaClusterRequest + type: object + required: + - name + - bootstrapServers + properties: + name: + type: string + minLength: 1 + bootstrapServers: + type: string + properties: + type: string + color: + type: string + icon: + type: string + minLength: 1 + schemaRegistry: + $ref: '#/components/schemas/SchemaRegistryRequest' + kafkaConnects: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/KafkaConnectUpsert' + ignoreUntrustedCertificate: + type: boolean + amazonSecurity: + $ref: '#/components/schemas/AmazonSecurity' + kafkaFlavor: + $ref: '#/components/schemas/KafkaFlavor' + ksqlDBs: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/KsqlDBUpsert' + UpsertResult: + title: UpsertResult + type: string + enum: + - Created + - Updated + - NotChanged + UserApplyResult: + title: UserApplyResult + type: object + required: + - resource + - upsertResult + properties: + resource: + $ref: '#/components/schemas/UserResource' + upsertResult: + $ref: '#/components/schemas/UpsertResult' + UserKind: + title: UserKind + type: string + enum: + - User + UserMetadata: + title: UserMetadata + type: object + required: + - name + properties: + name: + type: string + UserPermissions: + title: UserPermissions + type: object + required: + - groups + properties: + user: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions' + groups: + $ref: '#/components/schemas/Map_GroupId_List_ResourcePermissions' + UserResource: + title: UserResource + type: object + required: + - apiVersion + - kind + - metadata + - spec + properties: + apiVersion: + type: string + pattern: v2 + kind: + $ref: '#/components/schemas/UserKind' + metadata: + $ref: '#/components/schemas/UserMetadata' + spec: + $ref: '#/components/schemas/UserSpec' + UserSpec: + title: UserSpec + type: object + properties: + firstName: + type: string + lastName: + type: string + permissions: + type: array + items: + $ref: '#/components/schemas/ResourcePermissions1' + securitySchemes: + httpAuth: + type: http + scheme: bearer +x-tagGroups: +- name: 🐺 Conduktor API + tags: + - Introduction + - Authentication + - Kinds + - Api Groups + - Versioning + - Conventions +- name: 🏆 console/v1 + tags: + - clusters + - certificates +- name: 🏆 console/v2 + tags: + - cli_kafka-cluster_console_v2_2 +- name: 🌉 gatewa/v1 + tags: + - interceptors +- name: 👥 iam/v1 + tags: + - users + - groups + - permissions +- name: 👥 iam/v2 + tags: + - cli_user_iam_v2_0 + - cli_group_iam_v2_1 +- name: 🔥 kafka/v1 + tags: + - topic + - consumergroup + - connector + - acls + - service-accounts + - ksqlDBs +- name: 🔥 kafka/v2 + tags: + - cli_topic_kafka_v2_3 + - cli_subject_kafka_v2_4 +- name: 🚀 self-serve/v1 + tags: + - cli_topic-policy_self-serve_v1_5 + - cli_application_self-serve_v1_6 + - cli_application-instance_self-serve_v1_7 + - cli_application-instance-permission_self-serve_v1_8 + - cli_application-group_self-serve_v1_9 + - catalog diff --git a/schema/docs.yaml b/schema/docs_without_order.yaml similarity index 100% rename from schema/docs.yaml rename to schema/docs_without_order.yaml diff --git a/schema/kind.go b/schema/kind.go index 51d3076..7817dba 100644 --- a/schema/kind.go +++ b/schema/kind.go @@ -4,19 +4,23 @@ import ( _ "embed" "encoding/json" "fmt" - "github.com/conduktor/ctl/resource" "os" "regexp" "strconv" "strings" + + "github.com/conduktor/ctl/resource" ) type KindVersion struct { ListPath string Name string ParentPathParam []string + Order int `json:1000` //same value DefaultPriority } +const DefaultPriority = 1000 //update json annotation for Order when changing this value + type Kind struct { Versions map[int]KindVersion } @@ -74,9 +78,7 @@ func (kind *Kind) AddVersion(version int, kindVersion *KindVersion) error { func (kind *Kind) GetFlag() []string { kindVersion := kind.GetLatestKindVersion() result := make([]string, len(kindVersion.ParentPathParam)) - for i, param := range kindVersion.ParentPathParam { - result[i] = param - } + copy(result, kindVersion.ParentPathParam) return result } diff --git a/schema/multiple_version.yaml b/schema/multiple_version.yaml index c9fe827..7e6ad4f 100644 --- a/schema/multiple_version.yaml +++ b/schema/multiple_version.yaml @@ -26,7 +26,7 @@ paths: get: tags: - topic - - cli_topic_kafka_v2 + - cli_topic_kafka_v2_42 operationId: listTopicSelfServe2 parameters: - name: cluster @@ -69,7 +69,7 @@ paths: --max-redirs 32 put: tags: - - cli_topic_kafka_v2 + - cli_topic_kafka_v2_42 operationId: applyTopicSelfServe2 parameters: - name: cluster diff --git a/schema/schema.go b/schema/schema.go index 2b4f814..a079a0d 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -2,13 +2,14 @@ package schema import ( "fmt" - "github.com/conduktor/ctl/utils" - "github.com/pb33f/libopenapi" - v3high "github.com/pb33f/libopenapi/datamodel/high/v3" "regexp" "slices" "strconv" "strings" + + "github.com/conduktor/ctl/utils" + "github.com/pb33f/libopenapi" + v3high "github.com/pb33f/libopenapi/datamodel/high/v3" ) type Schema struct { @@ -41,7 +42,7 @@ func (s *Schema) GetKinds(strict bool) (map[string]Kind, error) { if err != nil { return nil, err } - newKind, err := buildKindVersion(path.Key(), tagParsed.kind, put, strict) + newKind, err := buildKindVersion(path.Key(), tagParsed.kind, tagParsed.order, put, strict) if err != nil { return nil, err } @@ -60,11 +61,12 @@ func (s *Schema) GetKinds(strict bool) (map[string]Kind, error) { return result, nil } -func buildKindVersion(path, kind string, put *v3high.Operation, strict bool) (*KindVersion, error) { +func buildKindVersion(path, kind string, order int, put *v3high.Operation, strict bool) (*KindVersion, error) { newKind := &KindVersion{ Name: kind, ListPath: path, ParentPathParam: make([]string, 0, len(put.Parameters)), + Order: order, } for _, parameter := range put.Parameters { if parameter.In == "path" && *parameter.Required { @@ -77,6 +79,11 @@ func buildKindVersion(path, kind string, put *v3high.Operation, strict bool) (*K if err != nil { return nil, err } + + err = checkThatOrderArePresent(newKind) + if err != nil { + return nil, err + } } return newKind, nil } @@ -84,16 +91,17 @@ func buildKindVersion(path, kind string, put *v3high.Operation, strict bool) (*K type tagParseResult struct { kind string version int + order int } func parseTag(tag string) (tagParseResult, error) { // we extract kind and version from the tag // e.g. cli_cluster_kafka_v1 -> kind: Cluster, version: 1 // e.g. cli_topic-policy_self-serve_v2 -> kind: TopicPolicy, version: 2 - re := regexp.MustCompile(`cli_([^_]+)_[^_]+_v(\d+)`) + re := regexp.MustCompile(`cli_([^_]+)_[^_]+_v(\d+)(?:_(\d+))?`) matches := re.FindStringSubmatch(tag) - if len(matches) < 3 { + if len(matches) < 4 { return tagParseResult{}, fmt.Errorf("Invalid tag format: %s", tag) } @@ -102,8 +110,18 @@ func parseTag(tag string) (tagParseResult, error) { if err != nil { return tagParseResult{}, fmt.Errorf("Invalid version number in tag: %s", matches[2]) } + orderStr := matches[3] + var order int + if orderStr == "" { + order = DefaultPriority + } else { + order, err = strconv.Atoi(orderStr) + } + if err != nil { + return tagParseResult{}, fmt.Errorf("Invalid order number in tag: %s", orderStr) + } - return tagParseResult{kind: utils.KebabToUpperCamel(kind), version: version}, nil + return tagParseResult{kind: utils.KebabToUpperCamel(kind), version: version, order: order}, nil } func checkThatPathParamAreInSpec(kind *KindVersion, requestBody *v3high.RequestBody) error { @@ -130,6 +148,14 @@ func checkThatPathParamAreInSpec(kind *KindVersion, requestBody *v3high.RequestB return nil } +func checkThatOrderArePresent(kind *KindVersion) error { + if kind.Order == DefaultPriority { + return fmt.Errorf("No priority set in schema for kind %s", kind.Name) + } + + return nil +} + func findCliTag(tags []string) string { for _, tag := range tags { if strings.HasPrefix(tag, "cli_") { diff --git a/schema/schema_test.go b/schema/schema_test.go index 738f67f..43fd2af 100644 --- a/schema/schema_test.go +++ b/schema/schema_test.go @@ -1,16 +1,17 @@ package schema import ( - "github.com/davecgh/go-spew/spew" "os" "reflect" "strings" "testing" + + "github.com/davecgh/go-spew/spew" ) -func TestGetKindWithYamlFromConsolePlus(t *testing.T) { +func TestGetKindWithYamlFromOldConsolePlusWithoutOrder(t *testing.T) { t.Run("gets kinds from schema", func(t *testing.T) { - schemaContent, err := os.ReadFile("docs.yaml") + schemaContent, err := os.ReadFile("docs_without_order.yaml") if err != nil { t.Fatalf("failed reading file: %s", err) } @@ -20,7 +21,7 @@ func TestGetKindWithYamlFromConsolePlus(t *testing.T) { t.Fatalf("failed creating new schema: %s", err) } - kinds, err := schema.GetKinds(true) + kinds, err := schema.GetKinds(false) if err != nil { t.Fatalf("failed getting kinds: %s", err) } @@ -32,6 +33,7 @@ func TestGetKindWithYamlFromConsolePlus(t *testing.T) { Name: "Application", ListPath: "/public/self-serve/v1/application", ParentPathParam: make([]string, 0), + Order: DefaultPriority, }, }, }, @@ -41,6 +43,7 @@ func TestGetKindWithYamlFromConsolePlus(t *testing.T) { Name: "ApplicationInstance", ListPath: "/public/self-serve/v1/application-instance", ParentPathParam: make([]string, 0), + Order: DefaultPriority, }, }, }, @@ -50,6 +53,7 @@ func TestGetKindWithYamlFromConsolePlus(t *testing.T) { Name: "ApplicationInstancePermission", ListPath: "/public/self-serve/v1/application-instance-permission", ParentPathParam: make([]string, 0), + Order: DefaultPriority, }, }, }, @@ -59,6 +63,7 @@ func TestGetKindWithYamlFromConsolePlus(t *testing.T) { Name: "TopicPolicy", ListPath: "/public/self-serve/v1/topic-policy", ParentPathParam: make([]string, 0), + Order: DefaultPriority, }, }, }, @@ -68,6 +73,7 @@ func TestGetKindWithYamlFromConsolePlus(t *testing.T) { Name: "Topic", ListPath: "/public/kafka/v2/cluster/{cluster}/topic", ParentPathParam: []string{"cluster"}, + Order: DefaultPriority, }, }, }, @@ -78,6 +84,131 @@ func TestGetKindWithYamlFromConsolePlus(t *testing.T) { }) } +func TestGetKindWithYamlFromConsolePlus(t *testing.T) { + t.Run("gets kinds from schema", func(t *testing.T) { + schemaContent, err := os.ReadFile("docs_with_order.yaml") + if err != nil { + t.Fatalf("failed reading file: %s", err) + } + + schema, err := New(schemaContent) + if err != nil { + t.Fatalf("failed creating new schema: %s", err) + } + + kinds, err := schema.GetKinds(true) + if err != nil { + t.Fatalf("failed getting kinds: %s", err) + } + + expected := KindCatalog{ + "Application": { + Versions: map[int]KindVersion{ + 1: { + Name: "Application", + ListPath: "/public/self-serve/v1/application", + ParentPathParam: []string{}, + Order: 6, + }, + }, + }, + "ApplicationInstance": { + Versions: map[int]KindVersion{ + 1: { + Name: "ApplicationInstance", + ListPath: "/public/self-serve/v1/application-instance", + ParentPathParam: []string{}, + Order: 7, + }, + }, + }, + "ApplicationInstancePermission": { + Versions: map[int]KindVersion{ + 1: { + Name: "ApplicationInstancePermission", + ListPath: "/public/self-serve/v1/application-instance-permission", + ParentPathParam: []string{}, + Order: 8, + }, + }, + }, + "ApplicationGroup": { + Versions: map[int]KindVersion{ + 1: { + Name: "ApplicationGroup", + ListPath: "/public/self-serve/v1/application-group", + ParentPathParam: []string{}, + Order: 9, + }, + }, + }, + "TopicPolicy": { + Versions: map[int]KindVersion{ + 1: { + Name: "TopicPolicy", + ListPath: "/public/self-serve/v1/topic-policy", + ParentPathParam: []string{}, + Order: 5, + }, + }, + }, + "Topic": { + Versions: map[int]KindVersion{ + 2: { + Name: "Topic", + ListPath: "/public/kafka/v2/cluster/{cluster}/topic", + ParentPathParam: []string{"cluster"}, + Order: 3, + }, + }, + }, + "Subject": { + Versions: map[int]KindVersion{ + 2: { + Name: "Subject", + ListPath: "/public/kafka/v2/cluster/{cluster}/subject", + ParentPathParam: []string{"cluster"}, + Order: 4, + }, + }, + }, + "User": { + Versions: map[int]KindVersion{ + 2: { + Name: "User", + ListPath: "/public/iam/v2/user", + ParentPathParam: []string{}, + Order: 0, + }, + }, + }, + "Group": { + Versions: map[int]KindVersion{ + 2: { + Name: "Group", + ListPath: "/public/iam/v2/group", + ParentPathParam: []string{}, + Order: 1, + }, + }, + }, + "KafkaCluster": { + Versions: map[int]KindVersion{ + 2: { + Name: "KafkaCluster", + ListPath: "/public/console/v2/kafka-cluster", + ParentPathParam: []string{}, + Order: 2, + }, + }, + }, + } + if !reflect.DeepEqual(kinds, expected) { + t.Error(spew.Printf("got kinds %v, want %v", kinds["Subject"], expected["Subject"])) + } + }) +} + func TestGetKindWithMultipleVersion(t *testing.T) { t.Run("gets kinds from schema", func(t *testing.T) { schemaContent, err := os.ReadFile("multiple_version.yaml") @@ -90,7 +221,7 @@ func TestGetKindWithMultipleVersion(t *testing.T) { t.Fatalf("failed creating new schema: %s", err) } - kinds, err := schema.GetKinds(true) + kinds, err := schema.GetKinds(false) if err != nil { t.Fatalf("failed getting kinds: %s", err) } @@ -102,11 +233,13 @@ func TestGetKindWithMultipleVersion(t *testing.T) { Name: "Topic", ListPath: "/public/v1/cluster/{cluster}/topic", ParentPathParam: []string{"cluster"}, + Order: DefaultPriority, }, 2: { Name: "Topic", ListPath: "/public/v2/cluster/{cluster}/sa/{sa}/topic", ParentPathParam: []string{"cluster", "sa"}, + Order: 42, }, }, },