From 2d2a20fe0787682b9f00388236bc539233eeb125 Mon Sep 17 00:00:00 2001 From: "samzong.lu" Date: Wed, 26 Apr 2023 01:38:27 +0800 Subject: [PATCH] init data Signed-off-by: samzong.lu --- openapi-nav.yaml => openapi-nav.yml | 0 openapi/api-doc-flow.md | 197 + openapi/ghippo/v0.15.0.json | 10063 +++++++++++++++++++ openapi/ghippo/v0.15.0.md | 1 + openapi/images/index.png | Bin 0 -> 369155 bytes openapi/images/middleware.png | Bin 0 -> 10904 bytes openapi/index.md | 31 + openapi/insight/v0.16.0-alpha1.json | 7937 +++++++++++++++ openapi/insight/v0.16.0-alpha1.md | 1 + openapi/mcamel/elasticsearch-index.md | 2 + openapi/mcamel/elasticsearch-v0.7.0.json | 3031 ++++++ openapi/mcamel/elasticsearch-v0.7.0.md | 1 + openapi/mcamel/kafka-index.md | 2 + openapi/mcamel/kafka-v0.5.0.json | 3033 ++++++ openapi/mcamel/kafka-v0.5.0.md | 1 + openapi/mcamel/minio-index.md | 2 + openapi/mcamel/minio-v0.5.0.json | 3146 ++++++ openapi/mcamel/minio-v0.5.0.md | 1 + openapi/mcamel/mysql-index.md | 2 + openapi/mcamel/mysql-v0.8.0.json | 5098 ++++++++++ openapi/mcamel/mysql-v0.8.0.md | 1 + openapi/mcamel/postgresql-index.md | 5 + openapi/mcamel/postgresql-v0.1.0.json | 3236 ++++++ openapi/mcamel/postgresql-v0.1.0.md | 1 + openapi/mcamel/postgresql-v0.1.1.json | 3236 ++++++ openapi/mcamel/postgresql-v0.1.1.md | 1 + openapi/mcamel/rabbitmq-index.md | 2 + openapi/mcamel/rabbitmq-v0.10.0.json | 3023 ++++++ openapi/mcamel/rabbitmq-v0.10.0.md | 1 + openapi/mcamel/redis-index.md | 2 + openapi/mcamel/redis-v0.7.0.json | 4746 +++++++++ openapi/mcamel/redis-v0.7.0.md | 1 + openapi/midware.md | 23 + openapi/mspider/index.md | 2 + openapi/mspider/v0.105.1.json | 9572 ++++++++++++++++++ openapi/mspider/v0.105.1.md | 1 + openapi/spidernet/index.md | 2 + openapi/spidernet/v0.5.0.json | 2475 +++++ openapi/spidernet/v0.5.0.md | 1 + all.yaml => scripts/all.yaml | 0 merge-nav.py => scripts/merge-nav.py | 0 navigation.yaml => scripts/navigation.yaml | 0 scripts/openapi-nav.yaml | 18 + 43 files changed, 58898 insertions(+) rename openapi-nav.yaml => openapi-nav.yml (100%) create mode 100644 openapi/api-doc-flow.md create mode 100644 openapi/ghippo/v0.15.0.json create mode 100644 openapi/ghippo/v0.15.0.md create mode 100644 openapi/images/index.png create mode 100644 openapi/images/middleware.png create mode 100644 openapi/index.md create mode 100644 openapi/insight/v0.16.0-alpha1.json create mode 100644 openapi/insight/v0.16.0-alpha1.md create mode 100644 openapi/mcamel/elasticsearch-index.md create mode 100644 openapi/mcamel/elasticsearch-v0.7.0.json create mode 100644 openapi/mcamel/elasticsearch-v0.7.0.md create mode 100644 openapi/mcamel/kafka-index.md create mode 100644 openapi/mcamel/kafka-v0.5.0.json create mode 100644 openapi/mcamel/kafka-v0.5.0.md create mode 100644 openapi/mcamel/minio-index.md create mode 100644 openapi/mcamel/minio-v0.5.0.json create mode 100644 openapi/mcamel/minio-v0.5.0.md create mode 100644 openapi/mcamel/mysql-index.md create mode 100644 openapi/mcamel/mysql-v0.8.0.json create mode 100644 openapi/mcamel/mysql-v0.8.0.md create mode 100644 openapi/mcamel/postgresql-index.md create mode 100644 openapi/mcamel/postgresql-v0.1.0.json create mode 100644 openapi/mcamel/postgresql-v0.1.0.md create mode 100644 openapi/mcamel/postgresql-v0.1.1.json create mode 100644 openapi/mcamel/postgresql-v0.1.1.md create mode 100644 openapi/mcamel/rabbitmq-index.md create mode 100644 openapi/mcamel/rabbitmq-v0.10.0.json create mode 100644 openapi/mcamel/rabbitmq-v0.10.0.md create mode 100644 openapi/mcamel/redis-index.md create mode 100644 openapi/mcamel/redis-v0.7.0.json create mode 100644 openapi/mcamel/redis-v0.7.0.md create mode 100644 openapi/midware.md create mode 100644 openapi/mspider/index.md create mode 100644 openapi/mspider/v0.105.1.json create mode 100644 openapi/mspider/v0.105.1.md create mode 100644 openapi/spidernet/index.md create mode 100644 openapi/spidernet/v0.5.0.json create mode 100644 openapi/spidernet/v0.5.0.md rename all.yaml => scripts/all.yaml (100%) rename merge-nav.py => scripts/merge-nav.py (100%) rename navigation.yaml => scripts/navigation.yaml (100%) create mode 100644 scripts/openapi-nav.yaml diff --git a/openapi-nav.yaml b/openapi-nav.yml similarity index 100% rename from openapi-nav.yaml rename to openapi-nav.yml diff --git a/openapi/api-doc-flow.md b/openapi/api-doc-flow.md new file mode 100644 index 00000000..3fa0e8a1 --- /dev/null +++ b/openapi/api-doc-flow.md @@ -0,0 +1,197 @@ +--- +hide: + - toc +--- + +# OpenAPI 文档制作流程 + +本页以 Ghippo 为例,说明制作 OpenAPI 文档的步骤。 +主要是生成一个 swagger json 文件,然后自动向文档站提 PR。 + +1. 在 Makefile 中添加这几行代码: + + ```go title="Makefile" + .PHONY += doc.openapi + doc.openapi: + $(eval swagger_path ?= swagger) + @bash hack/gen-openapi-json.sh ghippo $(GHIPPO_VERSION) $(swagger_path) + ``` + +1. 编写生成 swagger json 的脚本 + + ```bash title="gen-openapi-json.sh" + #!/bin/bash + + set -o errexit + set -o nounset + set -o pipefail + + # 参数1: 产品名称(dce5 ghippo kpanda ...) + # 参数2: 产品版本(建议是 tag 值) + # 参数3: swagger 输出文件夹 + readonly PRODUCT=${1} + readonly PRODUCT_VERSION=${2} + readonly OUTPUT_DIR=${3} + + # proto 所在的文件夹 + PROTO_DIR=./api/proto + # proto vendor 所在文件夹 + PROTOVENDOR_DIR=./api/protovendor + + # 输出文件夹不存在,就创建 + [ ! -e ${OUTPUT_DIR} ] && mkdir ${OUTPUT_DIR} + + # 合并生成一个 swagger json 文件 + protoc \ + --proto_path=".:${PROTOVENDOR_DIR}" \ + --openapiv2_out ${OUTPUT_DIR} \ + --openapiv2_opt logtostderr=true \ + --openapiv2_opt allow_merge=true \ + --openapiv2_opt output_format=json \ + --openapiv2_opt merge_file_name="${PRODUCT}.${PRODUCT_VERSION}." \ + ${PROTO_DIR}/*/*.proto + ``` + +1. 编写向 doc repo 提 PR 的脚本 + + ```bash title="update_openapi_doc.sh" + #!/usr/bin/env bash + + set -o errexit + set -o nounset + set -o pipefail + set -x + + # 参数1:产品名称-英文(ghippo kpanda ...) + # 参数2:产品名称-中文(全局管理 ...) + # 参数3:swagger json 的版本 + # 参数4:swagger json 文件夹路径 + # 参数5:github token + readonly PRODUCT=${1} + readonly PRODUCT_ZH=${2} + readonly SWAGGER_VERSION=${3} + readonly SWAGGER_PATH=${4} + readonly GITHUB_TOKEN=${5} + + # 在流水线中项目所在的目录,以 ghippo 为例:/builds/ndx/ghippo + readonly PRODUCT_LOCAL_PATH=$(pwd) + # 文档站本地 git 仓库地址 + readonly LOCAL_GIT_REPO=$(mktemp -d) + # 文档站远程 git 仓库地址 + readonly REMOTE_GIT_REPO="https://${GITHUB_TOKEN}@github.com/windsonsea/DaoCloud-docs.git" + + function main() { + local current_pwd=$(pwd) + + # 拉取线上文档站 main 分支最新的代码,并且在本地创建一个名字叫 ${branch_name} 的分支 + local branch_name="openapi-${PRODUCT}-${SWAGGER_VERSION}" + + # 只拉取 main 分支,depth 为 1 的代码 + git clone --single-branch --depth 1 ${REMOTE_GIT_REPO} ${LOCAL_GIT_REPO} + cd ${LOCAL_GIT_REPO} + git checkout -b ${branch_name} + + # 创建 doc 文件 + check_bash_dir + update_openapi_index_page + create_openapi_detail_files + + local git_uname=$(git config --get user.name) + if [ "${git_uname}" == "" ]; then + git config --global user.email "haifeng.yao@daocloud.io" + git config --global user.name "DaoCloud CI Robot" + fi + git add . + git commit -m "openapi: ${PRODUCT} version updated to ${SWAGGER_VERSION}" + git push ${REMOTE_GIT_REPO} ${branch_name} -f + cd ${current_pwd} + + create_pull_request ${branch_name} + } + + function check_bash_dir() { + local openapi_dir="${LOCAL_GIT_REPO}/docs/zh/docs/openapi" + # 检查目标文件是否存在,不存在就创建 + if [ ! -d ${openapi_dir} ]; then + mkdir ${openapi_dir} + fi + local product_dir="${LOCAL_GIT_REPO}/docs/zh/docs/openapi/${PRODUCT}" + if [ ! -d ${product_dir} ]; then + mkdir ${product_dir} + fi + } + + # 更新项目的 openapi index 页面 + function update_openapi_index_page() { + local target_file="${LOCAL_GIT_REPO}/docs/zh/docs/openapi/${PRODUCT}/index.md" + local text="- [版本 ${SWAGGER_VERSION}](./${SWAGGER_VERSION}.md)" + # 检查目标文件是否存在,不存在就创建,并添加文本 + if [ ! -f ${target_file} ]; then + echo "# ${PRODUCT_ZH} OpenAPI" >${target_file} + fi + + # 向 index.md 文件的第 2 行末尾添加文本 + sed -i "1a ${text}" ${target_file} + } + + # 创建 swagger json 详情文件 + function create_openapi_detail_files() { + local target_dir="${LOCAL_GIT_REPO}/docs/zh/docs/openapi/${PRODUCT}" + local target_file="${LOCAL_GIT_REPO}/docs/zh/docs/openapi/${PRODUCT}/${SWAGGER_VERSION}.md" + # 检查 md 目标文件是否存在,不存在就创建 + if [ ! -f ${target_file} ]; then + echo "# " >${target_file} + fi + + # 对每个 swagger json 文件进行操作,修改 json 文件中的字段。并将生成的文件输出到 openapi 的文件夹下 + readonly text="{\"title\":\"${PRODUCT_ZH}\",\"version\":\"${SWAGGER_VERSION}\"}" + for file in $(ls "${PRODUCT_LOCAL_PATH}/${SWAGGER_PATH}"); do + # 对每个文件进行操作,修改 json 文件中的字段。 + # eg. + # "info": { + # "title": "api/proto/v1alpha1/about.proto", + # "version": "version not set" + # } + # to + # "info": { + # "title": "ghippo", + # "version": "0.14" + # } + jq --argjson v ${text} '.info = $v' ${PRODUCT_LOCAL_PATH}/${SWAGGER_PATH}/${file} >${target_dir}/${SWAGGER_VERSION}.json + done + } + + # 给文档站创建一个 PR + function create_pull_request() { + local branch_name=${1} + local msg="openapi: ${PRODUCT} version updated to ${SWAGGER_VERSION}" + local body_json='{"title": "'${msg}'", "body": "'${msg}'", "head": "windsonsea:'${branch_name}'", "base": "main"}' + local status_code=$( + curl -L --retry 3 -X POST -i -s -w %{http_code} -o /dev/null \ + -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + -d "${body_json}" \ + https://api.github.com/repos/DaoCloud/DaoCloud-docs/pulls + ) + if [ "${status_code}" -lt 200 ] || [ "${status_code}" -ge 400 ]; then + echo "failed to create pull request. http status code is ${status_code}." + exit -1 + fi + echo ${status_code} + } + + main $@ + ``` + +1. 更新 GitLab CI 文件 + + ```yaml title=".gitlab-ci.yml" + doc.openapi: + stage: doc + rules: + - if: '$CI_COMMIT_TAG =~ /v[0-9]+(\.[0-9]+)+$/ && $CI_DEPLOY == null' + tags: + - docker + script: + - make doc.openapi + - bash /go/update_openapi_doc.sh ghippo 全局管理 ${CI_COMMIT_TAG} swagger ${GITHUB_TOKEN} + ``` diff --git a/openapi/ghippo/v0.15.0.json b/openapi/ghippo/v0.15.0.json new file mode 100644 index 00000000..e8ead41a --- /dev/null +++ b/openapi/ghippo/v0.15.0.json @@ -0,0 +1,10063 @@ +{ + "swagger": "2.0", + "info": { + "title": "全局管理", + "version": "v0.15.0" + }, + "tags": [ + { + "name": "About" + }, + { + "name": "Audit" + }, + { + "name": "Client" + }, + { + "name": "Account" + }, + { + "name": "GProducts" + }, + { + "name": "GProductLicenses" + }, + { + "name": "Group" + }, + { + "name": "IDP" + }, + { + "name": "Ldap" + }, + { + "name": "Login" + }, + { + "name": "LoginPage" + }, + { + "name": "Message" + }, + { + "name": "OIDC" + }, + { + "name": "Openapi" + }, + { + "name": "ProductNavigator" + }, + { + "name": "Publish" + }, + { + "name": "Role" + }, + { + "name": "SecurityPolicy" + }, + { + "name": "SmtpSetting" + }, + { + "name": "Theme" + }, + { + "name": "TopNavigator" + }, + { + "name": "Users" + }, + { + "name": "Workspace" + }, + { + "name": "AuditV1alpha2" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/ghippo.io/v1alpha1/.well-known/openid-configuration": { + "get": { + "operationId": "OIDC_WellKnown", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/oidcWellKnownResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "OIDC" + ] + } + }, + "/apis/ghippo.io/v1alpha1/about/developers": { + "get": { + "operationId": "About_ListDevelopers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/aboutListDevelopersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "About" + ] + } + }, + "/apis/ghippo.io/v1alpha1/about/opensources": { + "get": { + "operationId": "About_ListOpenSources", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/aboutListOpenSourcesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "description": "page: 当前页码,默认值为1", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "每页数量,默认为 10", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "About" + ] + } + }, + "/apis/ghippo.io/v1alpha1/about/versions": { + "get": { + "operationId": "About_ListGProductVersions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/aboutListGProductVersionsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "About" + ] + } + }, + "/apis/ghippo.io/v1alpha1/audits": { + "get": { + "operationId": "Audit_ListAudit", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditListAuditResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "sourceType", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sourceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "all", + "succeeded", + "failed" + ], + "default": "all" + }, + { + "name": "searchType", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "fuzzy", + "exact" + ], + "default": "fuzzy" + }, + { + "name": "searchUser", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "start", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "end", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Audit" + ] + } + }, + "/apis/ghippo.io/v1alpha1/audits/clear": { + "get": { + "operationId": "Audit_GetAutoClearAuditTime", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditGetAutoClearAuditTimeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Audit" + ] + } + }, + "/apis/ghippo.io/v1alpha1/audits/external": { + "get": { + "summary": "来自外部传递进来的审计日志,用于不经过apiserver的请求,例如直接请求keycloak的请求,由前端埋点调用", + "operationId": "Audit_ExternalAudit", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditExternalAuditResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "externalType", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "loginFailed", + "forgetPassword", + "resetPassword" + ], + "default": "loginFailed" + }, + { + "name": "resourceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "code", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Audit" + ] + } + }, + "/apis/ghippo.io/v1alpha1/audits/limit-range": { + "get": { + "operationId": "Audit_GetLimitRangeTime", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditGetLimitRangeTimeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Audit" + ] + } + }, + "/apis/ghippo.io/v1alpha1/audits/reports/resources": { + "get": { + "operationId": "Audit_GetAuditResourceReport", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditGetAuditResourceReportResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "start", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "end", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Audit" + ] + } + }, + "/apis/ghippo.io/v1alpha1/audits/reports/users": { + "get": { + "operationId": "Audit_GetAuditUserReport", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditGetAuditUserReportResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "start", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "end", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Audit" + ] + } + }, + "/apis/ghippo.io/v1alpha1/audits/{id}": { + "get": { + "operationId": "Audit_GetAudit", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditGetAuditResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Audit" + ] + } + }, + "/apis/ghippo.io/v1alpha1/auth-token": { + "get": { + "operationId": "Openapi_AuthToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditAuthTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Openapi" + ] + } + }, + "/apis/ghippo.io/v1alpha1/certs": { + "get": { + "operationId": "Openapi_Certs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditCertsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Openapi" + ] + } + }, + "/apis/ghippo.io/v1alpha1/clients": { + "get": { + "operationId": "Client_ListClients", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/clientListClientsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Client" + ] + }, + "post": { + "operationId": "Client_CreateClient", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/clientCreateClientResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/clientCreateClientRequest" + } + } + ], + "tags": [ + "Client" + ] + } + }, + "/apis/ghippo.io/v1alpha1/clients/{id}": { + "get": { + "operationId": "Client_GetClient", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/clientGetClientResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Client" + ] + }, + "delete": { + "operationId": "Client_DeleteClient", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/clientDeleteClientResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Client" + ] + }, + "put": { + "operationId": "Client_UpdateClient", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/clientUpdateClientResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "redirectUris": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Client" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user": { + "get": { + "operationId": "Account_GetUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserGetUserResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user/accesstoken": { + "post": { + "operationId": "Account_CreateAccessToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserCreateAccessTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/currentuserCreateAccessTokenRequest" + } + } + ], + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user/accesstokens": { + "get": { + "operationId": "Account_ListAccessTokens", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserListAccessTokensResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user/accesstokens/{id}": { + "delete": { + "operationId": "Account_DeleteAccessToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserDeleteAccessTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user/email": { + "put": { + "operationId": "Account_UpdateEmail", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserUpdateEmailResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/currentuserUpdateEmailRequest" + } + } + ], + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user/global-permissions": { + "get": { + "operationId": "Account_GetGlobalPermissions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserGetGlobalPermissionsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user/language": { + "put": { + "operationId": "Account_UpdateLanguage", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserUpdateLanguageResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/currentuserUpdateLanguageRequest" + } + } + ], + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/current-user/password": { + "put": { + "operationId": "Account_UpdatePassword", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/currentuserUpdatePasswordResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/currentuserUpdatePasswordRequest" + } + } + ], + "tags": [ + "Account" + ] + } + }, + "/apis/ghippo.io/v1alpha1/exclusiveresource-types": { + "get": { + "operationId": "Workspace_ListExclusiveResourceTypes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListExclusiveResourceTypesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folderrolenames": { + "get": { + "operationId": "Role_ListFolderRoleNames", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListFolderRoleNamesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folderroles": { + "get": { + "summary": "to be deprecated after several months", + "operationId": "Role_ListFolderRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListFolderRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folderroles/{name}/members-folders": { + "get": { + "operationId": "Role_ListMembersFoldersByFolderRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListMembersFoldersByFolderRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders": { + "get": { + "operationId": "Workspace_ListFolders", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListFoldersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + }, + "post": { + "operationId": "Workspace_CreateFolder", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceCreateFolderResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/workspaceCreateFolderRequest" + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders-tree": { + "get": { + "operationId": "Workspace_ListFolderTree", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListFolderTreeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}": { + "get": { + "operationId": "Workspace_GetFolder", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceGetFolderResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + }, + "delete": { + "summary": "TODO: sub folder删不删?", + "operationId": "Workspace_DeleteFolder", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceDeleteFolderResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + }, + "put": { + "operationId": "Workspace_UpdateFolder", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceUpdateFolderResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "alias": { + "type": "string", + "title": "string name = 1 [(validate.rules).string.min_len = 1];" + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}/authorize": { + "post": { + "operationId": "Workspace_Authorize", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceAuthorizeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "roleName": { + "type": "string" + }, + "memberName": { + "type": "string" + }, + "memberType": { + "type": "string" + }, + "memberId": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}/deauthorize": { + "put": { + "operationId": "Workspace_Deauthorize", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceDeauthorizeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "roleName": { + "type": "string" + }, + "memberName": { + "type": "string" + }, + "memberType": { + "type": "string" + }, + "memberId": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}/groups": { + "get": { + "operationId": "Workspace_FolderListGroups", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceFolderListGroupsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}/members-roles": { + "get": { + "operationId": "Workspace_ListMembersRolesByFolder", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListMembersRolesByFolderResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "memberName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "memberType", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "roleName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}/permissions": { + "get": { + "operationId": "Workspace_FolderListPermissions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceFolderListPermissionsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}/reauthorize": { + "put": { + "operationId": "Workspace_Reauthorize", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceReauthorizeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "oldRoleName": { + "type": "string" + }, + "newRoleName": { + "type": "string" + }, + "memberName": { + "type": "string" + }, + "memberType": { + "type": "string" + }, + "memberId": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/folders/{folderId}/users": { + "get": { + "operationId": "Workspace_FolderListUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceFolderListUsersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pageSize", + "description": "每页条数", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "当前页", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/globalrole/{name}": { + "get": { + "summary": "to be deprecated after several months", + "operationId": "Role_GetGlobalRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleGetGlobalRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/globalroles": { + "get": { + "summary": "to be deprecated after several months", + "operationId": "Role_ListGlobalRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListGlobalRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/globalroles/{name}/subjects": { + "get": { + "summary": "to be deprecated after several months", + "operationId": "Role_ListGlobalRoleSubjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListGlobalRoleSubjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/gproduct-licenses": { + "get": { + "operationId": "GProductLicenses_ListGProductLicenses", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductlicenseListGProductLicensesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "GProductLicenses" + ] + }, + "put": { + "operationId": "GProductLicenses_UpdateGProductLicenses", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductlicenseUpdateGProductLicensesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/gproductlicenseUpdateGProductLicensesRequest" + } + } + ], + "tags": [ + "GProductLicenses" + ] + } + }, + "/apis/ghippo.io/v1alpha1/gproduct-licenses/esn": { + "get": { + "operationId": "GProductLicenses_GetGProductLicensesESN", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductlicenseGetGProductLicensesESNResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "GProductLicenses" + ] + } + }, + "/apis/ghippo.io/v1alpha1/gproduct-licenses/over-quota": { + "get": { + "operationId": "GProductLicenses_GetGProductLicensesOverQuota", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductlicenseGetGProductLicensesOverQuotaResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "GProductLicenses" + ] + } + }, + "/apis/ghippo.io/v1alpha1/gproduct-licenses/yaml": { + "get": { + "operationId": "GProductLicenses_GetGProductLicensesYaml", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductlicenseGetGProductLicenseYamlResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "GProductLicenses" + ] + } + }, + "/apis/ghippo.io/v1alpha1/gproduct-licenses/{id}": { + "get": { + "operationId": "GProductLicenses_GetGProductLicenses", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductlicenseGetGProductLicensesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "GProductLicenses" + ] + }, + "delete": { + "operationId": "GProductLicenses_DeleteGProductLicenses", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductlicenseDeleteProductLicensesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "GProductLicenses" + ] + } + }, + "/apis/ghippo.io/v1alpha1/gproducts": { + "get": { + "operationId": "GProducts_ListGProducts", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gproductListGProductsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "GProducts" + ] + } + }, + "/apis/ghippo.io/v1alpha1/groups": { + "get": { + "operationId": "Group_ListGroups", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupListGroupsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Group" + ] + }, + "post": { + "operationId": "Group_CreateGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupCreateGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/groupCreateGroupRequest" + } + } + ], + "tags": [ + "Group" + ] + } + }, + "/apis/ghippo.io/v1alpha1/groups/{id}": { + "get": { + "operationId": "Group_GetGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupGetGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Group" + ] + }, + "delete": { + "operationId": "Group_DeleteGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupDeleteGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Group" + ] + }, + "put": { + "operationId": "Group_UpdateGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupUpdateGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Group" + ] + } + }, + "/apis/ghippo.io/v1alpha1/groups/{id}/members": { + "get": { + "operationId": "Group_GroupMembers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupGroupMembersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Group" + ] + } + }, + "/apis/ghippo.io/v1alpha1/groups/{id}/members/{userId}": { + "delete": { + "operationId": "Group_DeleteUserFromGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupDeleteUserFromGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Group" + ] + }, + "post": { + "operationId": "Group_AddUserToGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupAddUserToGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Group" + ] + } + }, + "/apis/ghippo.io/v1alpha1/groups/{id}/roles": { + "get": { + "operationId": "Group_ListGroupRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupListGroupRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "role type", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "authorized", + "description": "是否授权", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Group" + ] + }, + "put": { + "operationId": "Group_UpdateGroupRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupUpdateGroupRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "addRoles": { + "type": "array", + "items": { + "type": "string" + } + }, + "removeRoles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Group" + ] + } + }, + "/apis/ghippo.io/v1alpha1/groups/{id}/subjects": { + "get": { + "operationId": "Group_ListGroupSubjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/groupListGroupSubjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Group" + ] + } + }, + "/apis/ghippo.io/v1alpha1/idp": { + "get": { + "operationId": "IDP_GetIDP", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/idpGetIDPResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "IDP" + ] + }, + "delete": { + "operationId": "IDP_DeleteIDP", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/idpDeleteIDPResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "IDP" + ] + }, + "post": { + "operationId": "IDP_CreateIDP", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/idpCreateIDPResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/idpCreateIDPRequest" + } + } + ], + "tags": [ + "IDP" + ] + }, + "put": { + "operationId": "IDP_UpdateIDP", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/idpUpdateIDPResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/idpUpdateIDPRequest" + } + } + ], + "tags": [ + "IDP" + ] + } + }, + "/apis/ghippo.io/v1alpha1/idp/redirect-url": { + "get": { + "operationId": "IDP_GetRedirectUrl", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/idpGetRedirectUrlResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "IDP" + ] + } + }, + "/apis/ghippo.io/v1alpha1/ldap": { + "get": { + "operationId": "Ldap_GetLdap", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapGetLdapResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Ldap" + ] + }, + "post": { + "operationId": "Ldap_CreateLdap", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapCreateLdapResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ldapCreateLdapRequest" + } + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/ldap/{id}": { + "delete": { + "operationId": "Ldap_DeleteLdap", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapDeleteLdapResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Ldap" + ] + }, + "put": { + "operationId": "Ldap_UpdateLdap", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapUpdateLdapResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "vendor": { + "type": "string", + "title": "LDAP vendor (provider), only is other" + }, + "startTls": { + "type": "string", + "description": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling." + }, + "ldapProtocol": { + "type": "string" + }, + "ldapHost": { + "type": "string" + }, + "usersDn": { + "type": "string", + "title": "Full DN of LDAP tree where your users are. This DN is the parent of LDAP users.\nIt could be for example 'ou=users,dc=example,dc=com' assuming that your typical user will have DN like 'uid=john,ou=users,dc=example,dc=com'" + }, + "bindDn": { + "type": "string", + "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server" + }, + "bindCredential": { + "type": "string", + "description": "Password of LDAP admin." + }, + "userObjectClasses": { + "type": "string", + "description": "All values of LDAP objectClass attribute for users in LDAP divided by comma.\nFor example: 'inetOrgPerson, organizationalPerson' .\nNewly created Keycloak users will be written to LDAP with all those object classes and existing LDAP user records are found just if they contain all those object classes." + }, + "usernameLdapAttribute": { + "type": "string", + "title": "Name of LDAP attribute, which is mapped as Keycloak username. For many LDAP server vendors it can be 'uid'.\nFor Active directory it can be 'sAMAccountName' or 'cn'.\nThe attribute should be filled for all LDAP user records you want to import from LDAP to Keycloak" + }, + "fullSyncPeriod": { + "type": "string", + "title": "Period for full synchronization in seconds: -1 手动同步" + }, + "rdnLdapAttribute": { + "type": "string", + "description": "Name of the LDAP attribute, which is used as RDN (top attribute) of typical user DN.\nUsually it's the same as the Username LDAP attribute, however it is not required.\nFor example for Active directory, it is common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'." + }, + "uuidLdapAttribute": { + "type": "string", + "description": "Name of the LDAP attribute, which is used as a unique object identifier (UUID) for objects in LDAP.\nFor many LDAP server vendors, it is 'entryUUID'; however some are different.\nFor example, for Active directory it should be 'objectGUID'.\nIf your LDAP server does not support the notion of UUID, you can use any other attribute that is supposed to be unique among LDAP users in tree.\nFor example 'uid' or 'entryDN'." + }, + "editMode": { + "type": "string", + "description": "READ_ONLY is a read-only LDAP store.\nWRITABLE means data will be synced back to LDAP on demand." + }, + "readTimeout": { + "type": "string", + "description": "LDAP read timeout in milliseconds. This timeout applies for LDAP read operations." + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "email": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/ldap/{id}/group": { + "get": { + "operationId": "Ldap_GetLdapGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapGetLdapGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Ldap" + ] + }, + "post": { + "operationId": "Ldap_CreateLdapGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapCreateLdapGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "groupDn": { + "type": "string" + }, + "groupObjectClasses": { + "type": "string" + }, + "groupNameLdapAttribute": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/ldap/{id}/sync": { + "get": { + "operationId": "Ldap_SyncUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapSyncUsersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/ldap/{ldapId}/group/{id}": { + "delete": { + "operationId": "Ldap_DeleteLdapGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapDeleteLdapGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "ldapId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Ldap" + ] + }, + "put": { + "operationId": "Ldap_UpdateLdapGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapUpdateLdapGroupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "ldapId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "groupDn": { + "type": "string" + }, + "groupObjectClasses": { + "type": "string" + }, + "groupNameLdapAttribute": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/ldap/{ldapId}/group/{id}/sync": { + "get": { + "operationId": "Ldap_SyncLdapGroups", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapSyncLdapGroupsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "ldapId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/login": { + "get": { + "operationId": "Login_RedirectLogin", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginLoginGetResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "callbackUrl", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Login" + ] + }, + "post": { + "operationId": "Login_OIDCLogin", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginLoginPostResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/loginLoginPostRequest" + } + } + ], + "tags": [ + "Login" + ] + } + }, + "/apis/ghippo.io/v1alpha1/login-page/info": { + "get": { + "operationId": "LoginPage_GetInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginpageGetLoginPageInfoResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "LoginPage" + ] + }, + "put": { + "operationId": "LoginPage_UpdateInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginpageUpdateLoginPageInfoResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/loginpageUpdateLoginPageInfoRequest" + } + } + ], + "tags": [ + "LoginPage" + ] + } + }, + "/apis/ghippo.io/v1alpha1/login-page/reset": { + "post": { + "operationId": "LoginPage_ResetInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginpageResetLoginPageInfoResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "LoginPage" + ] + } + }, + "/apis/ghippo.io/v1alpha1/login-page/version": { + "get": { + "operationId": "LoginPage_GetVersion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginpageGetLoginPageVersionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "LoginPage" + ] + } + }, + "/apis/ghippo.io/v1alpha1/logout": { + "delete": { + "operationId": "Login_OIDCLogout", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginLogoutResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Login" + ] + } + }, + "/apis/ghippo.io/v1alpha1/messages": { + "get": { + "operationId": "Message_ListMessages", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/messageListMessagesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "unreadCount", + "description": "是否只返回统计未读数量", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "read", + "description": "是否只返回已读或未读,传\"read\"或\"unread\"来区分,不传返回已读和未读的消息", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "all", + "read", + "unread" + ], + "default": "all" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Message" + ] + } + }, + "/apis/ghippo.io/v1alpha1/messages/count": { + "get": { + "operationId": "Message_GetMessagesCount", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/messageGetMessagesCountResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Message" + ] + } + }, + "/apis/ghippo.io/v1alpha1/messages/delete": { + "post": { + "operationId": "Message_DeleteMessages", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/messageDeleteMessagesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/messageDeleteMessagesRequest" + } + } + ], + "tags": [ + "Message" + ] + } + }, + "/apis/ghippo.io/v1alpha1/messages/toggle-unread": { + "get": { + "operationId": "Message_ToggleUnreadMessage", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/messageToggleUnreadMessageResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "next", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Message" + ] + } + }, + "/apis/ghippo.io/v1alpha1/messages/{id}": { + "get": { + "operationId": "Message_GetMessage", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/messageGetMessageResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Message" + ] + } + }, + "/apis/ghippo.io/v1alpha1/oidc/ghippo-client-config": { + "get": { + "operationId": "OIDC_GhippoClientConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/oidcGhippoClientConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "OIDC" + ] + } + }, + "/apis/ghippo.io/v1alpha1/oidc/logout": { + "get": { + "operationId": "OIDC_RedirectFrontendLogout", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/oidcRedirectFrontendLogoutResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "OIDC" + ] + }, + "delete": { + "operationId": "OIDC_OIDCLogout", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/oidcOIDCLogoutResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "OIDC" + ] + } + }, + "/apis/ghippo.io/v1alpha1/oidc/token": { + "post": { + "operationId": "OIDC_OIDCToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/oidcOIDCTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/oidcOIDCTokenRequest" + } + } + ], + "tags": [ + "OIDC" + ] + } + }, + "/apis/ghippo.io/v1alpha1/oidc/userinfo": { + "get": { + "operationId": "OIDC_OIDCUserInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/oidcOIDCUserInfoResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "OIDC" + ] + } + }, + "/apis/ghippo.io/v1alpha1/permissions": { + "get": { + "operationId": "Role_ListAllPermissions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListAllPermissionsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/platformrolenames": { + "get": { + "operationId": "Role_ListPlatformRoleNames", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListPlatformRoleNamesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/platformroles/{name}/members": { + "get": { + "operationId": "Role_ListMembersByPlatformRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListMembersByPlatformRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/product-nav/info": { + "get": { + "operationId": "ProductNavigator_Info", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/productnavProductNavResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "ProductNavigator" + ] + } + }, + "/apis/ghippo.io/v1alpha1/publish/messages": { + "post": { + "operationId": "Publish_PublishMessage", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/publishPublishMessageResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/publishPublishMessageRequest" + } + } + ], + "tags": [ + "Publish" + ] + } + }, + "/apis/ghippo.io/v1alpha1/read-messages": { + "post": { + "operationId": "Message_SetReadMessages", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/messageSetReadMessagesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/messageSetReadMessagesRequest" + } + } + ], + "tags": [ + "Message" + ] + } + }, + "/apis/ghippo.io/v1alpha1/refresh-token": { + "post": { + "operationId": "Login_RefreshToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/loginRefreshTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/loginRefreshTokenRequest" + } + } + ], + "tags": [ + "Login" + ] + } + }, + "/apis/ghippo.io/v1alpha1/resourcequota-types": { + "get": { + "operationId": "Workspace_ListResourceQuotaTypes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListResourceQuotaTypesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/roles": { + "get": { + "operationId": "Role_ListRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pageSize", + "description": "每页条数", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "当前页", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "roleType", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "query_all_role_type", + "query_system", + "query_custom" + ], + "default": "query_all_role_type" + }, + { + "name": "scope", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "query_all_auth_scope", + "query_platform", + "query_folder", + "query_workspace" + ], + "default": "query_all_auth_scope" + } + ], + "tags": [ + "Role" + ] + }, + "post": { + "operationId": "Role_CreateRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleCreateRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/roleCreateRoleRequest" + } + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/roles/check-role-name/{name}": { + "get": { + "operationId": "Role_CheckRoleName", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleCheckRoleNameResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/roles/role-member-count/{name}": { + "get": { + "operationId": "Role_GetRoleMemberCount", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleGetRoleMemberCountResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/roles/{name}": { + "get": { + "operationId": "Role_GetRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleGetRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Role" + ] + }, + "delete": { + "operationId": "Role_DeleteRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleDeleteRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Role" + ] + }, + "put": { + "operationId": "Role_UpdateRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleUpdateRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string", + "title": "globalRoleType type = 2;" + }, + "perms": { + "type": "array", + "items": { + "$ref": "#/definitions/rolePermission" + }, + "title": "AuthScope scope = 3;" + } + } + } + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/securitypolicy/accountlockout": { + "get": { + "operationId": "SecurityPolicy_GetAccountLockoutPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicyGetAccountLockoutPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "SecurityPolicy" + ] + }, + "put": { + "operationId": "SecurityPolicy_SetAccountLockoutPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicySetAccountLockoutPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/securitypolicySetAccountLockoutPolicyRequest" + } + } + ], + "tags": [ + "SecurityPolicy" + ] + } + }, + "/apis/ghippo.io/v1alpha1/securitypolicy/logout": { + "get": { + "operationId": "SecurityPolicy_GetLogoutPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicyGetLogoutPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "SecurityPolicy" + ] + }, + "put": { + "operationId": "SecurityPolicy_SetLogoutPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicySetLogoutPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/securitypolicySetLogoutPolicyRequest" + } + } + ], + "tags": [ + "SecurityPolicy" + ] + } + }, + "/apis/ghippo.io/v1alpha1/securitypolicy/password": { + "get": { + "operationId": "SecurityPolicy_GetPasswordPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicyGetPasswordPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "SecurityPolicy" + ] + }, + "put": { + "operationId": "SecurityPolicy_SetPasswordPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicySetPasswordPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/securitypolicySetPasswordPolicyRequest" + } + } + ], + "tags": [ + "SecurityPolicy" + ] + } + }, + "/apis/ghippo.io/v1alpha1/securitypolicy/sessiontimeout": { + "get": { + "operationId": "SecurityPolicy_GetSessionTimeout", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicyGetSessionTimeoutResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "SecurityPolicy" + ] + }, + "put": { + "operationId": "SecurityPolicy_SetSessionTimeout", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/securitypolicySetSessionTimeoutResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/securitypolicySetSessionTimeoutRequest" + } + } + ], + "tags": [ + "SecurityPolicy" + ] + } + }, + "/apis/ghippo.io/v1alpha1/sharedresource-types": { + "get": { + "operationId": "Workspace_ListSharedResourceTypes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListSharedResourceTypesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/smtp-setting": { + "get": { + "operationId": "SmtpSetting_GetSmtpServer", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/smtpsettingGetSmtpServerResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "SmtpSetting" + ] + }, + "put": { + "operationId": "SmtpSetting_SetSmtpServer", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/smtpsettingSetSmtpServerResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/smtpsettingSetSmtpServerRequest" + } + } + ], + "tags": [ + "SmtpSetting" + ] + } + }, + "/apis/ghippo.io/v1alpha1/smtp-setting/conn-test": { + "post": { + "operationId": "SmtpSetting_SmtpServerConnTest", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/smtpsettingSmtpConnTestResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/smtpsettingSmtpConnTestRequest" + } + } + ], + "tags": [ + "SmtpSetting" + ] + } + }, + "/apis/ghippo.io/v1alpha1/testLdapAuthentication": { + "post": { + "operationId": "Ldap_TestLdapAuthentication", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapTestLdapAuthenticationResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ldapTestLdapAuthenticationRequest" + } + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/testLdapConnection": { + "post": { + "operationId": "Ldap_TestLdapConnection", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ldapTestLdapConnectionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ldapTestLdapConnectionRequest" + } + } + ], + "tags": [ + "Ldap" + ] + } + }, + "/apis/ghippo.io/v1alpha1/themes/login_page": { + "get": { + "operationId": "Theme_GetLoginThemeConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/themeGetLoginThemeConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Theme" + ] + }, + "post": { + "operationId": "Theme_SetLoginThemeConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/themeSetLoginThemeConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/themeSetLoginThemeConfigRequest" + } + } + ], + "tags": [ + "Theme" + ] + } + }, + "/apis/ghippo.io/v1alpha1/themes/login_page.css": { + "get": { + "operationId": "Theme_GetLoginThemeCSS", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiHttpBody" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Theme" + ] + } + }, + "/apis/ghippo.io/v1alpha1/themes/login_page/reset": { + "post": { + "operationId": "Theme_ResetLoginThemeConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/themeResetLoginThemeConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Theme" + ] + } + }, + "/apis/ghippo.io/v1alpha1/themes/theme": { + "get": { + "operationId": "Theme_GetThemeConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/themeGetThemeConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Theme" + ] + }, + "post": { + "operationId": "Theme_SetThemeConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/themeSetThemeConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/themeSetThemeConfigRequest" + } + } + ], + "tags": [ + "Theme" + ] + } + }, + "/apis/ghippo.io/v1alpha1/themes/theme.css": { + "get": { + "operationId": "Theme_GetThemeCSS", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiHttpBody" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Theme" + ] + } + }, + "/apis/ghippo.io/v1alpha1/themes/theme/reset": { + "post": { + "operationId": "Theme_ResetThemeConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/themeResetThemeConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Theme" + ] + } + }, + "/apis/ghippo.io/v1alpha1/top-nav": { + "post": { + "operationId": "TopNavigator_SetTopNav", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/topnavSetTopNavResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/topnavSetTopNavRequest" + } + } + ], + "tags": [ + "TopNavigator" + ] + } + }, + "/apis/ghippo.io/v1alpha1/top-nav/info": { + "get": { + "operationId": "TopNavigator_Info", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/topnavTopNavResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "TopNavigator" + ] + } + }, + "/apis/ghippo.io/v1alpha1/top-nav/reset": { + "post": { + "operationId": "TopNavigator_ResetTopNav", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/topnavResetTopNavResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "TopNavigator" + ] + } + }, + "/apis/ghippo.io/v1alpha1/update-quota-check": { + "post": { + "operationId": "Workspace_UpdateQuotaCheck", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceUpdateQuotaCheckResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/workspaceUpdateQuotaCheckRequest" + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users": { + "get": { + "operationId": "Users_ListUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userListUsersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pageSize", + "description": "每页条数", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "当前页", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Users" + ] + }, + "post": { + "operationId": "Users_CreateUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userCreateUserResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/userCreateUserRequest" + } + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/check/{username}": { + "get": { + "operationId": "Users_CheckUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userCheckUserResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}": { + "get": { + "operationId": "Users_GetUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userGetUserResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Users" + ] + }, + "delete": { + "operationId": "Users_DeleteUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userDeleteUserResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Users" + ] + }, + "put": { + "operationId": "Users_UpdateUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userUpdateUserResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "email": { + "type": "string" + }, + "description": { + "type": "string" + }, + "firstname": { + "type": "string" + }, + "lastname": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}/accesstoken": { + "post": { + "operationId": "Users_CreateUserAccessToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userCreateUserAccessTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "expiredAt": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}/accesstokens": { + "get": { + "operationId": "Users_ListUserAccessTokens", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userListUserAccessTokensResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}/accesstokens/{aid}": { + "delete": { + "operationId": "Users_DeleteUserAccessToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userDeleteUserAccessTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "aid", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}/groups": { + "get": { + "operationId": "Users_ListUserGroups", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userListUserGroupsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}/password": { + "put": { + "operationId": "Users_SetUserPassword", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userSetUserPasswordResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "password": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}/roles": { + "get": { + "operationId": "Users_ListUserRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userListUserRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "search", + "description": "搜索关键字", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "搜索偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "分页大小", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "role type", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "authorized", + "description": "是否授权", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Users" + ] + }, + "put": { + "operationId": "Users_UpdateUserRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userUpdateUserRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "addRoles": { + "type": "array", + "items": { + "type": "string" + } + }, + "removeRoles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/users/{id}/subjects": { + "get": { + "operationId": "Users_ListUserSubjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/userListUserSubjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Users" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspace-sharedresource-quota": { + "get": { + "operationId": "Workspace_GetWorkspaceSharedResourceQuota", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceGetWorkspaceSharedResourceQuotaResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "resourceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "resourceType", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "notFormatted", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspace-sharedresource-quota-hard": { + "put": { + "operationId": "Workspace_SetQuotaHardForWorkspaceSharedResource", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceSetQuotaHardForWorkspaceSharedResourceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/workspaceSetQuotaHardForWorkspaceSharedResourceRequest" + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspacerolenames": { + "get": { + "operationId": "Role_ListWorkspaceRoleNames", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListWorkspaceRoleNamesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaceroles": { + "get": { + "summary": "to be deprecated after several months", + "operationId": "Role_ListWorkspaceRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListWorkspaceRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaceroles/{name}/members-workspaces": { + "get": { + "operationId": "Role_ListMembersWorkspacesByWorkspaceRole", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/roleListMembersWorkspacesByWorkspaceRoleResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "search", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Role" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces": { + "get": { + "operationId": "Workspace_ListWorkspaces", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListWorkspacesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + }, + "post": { + "operationId": "Workspace_CreateWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceCreateWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/workspaceCreateWorkspaceRequest" + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}": { + "get": { + "operationId": "Workspace_GetWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceGetWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + }, + "delete": { + "summary": "TODO: sub ws删不删?", + "operationId": "Workspace_DeleteWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceDeleteWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/available-exclusiveresources": { + "get": { + "operationId": "Workspace_ListAvailableExclusiveResourcesByWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListAvailableExclusiveResourcesByWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "resourceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "resourceType", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/available-sharedresources": { + "get": { + "operationId": "Workspace_ListAvailableSharedResourcesByWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListAvailableSharedResourcesByWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "resourceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "resourceType", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/bind-exclusiveresource": { + "post": { + "operationId": "Workspace_BindExclusiveResourceToWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceBindExclusiveResourceToWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "resourceScope": { + "type": "string" + }, + "gproduct": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/bind-sharedresource": { + "post": { + "operationId": "Workspace_BindSharedResourceToWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceBindSharedResourceToWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "resourceScope": { + "type": "string" + }, + "gproduct": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/bind-sharedresource-setquota": { + "post": { + "operationId": "Workspace_BindSharedResourceAndSetQuotaHardToWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceBindSharedResourceAndSetQuotaHardToWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "cluster 资源 resource_scope 为空\nstring resource_scope = 4 [(validate.rules).string.min_len = 1];", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "gproduct": { + "type": "string" + }, + "quotaHard": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/exclusiveresources": { + "get": { + "operationId": "Workspace_ListExclusiveResourcesByWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListExclusiveResourcesByWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "resourceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "resourceType", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/members-roles": { + "get": { + "operationId": "Workspace_ListMembersRolesByWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListMembersRolesByWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "memberName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/sharedresources": { + "get": { + "operationId": "Workspace_ListSharedResourcesByWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceListSharedResourcesByWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "resourceName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/unbind-resource": { + "put": { + "operationId": "Workspace_UnbindResourceFromWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/workspaceUnbindResourceFromWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "resourceScope": { + "type": "string" + }, + "gproduct": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Workspace" + ] + } + }, + "/apis/ghippo.io/v1alpha2/audits/clear": { + "post": { + "operationId": "AuditV1alpha2_ClearAudits", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditv2ClearAuditsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/auditv2ClearAuditsRequest" + } + } + ], + "tags": [ + "AuditV1alpha2" + ] + }, + "put": { + "operationId": "AuditV1alpha2_SetAutoClearAudits", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/auditv2SetAutoClearAuditsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/auditv2SetAutoClearAuditsRequest" + } + } + ], + "tags": [ + "AuditV1alpha2" + ] + } + }, + "/apis/ghippo.io/v1alpha2/audits/export": { + "get": { + "operationId": "AuditV1alpha2_ExportAudit", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiHttpBody" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "start", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "end", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sourceType", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sourceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "all", + "succeeded", + "failed" + ], + "default": "all" + }, + { + "name": "searchType", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "fuzzy", + "exact" + ], + "default": "fuzzy" + }, + { + "name": "searchUser", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AuditV1alpha2" + ] + } + } + }, + "definitions": { + "aboutDeveloper": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "aboutGProductVersion": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "aboutListDevelopersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/aboutDeveloper" + } + } + } + }, + "aboutListGProductVersionsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/aboutGProductVersion" + } + } + } + }, + "aboutListOpenSourcesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/aboutOpenSource" + } + }, + "pagination": { + "$ref": "#/definitions/aboutPagination" + } + } + }, + "aboutOpenSource": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "开源软件名称" + }, + "license": { + "type": "string", + "title": "开源协议" + } + } + }, + "aboutPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "apiHttpBody": { + "type": "object", + "properties": { + "contentType": { + "type": "string", + "description": "The HTTP Content-Type header value specifying the content type of the body." + }, + "data": { + "type": "string", + "format": "byte", + "description": "The HTTP request/response body as raw binary." + }, + "extensions": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + }, + "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs." + } + }, + "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." + }, + "auditAuditInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "auditName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "resourceName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/auditStatusType" + }, + "user": { + "type": "string" + }, + "client": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "createdAt": { + "type": "string" + } + } + }, + "auditAuthTokenResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "auditCertsResponse": { + "type": "object", + "properties": { + "keys": { + "type": "array", + "items": { + "$ref": "#/definitions/auditKey" + } + } + } + }, + "auditExternalAuditResponse": { + "type": "object" + }, + "auditExternalType": { + "type": "string", + "enum": [ + "loginFailed", + "forgetPassword", + "resetPassword" + ], + "default": "loginFailed" + }, + "auditGetAuditResourceReportResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/auditResourceReport" + } + } + } + }, + "auditGetAuditResponse": { + "type": "object", + "properties": { + "audit": { + "type": "string" + } + } + }, + "auditGetAuditUserReportResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/auditUserReport" + } + } + } + }, + "auditGetAutoClearAuditTimeResponse": { + "type": "object", + "properties": { + "kubeDays": { + "type": "integer", + "format": "int32" + }, + "ghippoDays": { + "type": "integer", + "format": "int32" + } + } + }, + "auditGetLimitRangeTimeResponse": { + "type": "object", + "properties": { + "day": { + "type": "integer", + "format": "int32" + } + } + }, + "auditKey": { + "type": "object", + "properties": { + "kid": { + "type": "string" + }, + "kty": { + "type": "string" + }, + "e": { + "type": "string" + }, + "n": { + "type": "string" + }, + "alg": { + "type": "string" + }, + "use": { + "type": "string" + } + } + }, + "auditListAuditResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/auditAuditInfo" + } + }, + "pagination": { + "$ref": "#/definitions/auditPagination" + } + } + }, + "auditPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "auditResourceReport": { + "type": "object", + "properties": { + "ResourceType": { + "type": "string" + }, + "EventName": { + "type": "string" + }, + "Count": { + "type": "integer", + "format": "int32" + } + } + }, + "auditSearchType": { + "type": "string", + "enum": [ + "fuzzy", + "exact" + ], + "default": "fuzzy" + }, + "auditStatusType": { + "type": "string", + "enum": [ + "all", + "succeeded", + "failed" + ], + "default": "all" + }, + "auditUserReport": { + "type": "object", + "properties": { + "UserName": { + "type": "string" + }, + "TotalCount": { + "type": "integer", + "format": "int32" + }, + "SuccessCount": { + "type": "integer", + "format": "int32" + }, + "FailedCount": { + "type": "integer", + "format": "int32" + } + } + }, + "auditv2ClearAuditsRequest": { + "type": "object", + "properties": { + "isKube": { + "type": "boolean" + }, + "days": { + "type": "integer", + "format": "int32" + } + } + }, + "auditv2ClearAuditsResponse": { + "type": "object" + }, + "auditv2SearchType": { + "type": "string", + "enum": [ + "fuzzy", + "exact" + ], + "default": "fuzzy" + }, + "auditv2SetAutoClearAuditsRequest": { + "type": "object", + "properties": { + "isKube": { + "type": "boolean" + }, + "days": { + "type": "integer", + "format": "int32" + } + } + }, + "auditv2SetAutoClearAuditsResponse": { + "type": "object" + }, + "auditv2StatusType": { + "type": "string", + "enum": [ + "all", + "succeeded", + "failed" + ], + "default": "all" + }, + "clientClientInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "redirectUris": { + "type": "array", + "items": { + "type": "string" + } + }, + "secret": { + "type": "string" + }, + "baseUrl": { + "type": "string" + } + } + }, + "clientCreateClientRequest": { + "type": "object", + "properties": { + "clientId": { + "type": "string" + } + } + }, + "clientCreateClientResponse": { + "type": "object" + }, + "clientDeleteClientResponse": { + "type": "object" + }, + "clientGetClientResponse": { + "type": "object", + "properties": { + "client": { + "$ref": "#/definitions/clientClientInfo" + } + } + }, + "clientListClientsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/clientClientInfo" + } + }, + "pagination": { + "$ref": "#/definitions/clientPagination" + } + } + }, + "clientPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "clientUpdateClientResponse": { + "type": "object" + }, + "currentuserAccessToken": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "expiredAt": { + "type": "string" + } + } + }, + "currentuserCreateAccessTokenRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "expiredAt": { + "type": "string" + } + } + }, + "currentuserCreateAccessTokenResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "currentuserDeleteAccessTokenResponse": { + "type": "object" + }, + "currentuserGetGlobalPermissionsResponse": { + "type": "object", + "properties": { + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/currentuserGlobalPermission" + } + } + } + }, + "currentuserGetUserResponse": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "username": { + "type": "string" + }, + "email": { + "type": "string" + }, + "locale": { + "type": "string" + } + } + }, + "currentuserGlobalPermission": { + "type": "string", + "enum": [ + "Unknown", + "ListUser", + "CreateUser", + "UpdateUser", + "DeleteUser", + "AuthorizeUser", + "ListGroup", + "CreateGroup", + "UpdateGroup", + "DeleteGroup", + "UpdateGroupUser", + "AuthorizeGroup", + "GetRole", + "GetLdap", + "CreateLdap", + "UpdateLdap", + "DeleteLdap", + "GetIdp", + "CreateIdp", + "UpdateIdp", + "DeleteIdp", + "GetAudit", + "DeleteAudit", + "GetSecurityPolicy", + "UpdateSecurityPolicy", + "GetSMTP", + "UpdateSMTP", + "GetAppearance", + "UpdateAppearance", + "GetLicense", + "UpdateLicense", + "DeleteLicense", + "GetWorkspace", + "GetAboutPlatform" + ], + "default": "Unknown" + }, + "currentuserListAccessTokensResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/currentuserAccessToken" + } + } + } + }, + "currentuserUpdateEmailRequest": { + "type": "object", + "properties": { + "email": { + "type": "string" + } + } + }, + "currentuserUpdateEmailResponse": { + "type": "object" + }, + "currentuserUpdateLanguageRequest": { + "type": "object", + "properties": { + "locale": { + "type": "string" + } + } + }, + "currentuserUpdateLanguageResponse": { + "type": "object" + }, + "currentuserUpdatePasswordRequest": { + "type": "object", + "properties": { + "password": { + "type": "string" + } + } + }, + "currentuserUpdatePasswordResponse": { + "type": "object" + }, + "gproductGProduct": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "uiAssetsUrl": { + "type": "string" + }, + "needImportLicense": { + "type": "boolean" + } + } + }, + "gproductListGProductsResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/gproductGProduct" + } + } + } + }, + "gproductlicenseDeleteProductLicensesResponse": { + "type": "object" + }, + "gproductlicenseGProductLicense": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "module": { + "type": "string" + }, + "level": { + "type": "string" + }, + "status": { + "type": "string" + }, + "expiredAt": { + "type": "string" + } + } + }, + "gproductlicenseGProductLicenseInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "module": { + "type": "string" + }, + "licenseKey": { + "type": "string" + }, + "licenseLevel": { + "type": "string" + }, + "physicalUsedCpu": { + "type": "string" + }, + "physicalMaxCpu": { + "type": "string" + }, + "virtualUsedCpu": { + "type": "string" + }, + "virtualMaxCpu": { + "type": "string" + }, + "expiredAt": { + "type": "string" + }, + "usedNode": { + "type": "string" + }, + "maxNode": { + "type": "string" + } + } + }, + "gproductlicenseGetGProductLicenseYamlResponse": { + "type": "object", + "properties": { + "yaml": { + "type": "string" + } + } + }, + "gproductlicenseGetGProductLicensesESNResponse": { + "type": "object", + "properties": { + "esn": { + "type": "string" + } + } + }, + "gproductlicenseGetGProductLicensesOverQuotaResponse": { + "type": "object", + "properties": { + "licenses": { + "type": "array", + "items": { + "$ref": "#/definitions/gproductlicenseGProductLicense" + } + } + } + }, + "gproductlicenseGetGProductLicensesResponse": { + "type": "object", + "properties": { + "license": { + "$ref": "#/definitions/gproductlicenseGProductLicenseInfo" + } + } + }, + "gproductlicenseListGProductLicensesResponse": { + "type": "object", + "properties": { + "licenses": { + "type": "array", + "items": { + "$ref": "#/definitions/gproductlicenseGProductLicense" + } + } + } + }, + "gproductlicenseUpdateGProductLicensesRequest": { + "type": "object", + "properties": { + "yaml": { + "type": "string" + } + } + }, + "gproductlicenseUpdateGProductLicensesResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "licenses": { + "type": "array", + "items": { + "$ref": "#/definitions/gproductlicenseGProductLicense" + } + } + } + }, + "groupAddUserToGroupResponse": { + "type": "object" + }, + "groupCreateGroupRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "groupCreateGroupResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, + "groupDeleteGroupResponse": { + "type": "object" + }, + "groupDeleteUserFromGroupResponse": { + "type": "object" + }, + "groupGetGroupResponse": { + "type": "object", + "properties": { + "group": { + "$ref": "#/definitions/groupGroupInfo" + } + } + }, + "groupGroupInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "userCount": { + "type": "integer", + "format": "int64" + }, + "description": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "canAuthorize": { + "type": "boolean" + } + } + }, + "groupGroupMembersResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/groupPagination" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/groupUser" + } + } + } + }, + "groupGroupSubject": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "roleId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "subjectName": { + "type": "string" + } + } + }, + "groupListGroupRolesResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/groupPagination" + }, + "authorizedCount": { + "type": "integer", + "format": "int64" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/groupRoleInfo" + } + } + } + }, + "groupListGroupSubjectResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/groupPagination" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/groupGroupSubject" + } + } + } + }, + "groupListGroupsResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/groupPagination" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/groupGroupInfo" + } + } + } + }, + "groupPagination": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "groupRoleInfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "authorized": { + "type": "boolean" + } + } + }, + "groupUpdateGroupResponse": { + "type": "object" + }, + "groupUpdateGroupRolesResponse": { + "type": "object" + }, + "groupUser": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "description": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + } + }, + "idpClientAuthentications": { + "type": "string", + "enum": [ + "client_secret_post", + "client_secret_basic", + "client_secret_jwt", + "private_key_jwt" + ], + "default": "client_secret_post" + }, + "idpCreateIDPRequest": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "title": "string id = 1;\nstring alias = 1 [(validate.rules).string.min_len = 1];" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "clientAuthentications": { + "$ref": "#/definitions/idpClientAuthentications" + }, + "providerId": { + "$ref": "#/definitions/idpProviderType" + }, + "authorizationUrl": { + "type": "string", + "title": "bool enabled = 6;" + }, + "userInfoUrl": { + "type": "string" + }, + "tokenUrl": { + "type": "string" + }, + "logoutUrl": { + "type": "string" + }, + "enableAutoLinkFlow": { + "type": "boolean" + } + } + }, + "idpCreateIDPResponse": { + "type": "object" + }, + "idpDeleteIDPResponse": { + "type": "object" + }, + "idpGetIDPResponse": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "title": "string id = 1;\nstring alias = 1;" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "clientAuthentications": { + "$ref": "#/definitions/idpClientAuthentications" + }, + "providerId": { + "$ref": "#/definitions/idpProviderType" + }, + "authorizationUrl": { + "type": "string", + "title": "bool enabled = 6;" + }, + "userInfoUrl": { + "type": "string" + }, + "tokenUrl": { + "type": "string" + }, + "logoutUrl": { + "type": "string" + }, + "enableAutoLinkFlow": { + "type": "boolean" + } + } + }, + "idpGetRedirectUrlResponse": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + }, + "idpProviderType": { + "type": "string", + "enum": [ + "oidc" + ], + "default": "oidc" + }, + "idpUpdateIDPRequest": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "title": "string alias = 1 [(validate.rules).string.min_len = 1];" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "clientAuthentications": { + "$ref": "#/definitions/idpClientAuthentications" + }, + "providerId": { + "$ref": "#/definitions/idpProviderType" + }, + "authorizationUrl": { + "type": "string", + "title": "bool enabled = 7;" + }, + "userInfoUrl": { + "type": "string" + }, + "tokenUrl": { + "type": "string" + }, + "logoutUrl": { + "type": "string" + }, + "enableAutoLinkFlow": { + "type": "boolean" + } + } + }, + "idpUpdateIDPResponse": { + "type": "object" + }, + "ldapCreateLdapGroupResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, + "ldapCreateLdapRequest": { + "type": "object", + "properties": { + "vendor": { + "type": "string", + "title": "LDAP vendor (provider), only is other" + }, + "startTls": { + "type": "string", + "description": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling." + }, + "ldapProtocol": { + "type": "string" + }, + "ldapHost": { + "type": "string" + }, + "usersDn": { + "type": "string", + "title": "Full DN of LDAP tree where your users are. This DN is the parent of LDAP users.\nIt could be for example 'ou=users,dc=example,dc=com' assuming that your typical user will have DN like 'uid=john,ou=users,dc=example,dc=com'" + }, + "bindDn": { + "type": "string", + "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server" + }, + "bindCredential": { + "type": "string", + "description": "Password of LDAP admin." + }, + "userObjectClasses": { + "type": "string", + "description": "All values of LDAP objectClass attribute for users in LDAP divided by comma.\nFor example: 'inetOrgPerson, organizationalPerson' .\nNewly created Keycloak users will be written to LDAP with all those object classes and existing LDAP user records are found just if they contain all those object classes." + }, + "usernameLdapAttribute": { + "type": "string", + "title": "Name of LDAP attribute, which is mapped as Keycloak username. For many LDAP server vendors it can be 'uid'.\nFor Active directory it can be 'sAMAccountName' or 'cn'.\nThe attribute should be filled for all LDAP user records you want to import from LDAP to Keycloak" + }, + "fullSyncPeriod": { + "type": "string", + "title": "Period for full synchronization in seconds: -1 手动同步" + }, + "rdnLdapAttribute": { + "type": "string", + "description": "Name of the LDAP attribute, which is used as RDN (top attribute) of typical user DN.\nUsually it's the same as the Username LDAP attribute, however it is not required.\nFor example for Active directory, it is common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'." + }, + "uuidLdapAttribute": { + "type": "string", + "description": "Name of the LDAP attribute, which is used as a unique object identifier (UUID) for objects in LDAP.\nFor many LDAP server vendors, it is 'entryUUID'; however some are different.\nFor example, for Active directory it should be 'objectGUID'.\nIf your LDAP server does not support the notion of UUID, you can use any other attribute that is supposed to be unique among LDAP users in tree.\nFor example 'uid' or 'entryDN'." + }, + "editMode": { + "type": "string", + "description": "READ_ONLY is a read-only LDAP store.\nWRITABLE means data will be synced back to LDAP on demand." + }, + "readTimeout": { + "type": "string", + "description": "LDAP read timeout in milliseconds. This timeout applies for LDAP read operations." + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "ldapCreateLdapResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, + "ldapDeleteLdapGroupResponse": { + "type": "object" + }, + "ldapDeleteLdapResponse": { + "type": "object" + }, + "ldapGetLdapGroupResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "groupDn": { + "type": "string" + }, + "groupObjectClasses": { + "type": "string" + }, + "groupNameLdapAttribute": { + "type": "string" + } + } + }, + "ldapGetLdapResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "vendor": { + "type": "string" + }, + "startTls": { + "type": "string" + }, + "ldapProtocol": { + "type": "string" + }, + "ldapHost": { + "type": "string" + }, + "usersDn": { + "type": "string" + }, + "bindDn": { + "type": "string" + }, + "bindCredential": { + "type": "string" + }, + "userObjectClasses": { + "type": "string" + }, + "usernameLdapAttribute": { + "type": "string" + }, + "fullSyncPeriod": { + "type": "string" + }, + "rdnLdapAttribute": { + "type": "string" + }, + "uuidLdapAttribute": { + "type": "string" + }, + "editMode": { + "type": "string" + }, + "readTimeout": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "ldapSyncLdapGroupsResponse": { + "type": "object", + "properties": { + "ignored": { + "type": "boolean" + }, + "added": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "integer", + "format": "int32" + }, + "removed": { + "type": "integer", + "format": "int32" + }, + "failed": { + "type": "integer", + "format": "int32" + }, + "status": { + "type": "string" + } + } + }, + "ldapSyncUsersResponse": { + "type": "object", + "properties": { + "ignored": { + "type": "boolean" + }, + "added": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "integer", + "format": "int32" + }, + "removed": { + "type": "integer", + "format": "int32" + }, + "failed": { + "type": "integer", + "format": "int32" + }, + "status": { + "type": "string" + } + } + }, + "ldapTestLdapAuthenticationRequest": { + "type": "object", + "properties": { + "bindDn": { + "type": "string", + "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server" + }, + "bindCredential": { + "type": "string", + "description": "Password of LDAP admin." + }, + "connectionUrl": { + "type": "string", + "title": "Connection URL to your LDAP server" + }, + "connectionTimeout": { + "type": "string", + "title": "LDAP Connection Timeout in milliseconds: 选填" + }, + "action": { + "type": "string", + "title": "测试事件类型: 选填, testAuthentication" + }, + "startTls": { + "type": "string", + "title": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling. 选填" + }, + "useTruststoreSpi": { + "type": "string", + "title": "Specifies whether LDAP connection will use the truststore SPI with the truststore configured.\n'Always' means that it will always use it.\n'Never' means that it will not use it.\n'Only for ldaps' means that it will use if your connection URL use ldaps.\n选填" + }, + "componentId": { + "type": "string", + "title": "Ldap id: 选填, uuid. 如果 bind_credential 的值等于 \"**********\", 则此字段是必填参" + } + } + }, + "ldapTestLdapAuthenticationResponse": { + "type": "object" + }, + "ldapTestLdapConnectionRequest": { + "type": "object", + "properties": { + "connectionUrl": { + "type": "string", + "title": "Connection URL to your LDAP server" + }, + "bindDn": { + "type": "string", + "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server: 选填" + }, + "bindCredential": { + "type": "string", + "title": "Password of LDAP admin. 选填" + }, + "connectionTimeout": { + "type": "string", + "title": "LDAP Connection Timeout in milliseconds: 选填" + }, + "action": { + "type": "string", + "title": "测试事件类型: 选填, testConnection" + }, + "startTls": { + "type": "string", + "description": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling." + }, + "useTruststoreSpi": { + "type": "string", + "title": "Specifies whether LDAP connection will use the truststore SPI with the truststore configured.\n'Always' means that it will always use it.\n'Never' means that it will not use it.\n'Only for ldaps' means that it will use if your connection URL use ldaps.\n选填" + }, + "componentId": { + "type": "string", + "title": "Ldap id: 选填, uuid" + } + } + }, + "ldapTestLdapConnectionResponse": { + "type": "object" + }, + "ldapUpdateLdapGroupResponse": { + "type": "object" + }, + "ldapUpdateLdapResponse": { + "type": "object" + }, + "loginLoginGetResponse": { + "type": "object" + }, + "loginLoginPostRequest": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "state": { + "type": "string" + }, + "sessionState": { + "type": "string" + }, + "callbackUrl": { + "type": "string" + } + } + }, + "loginLoginPostResponse": { + "type": "object", + "properties": { + "idToken": { + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "loginLogoutResponse": { + "type": "object" + }, + "loginRefreshTokenRequest": { + "type": "object", + "properties": { + "refreshToken": { + "type": "string" + } + } + }, + "loginRefreshTokenResponse": { + "type": "object", + "properties": { + "idToken": { + "type": "string" + }, + "refreshToken": { + "type": "string" + } + } + }, + "loginpageGetLoginPageInfoResponse": { + "type": "object", + "properties": { + "version": { + "type": "integer", + "format": "int32" + }, + "platformName": { + "type": "string" + }, + "copyright": { + "type": "string" + }, + "tabName": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "favicon": { + "type": "string" + } + } + }, + "loginpageGetLoginPageVersionResponse": { + "type": "object", + "properties": { + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "loginpageResetLoginPageInfoResponse": { + "type": "object" + }, + "loginpageUpdateLoginPageInfoRequest": { + "type": "object", + "properties": { + "platformName": { + "type": "string" + }, + "copyright": { + "type": "string" + }, + "tabName": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "favicon": { + "type": "string" + } + } + }, + "loginpageUpdateLoginPageInfoResponse": { + "type": "object" + }, + "messageDeleteMessagesRequest": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + }, + "messageDeleteMessagesResponse": { + "type": "object" + }, + "messageGetMessageResponse": { + "type": "object", + "properties": { + "message": { + "$ref": "#/definitions/messageMessageInfo" + } + } + }, + "messageGetMessagesCountResponse": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "readTotal": { + "type": "integer", + "format": "int32" + }, + "unreadTotal": { + "type": "integer", + "format": "int32" + } + } + }, + "messageListMessagesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/messageMessageInfo" + } + }, + "pagination": { + "$ref": "#/definitions/messagePagination" + } + } + }, + "messageMessageInfo": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "message": { + "type": "string" + }, + "read": { + "$ref": "#/definitions/messageReadType" + }, + "createdAt": { + "type": "string" + } + } + }, + "messagePagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "messageReadType": { + "type": "string", + "enum": [ + "all", + "read", + "unread" + ], + "default": "all" + }, + "messageSetReadMessagesRequest": { + "type": "object", + "properties": { + "all": { + "type": "boolean" + }, + "ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + }, + "messageSetReadMessagesResponse": { + "type": "object" + }, + "messageToggleUnreadMessageResponse": { + "type": "object", + "properties": { + "message": { + "$ref": "#/definitions/messageMessageInfo" + } + } + }, + "oidcGhippoClientConfigResponse": { + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "groupsClaim": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "userClaim": { + "type": "string" + }, + "clientSecret": { + "type": "string" + } + } + }, + "oidcOIDCLogoutResponse": { + "type": "object" + }, + "oidcOIDCTokenRequest": { + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "grantType": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "code": { + "type": "string", + "title": "string response_type = 4 [(validate.rules).string.min_len = 1];" + }, + "redirectUri": { + "type": "string" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "oidcOIDCTokenResponse": { + "type": "object", + "properties": { + "accessToken": { + "type": "string" + }, + "idToken": { + "type": "string" + }, + "expiresIn": { + "type": "integer", + "format": "int32" + }, + "refreshExpiresIn": { + "type": "integer", + "format": "int32" + }, + "refreshToken": { + "type": "string" + }, + "tokenType": { + "type": "string" + }, + "notBeforePolicy": { + "type": "integer", + "format": "int32" + }, + "sessionState": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "oidcOIDCUserInfoResponse": { + "type": "object", + "properties": { + "sub": { + "type": "string" + }, + "preferredUsername": { + "type": "string" + }, + "email": { + "type": "string" + }, + "locale": { + "type": "string" + } + } + }, + "oidcRedirectFrontendLogoutResponse": { + "type": "object" + }, + "oidcWellKnownResponse": { + "type": "object", + "properties": { + "issuer": { + "type": "string" + }, + "authorizationEndpoint": { + "type": "string" + }, + "tokenEndpoint": { + "type": "string" + }, + "jwksUri": { + "type": "string" + }, + "userinfoEndpoint": { + "type": "string" + }, + "introspectionEndpoint": { + "type": "string" + }, + "idTokenSigningAlgValuesSupported": { + "type": "array", + "items": { + "type": "string" + } + }, + "endSessionEndpoint": { + "type": "string" + } + } + }, + "productnavProductMenu": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "url": { + "type": "string" + }, + "iconUrl": { + "type": "string" + }, + "target": { + "type": "string" + }, + "menus": { + "type": "array", + "items": { + "$ref": "#/definitions/productnavProductMenu" + } + } + } + }, + "productnavProductNavCategory": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "menus": { + "type": "array", + "items": { + "$ref": "#/definitions/productnavProductMenu" + } + } + } + }, + "productnavProductNavResponse": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/definitions/productnavProductNavCategory" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "publishPublishMessageRequest": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "message": { + "type": "string" + }, + "messageUid": { + "type": "string" + } + } + }, + "publishPublishMessageResponse": { + "type": "object" + }, + "roleAuthScope": { + "type": "string", + "enum": [ + "platform", + "folder", + "workspace" + ], + "default": "platform", + "title": "- platform: unknown_auth_scope = 0;" + }, + "roleAuthScopeAllPermissions": { + "type": "object", + "properties": { + "authScope": { + "$ref": "#/definitions/roleAuthScope" + }, + "categoryPerms": { + "type": "array", + "items": { + "$ref": "#/definitions/roleCategoryAllPermissions" + } + } + } + }, + "roleCategory": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "localizedName": { + "type": "string" + } + } + }, + "roleCategoryAllPermissions": { + "type": "object", + "properties": { + "category": { + "$ref": "#/definitions/roleCategory" + }, + "resourcePerms": { + "type": "array", + "items": { + "$ref": "#/definitions/roleResourceAllPermissions" + } + } + } + }, + "roleCategoryPermissions": { + "type": "object", + "properties": { + "category": { + "$ref": "#/definitions/roleCategory" + }, + "resourcePerms": { + "type": "array", + "items": { + "$ref": "#/definitions/roleResourcePermissions" + } + } + } + }, + "roleCheckRoleNameResponse": { + "type": "object", + "properties": { + "exist": { + "type": "boolean" + } + } + }, + "roleCreateRoleRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string", + "title": "string gproduct = 2 [(validate.rules).string = {min_len: 1, max_len: 63}];\nglobalRoleType type = 3;" + }, + "scope": { + "$ref": "#/definitions/roleAuthScope" + }, + "perms": { + "type": "array", + "items": { + "$ref": "#/definitions/rolePermission" + } + } + } + }, + "roleCreateRoleResponse": { + "type": "object" + }, + "roleDeleteRoleResponse": { + "type": "object" + }, + "roleGProduct": { + "type": "object", + "properties": { + "gproduct": { + "type": "string" + }, + "localizedName": { + "type": "string" + } + } + }, + "roleGProductAllPermissions": { + "type": "object", + "properties": { + "gproduct": { + "$ref": "#/definitions/roleGProduct" + }, + "authscopePerms": { + "type": "array", + "items": { + "$ref": "#/definitions/roleAuthScopeAllPermissions" + }, + "title": "map gproduct = 1;" + } + } + }, + "roleGProductPermissions": { + "type": "object", + "properties": { + "gproduct": { + "$ref": "#/definitions/roleGProduct", + "title": "string gproduct = 1;" + }, + "categoryPerms": { + "type": "array", + "items": { + "$ref": "#/definitions/roleCategoryPermissions" + } + } + } + }, + "roleGetGlobalRoleResponse": { + "type": "object", + "properties": { + "role": { + "$ref": "#/definitions/roleGlobalRoleInfo" + } + }, + "title": "to be deprecated after several months" + }, + "roleGetRoleMemberCountResponse": { + "type": "object", + "properties": { + "userCount": { + "type": "integer", + "format": "int32" + }, + "groupCount": { + "type": "integer", + "format": "int32" + } + } + }, + "roleGetRoleResponse": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/roleglobalRoleType" + }, + "description": { + "type": "string" + }, + "scope": { + "$ref": "#/definitions/roleAuthScope" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "gproductPerms": { + "type": "array", + "items": { + "$ref": "#/definitions/roleGProductPermissions" + } + } + } + }, + "roleGlobalRoleInfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/roleglobalRoleType" + }, + "description": { + "type": "string" + }, + "composite": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "title": "to be deprecated after several months" + }, + "roleListAllPermissionsResponse": { + "type": "object", + "properties": { + "gproductPerms": { + "type": "array", + "items": { + "$ref": "#/definitions/roleGProductAllPermissions" + } + } + } + }, + "roleListFolderRoleNamesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleRoleName" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + } + }, + "roleListFolderRolesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleWorkspaceRoleInfo" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + }, + "title": "to be deprecated after several months" + }, + "roleListGlobalRoleSubjectsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleSubject" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + }, + "title": "to be deprecated after several months" + }, + "roleListGlobalRolesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleGlobalRoleInfo" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + }, + "title": "to be deprecated after several months" + }, + "roleListMembersByPlatformRoleResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleMember" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + } + }, + "roleListMembersFoldersByFolderRoleResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleMemberFolder" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + } + }, + "roleListMembersWorkspacesByWorkspaceRoleResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleMemberWorkspace" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + } + }, + "roleListPlatformRoleNamesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleRoleName" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + } + }, + "roleListRolesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleRoleInfo" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + } + }, + "roleListWorkspaceRoleNamesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleRoleName" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + } + }, + "roleListWorkspaceRolesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/roleWorkspaceRoleInfo" + } + }, + "pagination": { + "$ref": "#/definitions/rolePagination" + } + }, + "title": "to be deprecated after several months" + }, + "roleMember": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "roleMemberFolder": { + "type": "object", + "properties": { + "memberName": { + "type": "string" + }, + "memberType": { + "type": "string" + }, + "folderId": { + "type": "integer", + "format": "int32" + }, + "folderAlias": { + "type": "string" + }, + "memberId": { + "type": "string" + } + } + }, + "roleMemberWorkspace": { + "type": "object", + "properties": { + "memberName": { + "type": "string" + }, + "memberType": { + "type": "string" + }, + "workspaceId": { + "type": "integer", + "format": "int32" + }, + "workspaceAlias": { + "type": "string" + }, + "memberId": { + "type": "string" + } + } + }, + "rolePagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "rolePermission": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "gproduct": { + "type": "string" + } + } + }, + "roleQueryAuthScope": { + "type": "string", + "enum": [ + "query_all_auth_scope", + "query_platform", + "query_folder", + "query_workspace" + ], + "default": "query_all_auth_scope" + }, + "roleQueryRoleType": { + "type": "string", + "enum": [ + "query_all_role_type", + "query_system", + "query_custom" + ], + "default": "query_all_role_type" + }, + "roleResourceAction": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "localizedName": { + "type": "string" + } + } + }, + "roleResourceActionWithDependency": { + "type": "object", + "properties": { + "action": { + "$ref": "#/definitions/roleResourceAction" + }, + "dependPerms": { + "type": "array", + "items": { + "$ref": "#/definitions/rolePermission" + } + } + } + }, + "roleResourceAllPermissions": { + "type": "object", + "properties": { + "resourceType": { + "$ref": "#/definitions/roleResourceType" + }, + "actions": { + "type": "array", + "items": { + "$ref": "#/definitions/roleResourceActionWithDependency" + } + } + } + }, + "roleResourcePermissions": { + "type": "object", + "properties": { + "resourceType": { + "$ref": "#/definitions/roleResourceType" + }, + "actions": { + "type": "array", + "items": { + "$ref": "#/definitions/roleResourceAction" + } + } + } + }, + "roleResourceType": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "localizedName": { + "type": "string" + } + } + }, + "roleRoleInfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/roleglobalRoleType" + }, + "description": { + "type": "string" + }, + "scope": { + "$ref": "#/definitions/roleAuthScope" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + } + }, + "roleRoleName": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "authScope": { + "$ref": "#/definitions/roleAuthScope" + }, + "description": { + "type": "string" + } + } + }, + "roleSubject": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "type": { + "type": "string" + }, + "subjectName": { + "type": "string" + } + }, + "title": "to be deprecated after several months" + }, + "roleUpdateRoleResponse": { + "type": "object" + }, + "roleWorkspaceRoleInfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string" + }, + "authScope": { + "type": "string" + }, + "gproduct": { + "type": "string" + } + }, + "title": "to be deprecated after several months" + }, + "roleglobalRoleType": { + "type": "string", + "enum": [ + "system", + "custom" + ], + "default": "system", + "title": "TODO: 改为 RoleType" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "securitypolicyGetAccountLockoutPolicyResponse": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxLoginFailures": { + "type": "integer", + "format": "int32" + }, + "maxFailuresWaitSeconds": { + "type": "integer", + "format": "int32" + }, + "failureResetSeconds": { + "type": "integer", + "format": "int32" + } + } + }, + "securitypolicyGetLogoutPolicyResponse": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "securitypolicyGetPasswordPolicyResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/securitypolicyPasswordPolicyInfo" + } + } + } + }, + "securitypolicyGetSessionTimeoutResponse": { + "type": "object", + "properties": { + "timeoutSeconds": { + "type": "integer", + "format": "int32" + } + } + }, + "securitypolicyPasswordPolicyInfo": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/securitypolicyPasswordPolicyType" + }, + "value": { + "type": "string" + } + } + }, + "securitypolicyPasswordPolicyType": { + "type": "string", + "enum": [ + "MinimumLengthLabel", + "NotRecentlyUsedLabel", + "NotUsernameLabel", + "NotEmailLabel", + "DigitsLabel", + "UppercaseCharactersLabel", + "LowercaseCharactersLabel", + "SpecialCharactersLabel", + "ExpirePasswordLabel" + ], + "default": "MinimumLengthLabel" + }, + "securitypolicySetAccountLockoutPolicyRequest": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "maxLoginFailures": { + "type": "integer", + "format": "int32", + "title": "failures count >= 0" + }, + "maxFailuresWaitSeconds": { + "type": "integer", + "format": "int32", + "title": "Lock time >= 60s" + }, + "failureResetSeconds": { + "type": "integer", + "format": "int32", + "title": "reset time >= 60s" + } + } + }, + "securitypolicySetAccountLockoutPolicyResponse": { + "type": "object" + }, + "securitypolicySetLogoutPolicyRequest": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "securitypolicySetLogoutPolicyResponse": { + "type": "object" + }, + "securitypolicySetPasswordPolicyRequest": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/securitypolicyPasswordPolicyInfo" + } + } + } + }, + "securitypolicySetPasswordPolicyResponse": { + "type": "object" + }, + "securitypolicySetSessionTimeoutRequest": { + "type": "object", + "properties": { + "timeoutSeconds": { + "type": "integer", + "format": "int32", + "title": "timeout > 3600s" + } + } + }, + "securitypolicySetSessionTimeoutResponse": { + "type": "object" + }, + "smtpsettingGetSmtpServerResponse": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "ssl": { + "type": "boolean" + }, + "starttls": { + "type": "boolean" + }, + "from": { + "type": "string" + }, + "user": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "smtpsettingSetSmtpServerRequest": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "ssl": { + "type": "boolean" + }, + "starttls": { + "type": "boolean" + }, + "from": { + "type": "string" + }, + "user": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "smtpsettingSetSmtpServerResponse": { + "type": "object" + }, + "smtpsettingSmtpConnTestRequest": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "ssl": { + "type": "boolean" + }, + "starttls": { + "type": "boolean" + }, + "from": { + "type": "string" + }, + "to": { + "type": "string" + }, + "user": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "smtpsettingSmtpConnTestResponse": { + "type": "object" + }, + "themeGetLoginThemeConfigResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "css": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + } + }, + "themeGetThemeConfigResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "css": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + } + }, + "themeResetLoginThemeConfigResponse": { + "type": "object" + }, + "themeResetThemeConfigResponse": { + "type": "object" + }, + "themeSetLoginThemeConfigRequest": { + "type": "object", + "properties": { + "css": { + "type": "string" + } + } + }, + "themeSetLoginThemeConfigResponse": { + "type": "object" + }, + "themeSetThemeConfigRequest": { + "type": "object", + "properties": { + "css": { + "type": "string" + } + } + }, + "themeSetThemeConfigResponse": { + "type": "object" + }, + "topnavResetTopNavResponse": { + "type": "object" + }, + "topnavSetTopNavRequest": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "favicon": { + "type": "string" + }, + "tabName": { + "type": "string" + } + } + }, + "topnavSetTopNavResponse": { + "type": "object" + }, + "topnavTopNavResponse": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "favicon": { + "type": "string" + }, + "tabName": { + "type": "string" + } + } + }, + "userAccessToken": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "expiredAt": { + "type": "string" + } + } + }, + "userCheckUserResponse": { + "type": "object", + "properties": { + "existed": { + "type": "boolean" + } + } + }, + "userCreateUserAccessTokenResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "userCreateUserRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "password": { + "type": "string" + }, + "description": { + "type": "string" + }, + "temporary": { + "type": "boolean" + } + } + }, + "userCreateUserResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, + "userDeleteUserAccessTokenResponse": { + "type": "object" + }, + "userDeleteUserResponse": { + "type": "object" + }, + "userGetUserResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "description": { + "type": "string" + }, + "firstname": { + "type": "string" + }, + "lastname": { + "type": "string" + }, + "source": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "lastLoginAt": { + "type": "string" + }, + "canAuthorize": { + "type": "boolean" + } + } + }, + "userGroup": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "userListUserAccessTokensResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/userAccessToken" + } + } + } + }, + "userListUserGroupsResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/userPagination" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/userGroup" + } + } + } + }, + "userListUserRolesResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/userPagination" + }, + "authorizedCount": { + "type": "integer", + "format": "int64" + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/definitions/userRoleInfo" + } + } + } + }, + "userListUserSubjectResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/userPagination" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/userUserSubject" + } + } + } + }, + "userListUsersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/userGetUserResponse" + } + }, + "pagination": { + "$ref": "#/definitions/userPagination" + } + } + }, + "userPagination": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "userRoleInfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "authorized": { + "type": "boolean" + } + } + }, + "userSetUserPasswordResponse": { + "type": "object" + }, + "userUpdateUserResponse": { + "type": "object" + }, + "userUpdateUserRolesResponse": { + "type": "object" + }, + "userUserSubject": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "subjectName": { + "type": "string" + } + } + }, + "workspaceAuthorizeResponse": { + "type": "object" + }, + "workspaceBindExclusiveResourceToWorkspaceResponse": { + "type": "object" + }, + "workspaceBindSharedResourceAndSetQuotaHardToWorkspaceResponse": { + "type": "object" + }, + "workspaceBindSharedResourceToWorkspaceResponse": { + "type": "object" + }, + "workspaceClusterStatus": { + "type": "string", + "enum": [ + "StatusUnknown", + "StatusRunning", + "StatusNotRunning" + ], + "default": "StatusUnknown" + }, + "workspaceCreateFolderRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "parentFolderId": { + "type": "integer", + "format": "int32" + } + } + }, + "workspaceCreateFolderResponse": { + "type": "object", + "properties": { + "folderId": { + "type": "integer", + "format": "int32" + } + } + }, + "workspaceCreateWorkspaceRequest": { + "type": "object", + "properties": { + "alias": { + "type": "string", + "title": "string name = 1 [(validate.rules).string.max_len = 64];" + }, + "parentFolderId": { + "type": "integer", + "format": "int32" + } + } + }, + "workspaceCreateWorkspaceResponse": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32" + } + } + }, + "workspaceDeauthorizeResponse": { + "type": "object" + }, + "workspaceDeleteFolderResponse": { + "type": "object" + }, + "workspaceDeleteWorkspaceResponse": { + "type": "object" + }, + "workspaceFolderInfo": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "alias": { + "type": "string" + } + } + }, + "workspaceFolderListGroupsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceGroup" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceFolderListPermissionsResponse": { + "type": "object", + "properties": { + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceFolderPermission" + } + } + } + }, + "workspaceFolderListUsersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceUser" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceFolderPermission": { + "type": "string", + "enum": [ + "Unknown", + "CreateFolder", + "UpdateFolder", + "GetFolder", + "DeleteFolder", + "AuthorizeFolder", + "CreateWorkspace", + "UpdateWorkspace", + "GetWorkspace", + "DeleteWorkspace", + "AuthorizeWorkspace", + "ResourceBindingWorkspace", + "UpdateResourceQuotaWorkspace" + ], + "default": "Unknown" + }, + "workspaceFolderTree": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "isWorkspace": { + "type": "boolean" + }, + "parentId": { + "type": "integer", + "format": "int32" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceFolderTree" + } + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceFolderPermission" + } + }, + "resourceKind": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceWorkspaceResourceKindEnum" + } + } + } + }, + "workspaceGetFolderResponse": { + "type": "object", + "properties": { + "folder": { + "$ref": "#/definitions/workspaceFolderInfo" + } + } + }, + "workspaceGetWorkspaceResponse": { + "type": "object", + "properties": { + "workspace": { + "$ref": "#/definitions/workspaceWorkspaceInfo" + } + } + }, + "workspaceGetWorkspaceSharedResourceQuotaResponse": { + "type": "object", + "properties": { + "setting": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allocatable": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "used": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "workspaceGroup": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "userCount": { + "type": "integer", + "format": "int64" + }, + "description": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "canAuthorize": { + "type": "boolean" + }, + "authorized": { + "type": "boolean" + } + } + }, + "workspaceListAvailableExclusiveResourcesByWorkspaceResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceResourceInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceListAvailableSharedResourcesByWorkspaceResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceResourceInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceListExclusiveResourceTypesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "workspaceListExclusiveResourcesByWorkspaceResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceWorkspacesResourceInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceListFolderTreeResponse": { + "type": "object", + "properties": { + "folderTree": { + "$ref": "#/definitions/workspaceFolderTree" + }, + "defaultId": { + "type": "integer", + "format": "int32" + } + } + }, + "workspaceListFoldersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceFolderInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceListMembersRolesByFolderResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceMemberRoleFolderInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceListMembersRolesByWorkspaceResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceMemberRoleWorkspaceInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceListResourceQuotaTypesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "workspaceListSharedResourceTypesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "workspaceListSharedResourcesByWorkspaceResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceWorkspacesResourceInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceListWorkspacesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/workspaceWorkspaceInfo" + } + }, + "pagination": { + "$ref": "#/definitions/workspacePagination" + } + } + }, + "workspaceMemberRoleFolderInfo": { + "type": "object", + "properties": { + "memberName": { + "type": "string" + }, + "memberType": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "folderId": { + "type": "integer", + "format": "int32" + }, + "memberId": { + "type": "string" + } + } + }, + "workspaceMemberRoleWorkspaceInfo": { + "type": "object", + "properties": { + "memberName": { + "type": "string" + }, + "memberType": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "workspaceId": { + "type": "integer", + "format": "int32" + }, + "memberId": { + "type": "string" + } + } + }, + "workspacePagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "workspaceReauthorizeResponse": { + "type": "object" + }, + "workspaceResourceInfo": { + "type": "object", + "properties": { + "resourceName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "gproduct": { + "type": "string" + }, + "resourceScope": { + "type": "string" + }, + "bound": { + "type": "boolean" + } + } + }, + "workspaceSetQuotaHardForWorkspaceSharedResourceRequest": { + "type": "object", + "properties": { + "workspaceResourceId": { + "type": "integer", + "format": "int32" + }, + "quotaHard": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "workspaceSetQuotaHardForWorkspaceSharedResourceResponse": { + "type": "object" + }, + "workspaceUnbindResourceFromWorkspaceResponse": { + "type": "object" + }, + "workspaceUpdateFolderResponse": { + "type": "object" + }, + "workspaceUpdateQuotaCheckRequest": { + "type": "object", + "properties": { + "resourceName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "gproduct": { + "type": "string" + }, + "resourceScope": { + "type": "string", + "title": "cluster 资源 resource_scope 为空" + }, + "workspaceId": { + "type": "integer", + "format": "int32" + }, + "quotaHard": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "workspaceUpdateQuotaCheckResponse": { + "type": "object", + "properties": { + "passed": { + "type": "boolean" + }, + "reason": { + "type": "string" + } + } + }, + "workspaceUser": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "description": { + "type": "string" + }, + "firstname": { + "type": "string" + }, + "lastname": { + "type": "string" + }, + "source": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "canAuthorize": { + "type": "boolean" + }, + "authorized": { + "type": "boolean" + } + } + }, + "workspaceWorkspaceInfo": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "alias": { + "type": "string" + } + } + }, + "workspaceWorkspaceResourceKindEnum": { + "type": "string", + "enum": [ + "resource_group", + "shared_resource", + "registry" + ], + "default": "resource_group" + }, + "workspaceWorkspacesResourceInfo": { + "type": "object", + "properties": { + "resourceName": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "resourceScope": { + "type": "string" + }, + "gproduct": { + "type": "string" + }, + "workspaceId": { + "type": "integer", + "format": "int32" + }, + "workspaceResourceId": { + "type": "integer", + "format": "int32" + }, + "module": { + "type": "string" + }, + "clusterStatus": { + "$ref": "#/definitions/workspaceClusterStatus" + } + } + } + } +} diff --git a/openapi/ghippo/v0.15.0.md b/openapi/ghippo/v0.15.0.md new file mode 100644 index 00000000..451fb85e --- /dev/null +++ b/openapi/ghippo/v0.15.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/images/index.png b/openapi/images/index.png new file mode 100644 index 0000000000000000000000000000000000000000..011481dfa8e51d8a76719d3f991148b5141567c0 GIT binary patch literal 369155 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

(GDy) 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%0A{y4r~IeI2bOq42v5_!9S4sUi0?kY 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 Bv_1d; literal 0 HcmV?d00001 diff --git a/openapi/images/middleware.png b/openapi/images/middleware.png new file mode 100644 index 0000000000000000000000000000000000000000..aeb32f9c701cc6a82002c249551cdc3199a58bd0 GIT binary patch literal 10904 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

t8)7F$o+Z5tquVpFTypj(e$ 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 + +- :fontawesome-solid-user-group: **[全局管理 OpenAPI](./ghippo/v0.15.0.md)** +- :octicons-container-16: **容器管理 OpenAPI** +- :material-monitor-dashboard: **[可观测性 OpenAPI](./insight/v0.16.0-alpha1.md)** +- :material-microsoft-azure-devops: **应用工作台 OpenAPI** +- :material-cloud-check: **多云编排 OpenAPI** +- :material-engine: **微服务引擎 OpenAPI** +- :material-table-refresh: **[服务网格 OpenAPI](./mspider/v0.105.1.md)** +- :material-middleware: **[中间件 OpenAPI](./midware.md)** +- :material-warehouse: **镜像仓库 OpenAPI** +- :material-dot-net: **[网络 OpenAPI](./spidernet/v0.5.0.md)** +- :floppy_disk: **存储 OpenAPI** +- :material-more: **更多 OpenAPI** + + + +!!! tip + + 蓝色文字表示该模块已添加 OpenAPI 文档。参阅 [OpenAPI 制作流程](./api-doc-flow.md)。 + +![OpenAPI and Swagger](./images/index.png) diff --git a/openapi/insight/v0.16.0-alpha1.json b/openapi/insight/v0.16.0-alpha1.json new file mode 100644 index 00000000..e2521f79 --- /dev/null +++ b/openapi/insight/v0.16.0-alpha1.json @@ -0,0 +1,7937 @@ +{ + "swagger": "2.0", + "info": { + "title": "可观测性", + "version": "v0.16.0-alpha1" + }, + "tags": [ + { + "name": "Insight" + }, + { + "name": "FeatureGate" + }, + { + "name": "Alert" + }, + { + "name": "Log" + }, + { + "name": "Metric" + }, + { + "name": "Resource" + }, + { + "name": "Tracing" + }, + { + "name": "ServiceGraph" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/insight.io/v1alpha1/agentinstallparam": { + "post": { + "operationId": "Insight_GetHelmInstallConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1helmInstallConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1helmInstallConfigRequest" + } + } + ], + "tags": [ + "Insight" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/alertcount": { + "get": { + "operationId": "Alert_CountAlert", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1CountAlertResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "resolved", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "targetType", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + }, + { + "name": "target", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "severity", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + { + "name": "start", + "description": "start == 0 means from 1970.01.01", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "end", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "step", + "description": "step unit is minute\nstep == 0 means return total alert count num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "groupByType", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/alerts": { + "get": { + "operationId": "Alert_ListAlerts", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListAlertsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "resolved", + "description": "set resolved to True shows alert histories", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "groupName", + "description": "filter alerts by group name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "ruleName", + "description": "filter alerts by rule name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "description": "filter alerts by cluster name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "filter alerts by namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "severity", + "description": "filter alerts by severity", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + { + "name": "targetType", + "description": "filter alerts by target_type", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + }, + { + "name": "target", + "description": "filter alerts by target", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sorts", + "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- start_at,desc or start_at\n- start_at,asc\n- severity,desc or severity\n- severity,asc\n- rule_name,desc or rule_name\n- rule_name,asc\n\nthe default sort is start_at,desc", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/groups": { + "get": { + "operationId": "Alert_ListGroups", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListGroupsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "builtin", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "name", + "description": "filter group by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "description": "filter alerts by cluster name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "filter alerts by namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sorts", + "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- name,desc or name\n- name,asc\n\nthe default sort is name,asc", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Alert" + ] + }, + "post": { + "operationId": "Alert_CreateGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Group" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1CreateGroupRequest" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/groups/{id}": { + "get": { + "operationId": "Alert_GetGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Group" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "delete": { + "operationId": "Alert_DeleteGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1empty" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "put": { + "summary": "UpdateGroup only can update group description and notify", + "operationId": "Alert_UpdateGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Group" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "notificationTemplate": { + "type": "string" + }, + "receivers": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1groupReceiver" + } + }, + "notifyRepeatConfig": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1repeatConfig" + } + } + } + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/groups/{id}/rules": { + "get": { + "operationId": "Alert_ListGroupRules", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListRulesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "filter rule by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "severity", + "description": "filter rules by severity", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + { + "name": "status", + "description": "filter rules by status", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "FIRING", + "ENABLED" + ], + "default": "UNSPECIFIED" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sorts", + "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- name,desc or name\n- rule_name,asc\n- severity,desc or severity\n- severity,asc\n- status,desc or status\n- status,asc\n- source,desc or source\n- source,asc\n- create_at,desc or create_at\n- create_at,asc\n\nthe default sort is name,asc", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Alert" + ] + }, + "post": { + "operationId": "Alert_AddGroupRule", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Rule" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "required;", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "rule": { + "$ref": "#/definitions/v1alpha1CreateGroupRule" + } + } + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/groups/{id}/rules/{name}": { + "get": { + "operationId": "Alert_GetGroupRule", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Rule" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "required; id is group id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "required; name is rule name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "delete": { + "operationId": "Alert_DeleteGroupRule", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1empty" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "required; id is group id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "required; name is rule name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "put": { + "operationId": "Alert_UpdateGroupRule", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Rule" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "required; id is group id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "required;", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "expr": { + "type": "string" + }, + "thresholdSymbol": { + "type": "string", + "title": "when create rule from metric_tpl,use thresholdSymbol and thresholdNum to\ncomplete the promql" + }, + "thresholdNum": { + "type": "number", + "format": "float" + }, + "duration": { + "type": "string", + "title": "For evaluation interval in time.Duration format,like 30s, 1m, 1h" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "custiomized labels" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "custiomized annotations" + } + } + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/history/clean": { + "put": { + "operationId": "Alert_CleanAlertHistory", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1CleanAlertHistoryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/history/retentionperiod": { + "get": { + "operationId": "Alert_GetAlertHistoryRetentionPeriod", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1AlertHistoryRetentionPeriod" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Alert" + ] + }, + "put": { + "operationId": "Alert_UpdateAlertHistoryRetentionPeriod", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1empty" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1AlertHistoryRetentionPeriod" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/hook": { + "post": { + "operationId": "Alert_AlertHook", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1empty" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1AMHookRequest" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/receivers": { + "get": { + "operationId": "Alert_ListReceivers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListReceiverResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "type", + "description": "filter receivers by type", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "RECEIVER_TYPE_UNSPECIFIED", + "webhook", + "email", + "dingtalk", + "wecom" + ], + "default": "RECEIVER_TYPE_UNSPECIFIED" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sorts", + "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- create_at,desc or create_at\n- create_at,asc\n\nthe default sort is create_at,desc", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "exactSearch", + "description": "exact search by name", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Alert" + ] + }, + "post": { + "operationId": "Alert_CreateReceiver", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ReceiverDataResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1Receiver" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/receivers/test": { + "post": { + "operationId": "Alert_TestReceiver", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1empty" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1Receiver" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/receivers/{name}": { + "get": { + "operationId": "Alert_GetReceiver", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ReceiverDataResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "type", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "RECEIVER_TYPE_UNSPECIFIED", + "webhook", + "email", + "dingtalk", + "wecom" + ], + "default": "RECEIVER_TYPE_UNSPECIFIED" + } + ], + "tags": [ + "Alert" + ] + }, + "delete": { + "operationId": "Alert_DeleteReceiver", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ReceiverDataResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "put": { + "operationId": "Alert_UpdateReceiver", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ReceiverDataResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1alpha1ReceiverType" + }, + "webhook": { + "$ref": "#/definitions/v1alpha1WebhookConfig" + }, + "email": { + "$ref": "#/definitions/v1alpha1EmailConfig" + }, + "wecom": { + "$ref": "#/definitions/v1alpha1WecomConfig" + }, + "dingtalk": { + "$ref": "#/definitions/v1alpha1DingtalkConfig" + }, + "createAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/silences": { + "get": { + "operationId": "Alert_ListSilences", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListSilencesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "expired", + "description": "set \"expired\" to false show silences that vaild for now, otherwise show\nexpired silences", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "post": { + "operationId": "Alert_CreateSilence", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Silence" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1CreateSilenceRequest" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/silences/preview": { + "post": { + "operationId": "Alert_PreviewSilence", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1PreviewSilenceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1PreviewSilenceRequest" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/silences/{id}": { + "get": { + "operationId": "Alert_GetSilence", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Silence" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "delete": { + "operationId": "Alert_DeleteSilence", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1empty" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "put": { + "operationId": "Alert_UpdateSilence", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Silence" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "matches": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1match" + }, + "title": "required; support maxium 100 matches" + }, + "activeTimeInterval": { + "$ref": "#/definitions/v1alpha1timeInterval", + "title": "optional; null means rule always valid" + } + } + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/templates": { + "get": { + "operationId": "Alert_ListTemplates", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListTemplatesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "description": "filter template by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sorts", + "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- update_at,desc or update_at\n- update_at,asc\n\nthe default sort is update_at,desc", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "exactSearch", + "description": "exact search by name", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Alert" + ] + }, + "post": { + "operationId": "Alert_CreateTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Template" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1CreateTemplateRequest" + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/alert/templates/{name}": { + "get": { + "operationId": "Alert_GetTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Template" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "delete": { + "operationId": "Alert_DeleteTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1empty" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Alert" + ] + }, + "put": { + "operationId": "Alert_UpdateTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Template" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "body": { + "$ref": "#/definitions/v1alpha1TemplateBody" + } + } + } + } + ], + "tags": [ + "Alert" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters": { + "get": { + "operationId": "Resource_ListClusters", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListClustersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "showAllCluster", + "description": "show_all_cluster default is false, will only return cluster with\ninsight-agent installed; if set to true, will return all cluster.", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{clusterName}/namespaces/{namespace}/pods/{name}/jvm": { + "post": { + "operationId": "Resource_GetPodJVMInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1PodJVMInfo" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "description": "Required. support cluster name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "required;", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "required;", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "int64" + }, + "end": { + "type": "string", + "format": "int64" + }, + "step": { + "type": "number", + "format": "double" + } + } + } + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/agent": { + "get": { + "operationId": "Resource_GetAgentSummary", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1AgentSummary" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "use cluster_name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/cronjobs": { + "get": { + "operationId": "Resource_ListCronjobs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListCronJobsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter jobs by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter jobs by namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "phase", + "description": "filter jobs by phase\n\n - JOB_STATE_UNSPECIFIED: Job is unspecified.\n - JOB_STATE_WAITING: Waiting for job ready.\n - JOB_STATE_RUNNING: Job is working.\n - JOB_STATE_COMPLETED: Jobs has completed.\n - JOB_STATE_DELETING: Jobs is being deleted.\n - JOB_STATE_FAILED: Jobs is not ready to work .", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "JOB_STATE_UNSPECIFIED", + "JOB_STATE_WAITING", + "JOB_STATE_RUNNING", + "JOB_STATE_COMPLETED", + "JOB_STATE_DELETING", + "JOB_STATE_FAILED" + ], + "default": "JOB_STATE_UNSPECIFIED" + }, + { + "name": "name", + "description": "filter jobs by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/daemonsets": { + "get": { + "operationId": "Resource_ListDaemonsets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListWorkloadsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter workloads by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter workloads by namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "name", + "description": "filter workloads by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "phase", + "description": "filter workloads by phase", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "WORKLOAD_STATE_UNKNOWN", + "WORKLOAD_STATE_RUNNING", + "WORKLOAD_STATE_DELETING", + "WORKLOAD_STATE_NOT_READY", + "WORKLOAD_STATE_STOPPED", + "WORKLOAD_STATE_WAITING" + ], + "default": "WORKLOAD_STATE_UNKNOWN" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/deployments": { + "get": { + "operationId": "Resource_ListDeployments", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListWorkloadsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter workloads by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter workloads by namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "name", + "description": "filter workloads by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "phase", + "description": "filter workloads by phase", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "WORKLOAD_STATE_UNKNOWN", + "WORKLOAD_STATE_RUNNING", + "WORKLOAD_STATE_DELETING", + "WORKLOAD_STATE_NOT_READY", + "WORKLOAD_STATE_STOPPED", + "WORKLOAD_STATE_WAITING" + ], + "default": "WORKLOAD_STATE_UNKNOWN" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/jobs": { + "get": { + "operationId": "Resource_ListJobs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListJobsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter jobs by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter jobs by namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "phase", + "description": "filter jobs by phase\n\n - JOB_STATE_UNSPECIFIED: Job is unspecified.\n - JOB_STATE_WAITING: Waiting for job ready.\n - JOB_STATE_RUNNING: Job is working.\n - JOB_STATE_COMPLETED: Jobs has completed.\n - JOB_STATE_DELETING: Jobs is being deleted.\n - JOB_STATE_FAILED: Jobs is not ready to work .", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "JOB_STATE_UNSPECIFIED", + "JOB_STATE_WAITING", + "JOB_STATE_RUNNING", + "JOB_STATE_COMPLETED", + "JOB_STATE_DELETING", + "JOB_STATE_FAILED" + ], + "default": "JOB_STATE_UNSPECIFIED" + }, + { + "name": "name", + "description": "filter jobs by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces": { + "get": { + "operationId": "Resource_ListNamespaces", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListNamespacesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{name}": { + "get": { + "operationId": "Resource_GetCronjob", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1CronJob" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{name}/pods": { + "get": { + "operationId": "Resource_GetCronjobPods", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPodsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets/{name}": { + "get": { + "operationId": "Resource_GetDaemonset", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Workload" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets/{name}/pods": { + "get": { + "operationId": "Resource_GetDaemonsetPods", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPodsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}": { + "get": { + "operationId": "Resource_GetDeployment", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Workload" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}/pods": { + "get": { + "operationId": "Resource_GetDeploymentPods", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPodsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/jobs/{name}": { + "get": { + "operationId": "Resource_GetJob", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Job" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/jobs/{name}/pods": { + "get": { + "operationId": "Resource_GetJobPods", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPodsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods/{name}": { + "get": { + "operationId": "Resource_GetPod", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Pod" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods/{name}/containers": { + "get": { + "operationId": "Resource_ListPodContainers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListContainersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter nodes by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter nodes by namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "filter containers by name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/services/{name}": { + "get": { + "operationId": "Resource_GetService", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Service" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}": { + "get": { + "operationId": "Resource_GetStatefulset", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Workload" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}/pods": { + "get": { + "operationId": "Resource_GetStatefulsetPods", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPodsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/nodes": { + "get": { + "operationId": "Resource_ListNodes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListNodesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter nodes by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "phase", + "description": "filter nodes by phase\n\n - NODE_PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - NODE_PHASE_READY: The node is ready to work.\n - NODE_PHASE_NOT_READY: The node is not ready.\n - NODE_PHASE_UNKNOWN: The node state is unknown.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "NODE_PHASE_UNSPECIFIED", + "NODE_PHASE_READY", + "NODE_PHASE_NOT_READY", + "NODE_PHASE_UNKNOWN" + ], + "default": "NODE_PHASE_UNSPECIFIED" + }, + { + "name": "name", + "description": "filter nodes by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/nodes/{name}": { + "get": { + "operationId": "Resource_GetNode", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiresourcev1alpha1Node" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/pods": { + "get": { + "operationId": "Resource_ListPods", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPodsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter nodes by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter nodes by namespaces", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "phase", + "description": "filter nodes by status\n\n - POD_PHASE_UNKNOWN: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - POD_PHASE_PENDING: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - POD_PHASE_RUNNING: PodRunning means the pod has been bound to a node and all of the containers\nhave been started. At least one container is still running or is in the\nprocess of being restarted. PodSucceeded means that all containers in the\npod have voluntarily terminated with a container exit code of 0, and the\nsystem is not going to restart any of these containers.\n - POD_PHASE_SUCCEED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - POD_PHASE_FAILED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "POD_PHASE_UNSPECIFIED", + "POD_PHASE_UNKNOWN", + "POD_PHASE_PENDING", + "POD_PHASE_RUNNING", + "POD_PHASE_SUCCEED", + "POD_PHASE_FAILED" + ], + "default": "POD_PHASE_UNSPECIFIED" + }, + { + "name": "name", + "description": "filter pods by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/services": { + "get": { + "operationId": "Resource_ListServices", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListServicesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter services by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter services by namespaces", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "name", + "description": "filter services by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{cluster}/statefulsets": { + "get": { + "operationId": "Resource_ListStatefulsets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListWorkloadsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "filter workloads by cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "filter workloads by namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "name", + "description": "filter workloads by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "phase", + "description": "filter workloads by phase", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "WORKLOAD_STATE_UNKNOWN", + "WORKLOAD_STATE_RUNNING", + "WORKLOAD_STATE_DELETING", + "WORKLOAD_STATE_NOT_READY", + "WORKLOAD_STATE_STOPPED", + "WORKLOAD_STATE_WAITING" + ], + "default": "WORKLOAD_STATE_UNKNOWN" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clusters/{name}": { + "get": { + "operationId": "Resource_GetCluster", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ClusterDetail" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/clustersummary": { + "get": { + "operationId": "Resource_ListClusterSummary", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListClusterSummaryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "description": "filter cluster by name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "version", + "description": "filter cluster by k8s version", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "phase", + "description": "filter cluster by phase\n\n - CLUSTER_PHASE_UNSPECIFIED: The cluster state is unspecified.\n - UNKNOWN: The cluster state is unknown.\n - CREATING: The cluster is being created.\n - RUNNING: The cluster is running.\n - UPDATING: The cluster is updating.\n - DELETING: The cluster is being deleted.\n - FAILED: The cluster operations failed.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "CLUSTER_PHASE_UNSPECIFIED", + "UNKNOWN", + "CREATING", + "RUNNING", + "UPDATING", + "DELETING", + "FAILED" + ], + "default": "CLUSTER_PHASE_UNSPECIFIED" + }, + { + "name": "showAllCluster", + "description": "show_all_cluster default is false, will only return cluster with\ninsight-agent installed; if set to true, will return all cluster.", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/config": { + "get": { + "operationId": "Insight_GetGlobalConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1GlobalConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Insight" + ] + } + }, + "/apis/insight.io/v1alpha1/feature-gates": { + "get": { + "operationId": "FeatureGate_GetFeatureGates", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1FeatureGatesResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "FeatureGate" + ] + } + }, + "/apis/insight.io/v1alpha1/feature-gates/{id}": { + "get": { + "operationId": "FeatureGate_GetFeatureGateByID", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1FeatureGate" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "METRICS", + "LOGGING", + "TRACING", + "GRAPH_VIRTUAL_NODE" + ] + } + ], + "tags": [ + "FeatureGate" + ] + } + }, + "/apis/insight.io/v1alpha1/jaeger/v2/traces": { + "get": { + "operationId": "Tracing_FindJaegerTraces", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1TracesResponseChunk" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "serviceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "operationName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "start", + "description": "e.g. 2022-06-24T08:00:47.850Z", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "end", + "description": "e.g. 2022-06-24T08:00:47.850Z", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "durationMin", + "description": "Span min duration. such as \"300ms\", \"-1.5h\" or \"2h45m\". Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\".", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "durationMax", + "description": "Span min duration. such as \"300ms\", \"-1.5h\" or \"2h45m\". Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\".", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "only for auth", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/jaeger/v2/traces/{traceId}": { + "get": { + "operationId": "Tracing_FindJaegerTrace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1TracesResponseChunk" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "traceId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "only for auth", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/log/context": { + "post": { + "operationId": "Log_QueryLogContext", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1QueryLogResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1QueryLogContextRequest" + } + } + ], + "tags": [ + "Log" + ] + } + }, + "/apis/insight.io/v1alpha1/log/export": { + "post": { + "operationId": "Log_DownloadLog", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1DownloadLogResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1DownloadLogRequest" + } + } + ], + "tags": [ + "Log" + ] + } + }, + "/apis/insight.io/v1alpha1/log/filepaths": { + "get": { + "operationId": "Log_ListLogFilePaths", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListLogFilePathsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Log" + ] + } + }, + "/apis/insight.io/v1alpha1/log/histogram": { + "post": { + "operationId": "Log_QueryLogHistogram", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1QueryLogHistogramResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1QueryLogHistogramRequest" + } + } + ], + "tags": [ + "Log" + ] + } + }, + "/apis/insight.io/v1alpha1/log/query": { + "post": { + "operationId": "Log_QueryLog", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1QueryLogResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1QueryLogRequest" + } + } + ], + "tags": [ + "Log" + ] + } + }, + "/apis/insight.io/v1alpha1/log/search": { + "get": { + "operationId": "Log_SearchLog", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1SearchLogResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "index", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "query", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Log" + ] + } + }, + "/apis/insight.io/v1alpha1/metric/query": { + "get": { + "operationId": "Metric_QueryMetric", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1PrometheusQueryResult" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "query", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "time", + "description": "Optional, current server time is used if the time parameter is omitted.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + } + ], + "tags": [ + "Metric" + ] + }, + "post": { + "operationId": "Metric_BatchQueryMetric", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1BatchQueryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1BatchQueryRequest" + } + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/insight.io/v1alpha1/metric/queryrange": { + "get": { + "operationId": "Metric_QueryRangeMetric", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1PrometheusQueryRangeResult" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "query", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "start", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "end", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "step", + "in": "query", + "required": false, + "type": "number", + "format": "double" + } + ], + "tags": [ + "Metric" + ] + }, + "post": { + "operationId": "Metric_BatchQueryRangeMetric", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1BatchQueryRangeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1BatchQueryRangeRequest" + } + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/insight.io/v1alpha1/server/component": { + "get": { + "operationId": "Resource_GetServerComponentSummary", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ServerComponentSummary" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Resource" + ] + } + }, + "/apis/insight.io/v1alpha1/service-graph/graph": { + "post": { + "summary": "查询拓扑", + "operationId": "ServiceGraph_GetGraph", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Graph" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1alpha1BaseGraphQuery" + } + } + ], + "tags": [ + "ServiceGraph" + ] + } + }, + "/apis/insight.io/v1alpha1/service-graph/node-metrics": { + "get": { + "operationId": "ServiceGraph_GetNodeMetrics", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1NodeMetricResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "Required. e.g. cluster = 7760a3f4-bfca-4c1e-8731-aea80838525f", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "service", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "extensionFilters", + "description": "extension_filters eg. skoala_registry=ire-111,instance=xxx", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "endTime", + "description": "end_time 结束时间 unix timestamp,单位 ms", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lookback", + "description": "lookback 回退时间 unix timestamp,单位 ms", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "step", + "description": "step 时间步长 unix timestamp,单位 ms", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "ratePer", + "description": "ratePer 变化率计算步长 unix timestamp,单位 ms", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "clusterName", + "description": "Required. e.g. clusterName=kpanda-global-cluster must give one of\ncluster,clusterName in a query", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "spanKinds", + "description": "spanKinds is the list of span kinds to include (logical OR) in the\nresulting metrics aggregation. Optional. Default = [SPAN_KIND_SERVER].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPAN_KIND_UNSPECIFIED", + "SPAN_KIND_INTERNAL", + "SPAN_KIND_SERVER", + "SPAN_KIND_CLIENT", + "SPAN_KIND_PRODUCER", + "SPAN_KIND_CONSUMER" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "ServiceGraph" + ] + } + }, + "/apis/insight.io/v1alpha1/traces/apdex": { + "get": { + "operationId": "Tracing_GetServiceApdex", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1PrometheusQueryResult" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "apdexThreshold", + "description": "Unit is milseconds.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "startTime", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "endTime", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "extensionFilters", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/traces/clusters/{clusterName}/service-names": { + "get": { + "operationId": "Tracing_ListServiceNames", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1GetServiceNamesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "description": "Required. support cluster name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "serviceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "spanKind", + "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. No default values.\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPAN_KIND_UNSPECIFIED", + "SPAN_KIND_INTERNAL", + "SPAN_KIND_SERVER", + "SPAN_KIND_CLIENT", + "SPAN_KIND_PRODUCER", + "SPAN_KIND_CONSUMER" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "start", + "description": "e.g. 2022-06-24T08:00:47.850Z", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "end", + "description": "e.g. 2022-06-24T08:00:47.850Z", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/traces/clusters/{clusterName}/services": { + "get": { + "operationId": "Tracing_GetServices", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1GetServicesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "description": "Required. support cluster name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Optional. namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "extensionFilters", + "description": "Optional. support extension search\neg.service_name=my-otel-demo-adservice", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "endTime", + "description": "end_time is the ending time of the time series query range.\nOptional. Default = now.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lookback", + "description": "lookback is the duration from the end_time to look back on for metrics data points.\nFor example, if set to 1h, the query would span from end_time-1h to end_time.\nOptional. Default = 1h.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "spanKinds", + "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. Default = [SPAN_KIND_SERVER,SPAN_KIND_CLIENT].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPAN_KIND_UNSPECIFIED", + "SPAN_KIND_INTERNAL", + "SPAN_KIND_SERVER", + "SPAN_KIND_CLIENT", + "SPAN_KIND_PRODUCER", + "SPAN_KIND_CONSUMER" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "page", + "description": "Page is current page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "description": "Size is the data number shown per page.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sort", + "description": "sorts determines the data list order.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- service_name,desc or service_name\n- service_name,asc\n- req_rate,desc or req_rate\n- req_rate,asc\n- rep_latency,desc or rep_latency\n- rep_latency,asc\n- error_rate,desc or error_rate\n- error_rate,asc\n\nthe default sort is service_name,asc", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/traces/operation-detail": { + "get": { + "operationId": "Tracing_GetOperationDetail", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1GetOperationDetailResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "Optional. namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "instanceName", + "description": "Optional. instance name(k8s.pod.name)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "extensionFilters", + "description": "Optional. support extension search\neg.service_name=my-otel-demo-adservice", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "serviceNames", + "description": "service_names are the service names to fetch metrics from.\nThe results will be grouped by service_name.\nRequired. At least one service name must be provided.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "groupByOperation", + "description": "groupByOperation determines if the metrics returned should be grouped by operation.\nOptional. Default = false.", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "endTime", + "description": "end_time is the ending time of the time series query range.\nOptional. Default = now.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lookback", + "description": "lookback is the duration from the end_time to look back on for metrics data points.\nFor example, if set to 1h, the query would span from end_time-1h to end_time.\nOptional. Default = 1h.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "step", + "description": "step size is the duration between data points of the query results.\nFor example, if set to 5s, the results would produce a data point every 5 seconds\nfrom the start_time to end_time.\nOptional. Default = 5s.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "ratePer", + "description": "ratePer is the duration in which the per-second rate of change is calculated for a cumulative counter metric.\nOptional. Default = 10m.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "spanKinds", + "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. Default = [SPAN_KIND_SERVER].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPAN_KIND_UNSPECIFIED", + "SPAN_KIND_INTERNAL", + "SPAN_KIND_SERVER", + "SPAN_KIND_CLIENT", + "SPAN_KIND_PRODUCER", + "SPAN_KIND_CONSUMER" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/traces/operations": { + "get": { + "operationId": "Tracing_QueryOperations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1OperationsQueryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "serviceName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "spanKind", + "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. No default values.\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPAN_KIND_UNSPECIFIED", + "SPAN_KIND_INTERNAL", + "SPAN_KIND_SERVER", + "SPAN_KIND_CLIENT", + "SPAN_KIND_PRODUCER", + "SPAN_KIND_CONSUMER" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "start", + "description": "Optional. e.g. 2022-06-24T08:00:47.850Z", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "end", + "description": "Optional. e.g. 2022-06-24T08:00:47.850Z", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/traces/service-detail": { + "get": { + "operationId": "Tracing_GetServiceDetail", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1GetServiceDetailResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "Optional. namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "instanceName", + "description": "Optional. instance name(k8s.pod.name)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "extensionFilters", + "description": "Optional. support extension search\neg.service_name=my-otel-demo-adservice", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "serviceNames", + "description": "service_names are the service names to fetch metrics from.\nThe results will be grouped by service_name.\nRequired. At least one service name must be provided.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "groupByOperation", + "description": "groupByOperation determines if the metrics returned should be grouped by operation.\nOptional. Default = false.", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "endTime", + "description": "end_time is the ending time of the time series query range.\nOptional. Default = now.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lookback", + "description": "lookback is the duration from the end_time to look back on for metrics data points.\nFor example, if set to 1h, the query would span from end_time-1h to end_time.\nOptional. Default = 1h.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "step", + "description": "step size is the duration between data points of the query results.\nFor example, if set to 5s, the results would produce a data point every 5 seconds\nfrom the start_time to end_time.\nOptional. Default = 5s.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "ratePer", + "description": "ratePer is the duration in which the per-second rate of change is calculated for a cumulative counter metric.\nOptional. Default = 10m.", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "spanKinds", + "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. Default = [SPAN_KIND_SERVER].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPAN_KIND_UNSPECIFIED", + "SPAN_KIND_INTERNAL", + "SPAN_KIND_SERVER", + "SPAN_KIND_CLIENT", + "SPAN_KIND_PRODUCER", + "SPAN_KIND_CONSUMER" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Tracing" + ] + } + }, + "/apis/insight.io/v1alpha1/userinfo": { + "get": { + "operationId": "Insight_GetUserinfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1userinfo" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Insight" + ] + } + }, + "/apis/insight.io/v1alpha1/version": { + "get": { + "operationId": "Insight_GetVersion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1VersionInfo" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Insight" + ] + } + } + }, + "definitions": { + "NodeMetadata": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "service": { + "type": "string", + "title": "预定义的所属服务信息,可以为空。" + }, + "name": { + "type": "string", + "title": "当前节点需要显示的名字。" + }, + "layer": { + "$ref": "#/definitions/v1alpha1Layer", + "title": "所述层级" + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "存储额外的信息,比如版本信息之类的。" + }, + "clusterName": { + "type": "string" + } + } + }, + "NodePosition": { + "type": "object", + "properties": { + "x": { + "type": "number", + "format": "float" + }, + "y": { + "type": "number", + "format": "float" + } + }, + "title": "Position 可用于标记节点在画布中的位置。\n如果存在此值,那么就是后端计算出位置之后前端直接渲染。\n如果不需要,也可以不实现,由前端选择合适的方式进行展现,或者自己实现。" + }, + "TraceProcessMapping": { + "type": "object", + "properties": { + "processId": { + "type": "string" + }, + "process": { + "$ref": "#/definitions/v1alpha1Process" + } + } + }, + "TraceTraceStatus": { + "type": "string", + "enum": [ + "UNHEALTHY", + "HEALTHY" + ], + "default": "UNHEALTHY" + }, + "WorkloadSumKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET" + ], + "default": "KIND_UNSPECIFIED" + }, + "apigraphv1alpha1Node": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "节点 ID,不可重复,可以按照一定规则生成。" + }, + "parent": { + "type": "string", + "title": "父节点的 ID,可选实现,可能在做一些依赖关系的时候会用到。\n也可以用在,比如将多个服务放在一个 Namespace 的匡中这种场景。" + }, + "type": { + "$ref": "#/definitions/v1alpha1NodeType", + "title": "节点类型,可用于前端展现不同的图标,或者进行后一步操作。" + }, + "metadata": { + "$ref": "#/definitions/NodeMetadata" + }, + "position": { + "$ref": "#/definitions/NodePosition", + "title": "节点的位置标记" + }, + "statuses": { + "type": "array", + "items": { + "$ref": "#/definitions/graphv1alpha1Status" + }, + "title": "当前节点各种状态" + } + }, + "title": "Node 表示图上的每一个实体点" + }, + "apiresourcev1alpha1Node": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "cluster": { + "type": "string" + }, + "operatingSystem": { + "type": "string" + }, + "address": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "nodeStatus": { + "$ref": "#/definitions/v1alpha1NodeStatus" + }, + "podSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "usage": { + "$ref": "#/definitions/v1alpha1usage" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "graphv1alpha1Status": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "可以定义一些初步的 name 共识:\nreplicas 表示副本数\navailableReplicas 表示可用副本数\nrequestsPerMinute 请求速率(RPM)\nerrorRate 错误率(%)\navgLatency 平均延迟(ms)\nconnections 连接数\nreceiveBytes 接收吞吐(B/S)\nsendBytes 发送吞吐(B/S)\nhealthyStatus 健康状态;0(未知) | 1(健康) | 2(告警) | 3(异常)" + }, + "value": { + "type": "number", + "format": "float", + "title": "具体的值,只能用浮点数来表示状态。" + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "properties 可以给这个 Status 增加一些扩展的参数,\n比如在网格中,流量可能可以分为入口或者出口流量。" + } + }, + "title": "Status 用于定义节点或连线的状态。\n比如希望展示当前服务的 QPS,那么可以如下:\n{ name: qps, value: 100, properties: {protocol: http}}\n如果想要展示命名空间的服务数量:\n{ name: service_count, value: 5}\n具体的释义可以根据各个产品决定。" + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "timeIntervaltimeRange": { + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "int64" + }, + "end": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1AMHookRequest": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "groupKey": { + "type": "string" + }, + "status": { + "type": "string" + }, + "receiver": { + "type": "string" + }, + "groupLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "commonLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "commonAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "externalURL": { + "type": "string" + }, + "alerts": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AmAlert" + } + }, + "truncatedAlerts": { + "type": "string", + "format": "int64" + } + }, + "title": "alert message send by alertmanager" + }, + "v1alpha1AgentSummary": { + "type": "object", + "properties": { + "insightAgentState": { + "$ref": "#/definitions/v1alpha1insightAgentState" + }, + "agentModuleStatus": { + "$ref": "#/definitions/v1alpha1agentModuleStatus" + } + } + }, + "v1alpha1AggType": { + "type": "string", + "enum": [ + "INTERSECTION", + "UNION" + ], + "default": "INTERSECTION", + "title": "- INTERSECTION: INTERSECTION preform a intersection operation after FilterOperator\n - UNION: UNION preform a union operation after FilterOperator\nCURRENT NOT SUPPORT" + }, + "v1alpha1AlertHistoryRetentionPeriod": { + "type": "object", + "properties": { + "retentionTime": { + "type": "integer", + "format": "int32", + "title": "retention_time unit is day, 0 means no need to clean" + } + } + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1AmAlert": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "startsAt": { + "type": "string" + }, + "endsAt": { + "type": "string" + }, + "generatorURL": { + "type": "string" + }, + "fingerprint": { + "type": "string" + } + } + }, + "v1alpha1BaseGraphQuery": { + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "type": "string" + } + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "items": { + "type": "string" + } + }, + "layer": { + "$ref": "#/definitions/v1alpha1Layer", + "title": "期望展示的 layer 层级,比如 MESH, TRACING" + }, + "start": { + "type": "string", + "format": "int64", + "title": "start 开始时间 unix timestamp,单位 ms" + }, + "end": { + "type": "string", + "format": "int64", + "title": "end 结束时间 unix timestamp,单位 ms" + }, + "extensionLabels": { + "type": "string", + "title": "eg. \"skoala_registry=ireg-1233,instance_name=xxxxx\"" + }, + "graphType": { + "$ref": "#/definitions/v1alpha1GraphType" + }, + "clusterNames": { + "type": "array", + "items": { + "type": "string" + }, + "title": "cluster_names 集群名字列表" + }, + "filters": { + "$ref": "#/definitions/v1alpha1Filter", + "title": "filters optional. Filter defines some filter operation to the graph data\nindependently. After filter operators done, there is a collection operation\non filtered graph data depending on filters.agg_type, finally, there is a\ndependency fetch operation on the second step result as a root graph to\nfetch its dependent data(downstream node or upstream node) from the origin\nGraph with dependency_max_depth depth the root node data will have a\nproperty DEPENDENT_TYPE = ROOT the dependency node data will have a\nproperty DEPENDENT_TYPE = DEPENDENT" + }, + "showVirtualNode": { + "type": "boolean", + "title": "TODO(jian): remove this in next milestone.\nshow virtual node in service graph or not. Default: false" + } + } + }, + "v1alpha1BasicAuth": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "v1alpha1BatchQueryRangeRequest": { + "type": "object", + "properties": { + "param": { + "$ref": "#/definitions/v1alpha1BatchQueryRangeRequestParam" + }, + "matchLabel": { + "$ref": "#/definitions/v1alpha1MatchLabel" + }, + "queryList": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1BatchQueryRangeRequestParam": { + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "int64" + }, + "end": { + "type": "string", + "format": "int64" + }, + "step": { + "type": "number", + "format": "double" + } + } + }, + "v1alpha1BatchQueryRangeResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1BatchQueryRangeResult" + } + } + } + }, + "v1alpha1BatchQueryRangeResult": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/v1alpha1PrometheusQueryRangeResult" + }, + "status": { + "$ref": "#/definitions/v1alpha1requestStatus" + }, + "errorMessage": { + "type": "string" + } + } + }, + "v1alpha1BatchQueryRequest": { + "type": "object", + "properties": { + "param": { + "$ref": "#/definitions/v1alpha1BatchQueryRequestParam" + }, + "matchLabel": { + "$ref": "#/definitions/v1alpha1MatchLabel" + }, + "queryList": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1BatchQueryRequestParam": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1BatchQueryResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1BatchQueryResult" + } + } + } + }, + "v1alpha1BatchQueryResult": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/v1alpha1PrometheusQueryResult" + }, + "status": { + "$ref": "#/definitions/v1alpha1requestStatus" + }, + "errorMessage": { + "type": "string" + } + } + }, + "v1alpha1CleanAlertHistoryResponse": { + "type": "object", + "properties": { + "num": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Cluster": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "kubeSystemId": { + "type": "string", + "title": "kube-system id" + }, + "phase": { + "$ref": "#/definitions/v1alpha1ClusterPhase" + }, + "role": { + "$ref": "#/definitions/v1alpha1Role" + } + } + }, + "v1alpha1ClusterDetail": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "kubeSystemId": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1ClusterPhase" + }, + "provider": { + "$ref": "#/definitions/v1alpha1ClusterProvider", + "description": "Provider represents the cloud provider name of the member cluster." + }, + "kubernetesVersion": { + "type": "string", + "description": "KubernetesVersion represents version of the cluster." + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "nodeNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "deploymentNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "statefulsetNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "daemonsetNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "podNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "insightAgentStatus": { + "$ref": "#/definitions/v1alpha1insightAgentState" + } + } + }, + "v1alpha1ClusterPhase": { + "type": "string", + "enum": [ + "CLUSTER_PHASE_UNSPECIFIED", + "UNKNOWN", + "CREATING", + "RUNNING", + "UPDATING", + "DELETING", + "FAILED" + ], + "default": "CLUSTER_PHASE_UNSPECIFIED", + "description": " - CLUSTER_PHASE_UNSPECIFIED: The cluster state is unspecified.\n - UNKNOWN: The cluster state is unknown.\n - CREATING: The cluster is being created.\n - RUNNING: The cluster is running.\n - UPDATING: The cluster is updating.\n - DELETING: The cluster is being deleted.\n - FAILED: The cluster operations failed." + }, + "v1alpha1ClusterProvider": { + "type": "string", + "enum": [ + "GENERIC", + "DAOCLOUD_KUBESPRAY", + "DAOCLOUD_CLUSTER_API", + "DAOCLOUD_DCE4", + "REDHAT_OPENSHIFT4", + "SUSE_RANCHER", + "VMWARE_TANZU", + "AWS_EKS", + "ALIYUN_ACK", + "TENCENT_TKE", + "HUAWEI_CCE", + "MICROSOFT_AZURE" + ], + "default": "GENERIC", + "description": " - GENERIC: GENERIC indicates other providers\n - DAOCLOUD_KUBESPRAY: 1.DaoCloud\nDAOCLOUD_KUBESPRAY indicates a provider of DaoCloud's KubeSpray Engine\n - DAOCLOUD_CLUSTER_API: DAOCLOUD_CLUSTER_API indicates a provider of DaoCloud's Cluster API Engine\n - DAOCLOUD_DCE4: DAOCLOUD_DCE4 indicates a provider of DaoCloud's DCE4 Engine\n - REDHAT_OPENSHIFT4: 2.OverSea Distribtion\nREDHAT_OPENSHIFT4 indicates a provider of RedHat Openshift4\n - SUSE_RANCHER: SUSE_RANCHER indicates a provider of SUSE Rancher\n - VMWARE_TANZU: VMWARE_TANZU indicates a provider of VMware Tanzu\n - AWS_EKS: 3.Public Cloud\nAWS_EKS indicates a provider of AWS EKS\n - ALIYUN_ACK: ALIYUN_ACK indicates a provider of Aliyun ACK\n - TENCENT_TKE: TENCENT_TKE indicates a provider of Tencent TKE.\n - HUAWEI_CCE: TENCENT_TKE indicates a provider of Huawei CCE.\n - MICROSOFT_AZURE: MICROSOFT_AZURE=11; indicates a provider of Microsoft Azure." + }, + "v1alpha1ClusterSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "kubeSystemId": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1ClusterPhase" + }, + "nodeNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "insightAgentStatus": { + "$ref": "#/definitions/v1alpha1insightAgentState" + } + } + }, + "v1alpha1Condition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string", + "title": "Last time the condition transitioned from one status to another.\n+optional" + }, + "lastUpdateTime": { + "type": "string", + "title": "Last time we got an update on a given condition.\n+optional" + }, + "message": { + "type": "string", + "title": "A human readable message indicating details about the transition.\n+optional" + }, + "reason": { + "type": "string", + "title": "The reason for the condition's last transition.\n+optional" + }, + "status": { + "type": "string", + "description": "Status of the condition, one of True, False, Unknown." + }, + "type": { + "type": "string", + "description": "Type of condition." + } + }, + "description": "Condition describes the state of a referent at a certain point." + }, + "v1alpha1ConditionStatus": { + "type": "string", + "enum": [ + "CONDITION_STATUS_UNSPECIFIED", + "True", + "False", + "Unknown" + ], + "default": "CONDITION_STATUS_UNSPECIFIED", + "description": "These are valid condition statuses.\n\n - CONDITION_STATUS_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - True: True means a resource is in the condition.\n - False: False means a resource is not in the condition.\n - Unknown: Unknown means kubernetes can't decide if a resource is in the condition or\nnot." + }, + "v1alpha1ContainerPhase": { + "type": "string", + "enum": [ + "CONTAINER_PHASE_UNSPECIFIED", + "CONTAINER_PHASE_WAITING", + "CONTAINER_PHASE_RUNNING", + "CONTAINER_PHASE_TERMINATED" + ], + "default": "CONTAINER_PHASE_UNSPECIFIED" + }, + "v1alpha1ContainerSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1ContainerPhase" + } + } + }, + "v1alpha1CountAlert": { + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "int64" + }, + "end": { + "type": "string", + "format": "int64" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1countInfo" + } + } + } + }, + "v1alpha1CountAlertResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1CountAlert" + } + } + } + }, + "v1alpha1CreateGroupRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "targets": { + "type": "array", + "items": { + "type": "string" + } + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1CreateGroupRule" + } + }, + "notificationTemplate": { + "type": "string" + }, + "receivers": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1groupReceiver" + } + }, + "notifyRepeatConfig": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1repeatConfig" + } + } + } + }, + "v1alpha1CreateGroupRule": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/v1alpha1RuleSource" + }, + "expr": { + "type": "string" + }, + "thresholdSymbol": { + "type": "string", + "title": "when create rule from metric_tpl,use thresholdSymbol and thresholdNum to\ncomplete the promql" + }, + "thresholdNum": { + "type": "number", + "format": "float" + }, + "duration": { + "type": "string", + "title": "Supported units: h, m, s" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "custiomized labels" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "custiomized annotations" + } + } + }, + "v1alpha1CreateSilenceRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "description": { + "type": "string" + }, + "matches": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1match" + }, + "title": "required; support maxium 100 matches" + }, + "activeTimeInterval": { + "$ref": "#/definitions/v1alpha1timeInterval", + "title": "optional; null means rule always valid" + } + } + }, + "v1alpha1CreateTemplateRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "body": { + "$ref": "#/definitions/v1alpha1TemplateBody" + } + } + }, + "v1alpha1CronJob": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1CronJobPhase" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "jobNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Condition" + }, + "description": "conditions of current cronjob." + } + } + }, + "v1alpha1CronJobPhase": { + "type": "string", + "enum": [ + "CRONJOB_STATE_UNSPECIFIED", + "CRONJOB_STATE_WAITING", + "CRONJOB_STATE_ACTIVATED", + "CRONJOB_STATE_STOPPED", + "CRONJOB_STATE_DELETING" + ], + "default": "CRONJOB_STATE_UNSPECIFIED", + "description": " - CRONJOB_STATE_UNSPECIFIED: CronJob is unspecified.\n - CRONJOB_STATE_WAITING: Waiting for cronjob ready.\n - CRONJOB_STATE_ACTIVATED: The number of pending and running pods.\n - CRONJOB_STATE_STOPPED: CronJob has stopped.\n - CRONJOB_STATE_DELETING: CronJob is being deleted." + }, + "v1alpha1CronJobSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1CronJobPhase" + }, + "jobNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + } + } + }, + "v1alpha1DingtalkConfig": { + "type": "object", + "properties": { + "webhook": { + "type": "string" + } + } + }, + "v1alpha1DownloadFileType": { + "type": "string", + "enum": [ + "TEXT", + "CSV", + "JSON" + ], + "default": "TEXT" + }, + "v1alpha1DownloadLogRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1alpha1DownloadFileType" + }, + "queryLog": { + "$ref": "#/definitions/v1alpha1QueryLogRequest" + }, + "queryLogConext": { + "$ref": "#/definitions/v1alpha1QueryLogContextRequest" + } + } + }, + "v1alpha1DownloadLogResponse": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + }, + "v1alpha1Edge": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "与 Node.id 一致,一个唯一标志符,理论上,Edge 的 ID 可以为空。" + }, + "source": { + "type": "string", + "title": "source 表示当前连线的起始节点 ID" + }, + "target": { + "type": "string", + "title": "target 表示当前连线的目标节点 ID" + }, + "statuses": { + "type": "array", + "items": { + "$ref": "#/definitions/graphv1alpha1Status" + }, + "title": "当前连线各种状态" + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "当前连线的一些扩展状态,比如可以展示当前协议,线的展示类型等。\n根据各个产品商议。" + } + }, + "title": "Edge 表示连线,用于连接两个 Node。" + }, + "v1alpha1EmailConfig": { + "type": "object", + "properties": { + "to": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1FeatureGate": { + "type": "object", + "properties": { + "id": { + "$ref": "#/definitions/v1alpha1FeatureGateIDEnum", + "title": "唯一标志符" + }, + "name": { + "type": "string", + "title": "名字" + }, + "description": { + "type": "string", + "title": "关于此 FeatureGate 的描述" + }, + "enabled": { + "type": "boolean", + "title": "是否启用" + }, + "status": { + "type": "string" + } + } + }, + "v1alpha1FeatureGateIDEnum": { + "type": "string", + "enum": [ + "METRICS", + "LOGGING", + "TRACING", + "GRAPH_VIRTUAL_NODE" + ], + "default": "METRICS" + }, + "v1alpha1FeatureGatesResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1FeatureGate" + } + } + } + }, + "v1alpha1Filter": { + "type": "object", + "properties": { + "clauses": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1OperatorClause" + }, + "title": "clause define a list of filter clause" + }, + "aggType": { + "$ref": "#/definitions/v1alpha1AggType", + "title": "agg_type define a type of set operation" + }, + "dependencyMaxDepth": { + "type": "integer", + "format": "int32", + "title": "dependency_max_depth display the dependency graph with max depth\ndefault value is 1" + } + } + }, + "v1alpha1FilterDataType": { + "type": "string", + "enum": [ + "NODE_DATA", + "EDGE_DATA" + ], + "default": "NODE_DATA", + "title": "- EDGE_DATA: CURRENT NOT SUPPORT" + }, + "v1alpha1FilterField": { + "type": "string", + "enum": [ + "SERVICE_NAME", + "STATUS_ERROR_RATE", + "STATUS_LATENCY", + "CUSTOM_LABEL" + ], + "default": "SERVICE_NAME", + "title": "- SERVICE_NAME: SERVICE_NAME support operation:\n- FilterOperator_CONTAIN\n- FilterOperator_NOT_CONTAIN\n- FilterOperator_EQUAL\n- FilterOperator_NOT_EQUAL\n- FilterOperator_REGEX_PATTERN\n - STATUS_ERROR_RATE: STATUS_ERROR_RATE support operation:\n- FilterOperator_LE\n- FilterOperator_GE\n - STATUS_LATENCY: STATUS_LATENCY support operation:\n- FilterOperator_LE\n- FilterOperator_GE\n - CUSTOM_LABEL: CURRENT NOT SUPPORT" + }, + "v1alpha1FilterOperator": { + "type": "string", + "enum": [ + "EQ", + "NE", + "LT", + "LE", + "GT", + "GE", + "CONTAIN", + "NOT_CONTAIN", + "EQUAL", + "NOT_EQUAL", + "REGEX_PATTERN" + ], + "default": "EQ", + "title": "- EQ: EQ only support apply on numerical data\n= Equality relation between numerics\n - NE: NE only support apply on numerical data\n!= Inequality relation between numerics\n - LT: LT only support apply on numerical data\n\u003c Less than relation between numerics\n - LE: LE only support apply on numerical data\n\u003c= Less than or equal relation between numerics\n - GT: GT only support apply on numerical data\n\u003e Greater than relation between numerics\n - GE: GE only support apply on numerical data\n\u003e= Greater than or equal relation between numerics\n - CONTAIN: CONTAIN only support apply on string data\nRegularExpression\n - NOT_CONTAIN: NOT_CONTAIN only support apply on string data\nRegularExpression operation\n - EQUAL: EQUAL only support apply on string data\nRegularExpression operation\n - NOT_EQUAL: only support apply on string data\nRegularExpression operation\n - REGEX_PATTERN: only support apply on string data\nRegularExpression operation" + }, + "v1alpha1GetOperationDetailResponse": { + "type": "object", + "properties": { + "metrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1MetricsWithOperation" + } + } + } + }, + "v1alpha1GetServiceDetailResponse": { + "type": "object", + "properties": { + "p95Metrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "请求时延 95 百分位趋势图,时间范围内的" + }, + "p75Metrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "请求时延 75 百分位趋势图,时间范围内的" + }, + "p50Metrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "请求时延 50 百分位趋势图,时间范围内的" + }, + "reqRateMetric": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "吞吐率趋势图,时间范围内的" + }, + "repLatencyMetric": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "平均请求时延趋势图,时间范围内的" + }, + "errorsRateMetrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "错误率延趋势图,时间范围内的" + }, + "totalCallsMetrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "请求数趋势图,时间范围内的" + }, + "avgReqRate": { + "type": "number", + "format": "double", + "title": "(平均) 请求吞吐率,时间范围内的" + }, + "avgRepLatency": { + "type": "number", + "format": "double", + "title": "(平均) 请求时延,时间范围内" + }, + "avgErrorRate": { + "type": "number", + "format": "double", + "title": "(平均) 请求错误率,时间范围内" + }, + "totalCalls": { + "type": "number", + "format": "double", + "title": "请求数,时间范围内的总请求数" + }, + "apdex": { + "type": "number", + "format": "double", + "title": "Apdex, 服务满意度值,该值为 [0,1] 范围的的值" + } + } + }, + "v1alpha1GetServiceNamesResponse": { + "type": "object", + "properties": { + "services": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1GetServicesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1ServiceItem" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1GlobalConfig": { + "type": "object", + "properties": { + "vmStorageRetentionTime": { + "type": "string" + }, + "logRetentionTime": { + "type": "string" + }, + "traceDataRetentionTime": { + "type": "string" + }, + "traceApdexThreshold": { + "type": "string" + } + } + }, + "v1alpha1Graph": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "$ref": "#/definitions/apigraphv1alpha1Node" + } + }, + "edges": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Edge" + } + }, + "layer": { + "$ref": "#/definitions/v1alpha1Layer" + }, + "graphType": { + "$ref": "#/definitions/v1alpha1GraphType" + } + }, + "description": "样例 2,根据服务网格的观测数据,画出拓扑图\n{\n\"nodes\": [\n{\n\"id\": \"test-cluster/test-ns\",\n\"type\": \"NAMESPACE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"name\": \"test-ns\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 10,\n\"properties\": {\n\"type\": \"pod\"\n}\n},\n{\n\"name\": \"service_count\",\n\"value\": 5\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 133.5,\n\"properties\": {\n\"direction\": \"in\"\n}\n},\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 2,\n\"properties\": {\n\"direction\": \"out\"\n}\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo-client\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo-client\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 100,\n\"properties\": {\n\"direction\": \"out\"\n}\n}\n]\n}\n],\n\"edges\": [\n{\n\"id\":\n\"test-cluster/test-ns/services/echo-client---test-cluster/test-ns/services/echo\"\n\"source\": \"test-cluster/test-ns/services/echo-client\",\n\"target\": \"test-cluster/test-ns/services/echo\",\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 100\n}\n],\n\"properties\": {\n\"protocol\": \"HTTP\"\n}\n}\n],\n\"type\": \"SERVICE_SCOPE\"\n}", + "title": "样例 1,根据 Kubernetes 的资源结构,画出拓扑图(可能不存在节点连线)\n{\n\"nodes\": [\n{\n\"id\": \"test-cluster/test-ns\",\n\"type\": \"NAMESPACE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"name\": \"test-ns\",\n\"layer\": \"KUBERNETES\"\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 10,\n\"properties\": {\n\"type\": \"pod\"\n}\n},\n{\n\"name\": \"service_count\",\n\"value\": 5\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo\",\n\"layer\": \"KUBERNETES\"\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 3,\n\"properties\": {\n\"type\": \"pod\"\n}\n}\n]\n}\n],\n\"type\": \"SERVICE_SCOPE\"\n}" + }, + "v1alpha1GraphType": { + "type": "string", + "enum": [ + "GRAPH_UNSPECIFIED", + "CLUSTER_SCOPE", + "NAMESPACE_SCOPE", + "SERVICE_SCOPE", + "WORKLOAD_SCOPE", + "INSTANCE_SCOPE", + "MIXED" + ], + "default": "GRAPH_UNSPECIFIED", + "description": "- CLUSTER_SCOPE: 用于展现集群之间的拓扑关系\n - NAMESPACE_SCOPE: 用于展示命名空间之间的拓扑关系", + "title": "图的展示类型\n与节点类型 NodeType 不同的是,如果 GraphType 为 WORKLOAD,\n但是也可以在接口中返回 Namespace 的 Node 可能用于用户手动展开等场景。" + }, + "v1alpha1Group": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "builtin": { + "type": "boolean" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "targets": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "type": "string" + }, + "notificationTemplate": { + "type": "string" + }, + "receivers": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1groupReceiver" + } + }, + "notifyRepeatConfig": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1repeatConfig" + } + }, + "createAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1GroupSummary": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "builtin": { + "type": "boolean" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "targets": { + "type": "array", + "items": { + "type": "string" + } + }, + "groupRuleStatus": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1groupRuleStatus" + } + }, + "description": { + "type": "string" + }, + "createAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1HTTPConfig": { + "type": "object", + "properties": { + "basicAuth": { + "$ref": "#/definitions/v1alpha1BasicAuth" + }, + "bearerToken": { + "type": "string" + }, + "tlsConfig": { + "$ref": "#/definitions/v1alpha1SafeTLSConfig" + } + } + }, + "v1alpha1InsightAgentStatus": { + "type": "string", + "enum": [ + "NOT_INSTALLED", + "HEALTHY", + "UNHEALTHY" + ], + "default": "NOT_INSTALLED" + }, + "v1alpha1JVMType": { + "type": "string", + "enum": [ + "JMX", + "OTEL", + "NONE" + ], + "default": "JMX", + "description": " - JMX: metrics exposed by JMX exporter\n - OTEL: metrics exposed by OTEL Java Agent\n - NONE: empty metrics, no jvm collected." + }, + "v1alpha1JVMUrls": { + "type": "object", + "properties": { + "en": { + "type": "string", + "title": "English grafana dashboard url" + }, + "zh": { + "type": "string", + "title": "Chinese grafana dashboard url" + } + } + }, + "v1alpha1Job": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/v1alpha1JobStatus" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "jobPodNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Condition" + }, + "description": "conditions of current job." + } + } + }, + "v1alpha1JobState": { + "type": "string", + "enum": [ + "JOB_STATE_UNSPECIFIED", + "JOB_STATE_WAITING", + "JOB_STATE_RUNNING", + "JOB_STATE_COMPLETED", + "JOB_STATE_DELETING", + "JOB_STATE_FAILED" + ], + "default": "JOB_STATE_UNSPECIFIED", + "description": " - JOB_STATE_UNSPECIFIED: Job is unspecified.\n - JOB_STATE_WAITING: Waiting for job ready.\n - JOB_STATE_RUNNING: Job is working.\n - JOB_STATE_COMPLETED: Jobs has completed.\n - JOB_STATE_DELETING: Jobs is being deleted.\n - JOB_STATE_FAILED: Jobs is not ready to work ." + }, + "v1alpha1JobStatus": { + "type": "object", + "properties": { + "active": { + "type": "integer", + "format": "int32" + }, + "succeed": { + "type": "integer", + "format": "int32" + }, + "failed": { + "type": "integer", + "format": "int32" + }, + "phase": { + "$ref": "#/definitions/v1alpha1JobState" + } + } + }, + "v1alpha1JobSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/v1alpha1JobStatus" + }, + "jobPodNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + } + } + }, + "v1alpha1KeyValue": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "vType": { + "$ref": "#/definitions/v1alpha1ValueType" + }, + "vStr": { + "type": "string" + }, + "vBool": { + "type": "boolean" + }, + "vInt64": { + "type": "string", + "format": "int64" + }, + "vFloat64": { + "type": "number", + "format": "double" + }, + "vBinary": { + "type": "string", + "format": "byte" + } + } + }, + "v1alpha1Layer": { + "type": "string", + "enum": [ + "LAYER_UNSPECIFIED", + "KUBERNETES", + "MESH", + "OS_LINUX", + "VM", + "INFRA", + "GENERAL" + ], + "default": "LAYER_UNSPECIFIED", + "description": "- KUBERNETES: 直接部署在 Kubernetes 上\n - MESH: 服务网格层级\n - OS_LINUX: 虚拟机或操作系统层级\n - INFRA: 基础设施层级,\n - GENERAL: 通用层级,可能是传统应用上报的数据", + "title": "像 Skywalking 一样,表示当前所处的层级\n用于展示不同的视图模型,甚至可以展示不同层级之间的关系。" + }, + "v1alpha1ListAlertsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListClusterSummaryResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1ClusterSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListClustersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Cluster" + } + } + } + }, + "v1alpha1ListContainersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1ContainerSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListCronJobsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1CronJobSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListGroupsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1GroupSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListJobsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1JobSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListLogFilePathsResponse": { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1ListNamespacesResponse": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Namespace" + } + } + } + }, + "v1alpha1ListNodesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1NodeSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListPodsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1PodSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListReceiverResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Receiver" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + }, + "title": "list receiver" + }, + "v1alpha1ListRulesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1RuleSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListServicesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1serviceSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListSilencesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Silence" + } + } + } + }, + "v1alpha1ListTemplatesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1TemplateSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1ListWorkloadsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1workloadSummary" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1LogContextEventFilter": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + } + } + }, + "v1alpha1LogContextResourceFilter": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "pod": { + "type": "string" + }, + "container": { + "type": "string" + } + } + }, + "v1alpha1LogContextSystemFilter": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "node": { + "type": "string" + }, + "file": { + "type": "string" + } + } + }, + "v1alpha1LogHistogramResult": { + "type": "object", + "properties": { + "timestamp": { + "type": "string" + }, + "count": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1LogQueryEventFilter": { + "type": "object", + "properties": { + "logSearch": { + "type": "array", + "items": { + "type": "string" + } + }, + "clusterFilter": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1LogQueryResourceFilter": { + "type": "object", + "properties": { + "logSearch": { + "type": "array", + "items": { + "type": "string" + } + }, + "clusterFilter": { + "type": "array", + "items": { + "type": "string" + } + }, + "namespaceFilter": { + "type": "array", + "items": { + "type": "string" + } + }, + "workloadSearch": { + "type": "array", + "items": { + "type": "string" + } + }, + "workloadFilter": { + "type": "array", + "items": { + "type": "string" + } + }, + "podSearch": { + "type": "array", + "items": { + "type": "string" + } + }, + "podFilter": { + "type": "array", + "items": { + "type": "string" + } + }, + "containerSearch": { + "type": "array", + "items": { + "type": "string" + } + }, + "containerFilter": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1LogQueryResult": { + "type": "object", + "properties": { + "log": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1alpha1LogQuerySystemFilter": { + "type": "object", + "properties": { + "logSearch": { + "type": "array", + "items": { + "type": "string" + } + }, + "clusterFilter": { + "type": "array", + "items": { + "type": "string" + } + }, + "nodeFilter": { + "type": "array", + "items": { + "type": "string" + } + }, + "fileFilter": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1MatchLabel": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "extraLabel": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1alpha1MetricsGroup": { + "type": "object", + "properties": { + "metrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1samplePair" + } + }, + "metricsLabel": { + "type": "string" + }, + "metricsAvg": { + "type": "number", + "format": "double" + } + } + }, + "v1alpha1MetricsWithOperation": { + "type": "object", + "properties": { + "operationName": { + "type": "string", + "description": "Required." + }, + "spanKind": { + "$ref": "#/definitions/v1alpha1SpanKind", + "description": "Required." + }, + "metricGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1MetricsGroup" + }, + "description": "Required." + } + } + }, + "v1alpha1Namespace": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "role": { + "$ref": "#/definitions/v1alpha1Role" + } + } + }, + "v1alpha1NodeCondition": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of node condition. The built-in set of conditions are: Ready,\nMemoryPressure, DiskPressure, PIDPressure,\nNetworkUnavailable, and SchedulingDisabled." + }, + "status": { + "$ref": "#/definitions/v1alpha1ConditionStatus", + "description": "Status of the condition, one of True, False, Unknown." + }, + "reason": { + "type": "string", + "description": "(brief) reason for the condition's last transition." + }, + "message": { + "type": "string", + "description": "Human readable message indicating details about last transition." + } + }, + "description": "NodeCondition contains condition information for a node." + }, + "v1alpha1NodeMetricResponse": { + "type": "object", + "properties": { + "reqRateMetric": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "吞吐率趋势图,时间范围内的" + }, + "errorsRateMetrics": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "错误率延趋势图,时间范围内的" + }, + "repLatencyMetric": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + }, + "title": "平均请求时延趋势图,时间范围内的" + } + } + }, + "v1alpha1NodePhase": { + "type": "string", + "enum": [ + "NODE_PHASE_UNSPECIFIED", + "NODE_PHASE_READY", + "NODE_PHASE_NOT_READY", + "NODE_PHASE_UNKNOWN" + ], + "default": "NODE_PHASE_UNSPECIFIED", + "description": "status includes Ready, NotReady, and Unknown.\n\n - NODE_PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - NODE_PHASE_READY: The node is ready to work.\n - NODE_PHASE_NOT_READY: The node is not ready.\n - NODE_PHASE_UNKNOWN: The node state is unknown." + }, + "v1alpha1NodeStatus": { + "type": "object", + "properties": { + "phase": { + "$ref": "#/definitions/v1alpha1NodePhase" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1NodeCondition" + } + } + } + }, + "v1alpha1NodeSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1NodePhase" + }, + "podNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + } + }, + "title": "NodeSummary only return node name,status and podSummary" + }, + "v1alpha1NodeType": { + "type": "string", + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "CLUSTER", + "NAMESPACE", + "SERVICE", + "WORKLOAD", + "INSTANCE", + "NODE", + "CUSTOM" + ], + "default": "NODE_TYPE_UNSPECIFIED", + "title": "- WORKLOAD: 比如需要展示 Deployment 之类的 Workload\n - INSTANCE: 实例,比如 Pod 的时候可以展示\n - NODE: 节点,如果需要的话\n - CUSTOM: 自定义类型,如果需要的话,推荐通过 metadata.properties.type\n进行详细说明。" + }, + "v1alpha1OperationsQueryResponse": { + "type": "object", + "properties": { + "operations": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1OperatorClause": { + "type": "object", + "properties": { + "dataType": { + "$ref": "#/definitions/v1alpha1FilterDataType", + "title": "data_type define the data type that can be used in filter" + }, + "field": { + "$ref": "#/definitions/v1alpha1FilterField", + "title": "field define the field that can be used in filter" + }, + "operation": { + "$ref": "#/definitions/v1alpha1FilterOperator", + "title": "operation define the operation that can be used in filter" + }, + "stringValue": { + "type": "string" + }, + "floatValue": { + "type": "number", + "format": "float" + } + }, + "title": "OperatorClause definition" + }, + "v1alpha1Pagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32", + "description": "Total is the total number of referents." + }, + "page": { + "type": "integer", + "format": "int32", + "description": "Page is current page." + }, + "pageSize": { + "type": "integer", + "format": "int32", + "description": "PageSize is the data number shown per page." + }, + "pages": { + "type": "integer", + "format": "int32", + "description": "Pages is the number of pages." + } + } + }, + "v1alpha1Pod": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1PodPhase" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "containerNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "podIp": { + "type": "string" + }, + "hostIp": { + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Condition" + }, + "description": "conditions of current pod." + } + } + }, + "v1alpha1PodJVMInfo": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1alpha1JVMType", + "title": "type means pod exposed by JMX/OTEL/NONE" + }, + "urls": { + "$ref": "#/definitions/v1alpha1JVMUrls", + "title": "jvm grafana dashboard urls" + } + } + }, + "v1alpha1PodPhase": { + "type": "string", + "enum": [ + "POD_PHASE_UNSPECIFIED", + "POD_PHASE_UNKNOWN", + "POD_PHASE_PENDING", + "POD_PHASE_RUNNING", + "POD_PHASE_SUCCEED", + "POD_PHASE_FAILED" + ], + "default": "POD_PHASE_UNSPECIFIED", + "description": " - POD_PHASE_UNKNOWN: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - POD_PHASE_PENDING: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - POD_PHASE_RUNNING: PodRunning means the pod has been bound to a node and all of the containers\nhave been started. At least one container is still running or is in the\nprocess of being restarted. PodSucceeded means that all containers in the\npod have voluntarily terminated with a container exit code of 0, and the\nsystem is not going to restart any of these containers.\n - POD_PHASE_SUCCEED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - POD_PHASE_FAILED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "v1alpha1PodSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1PodPhase" + }, + "containerNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "podIp": { + "type": "string" + } + } + }, + "v1alpha1PreviewSilenceRequest": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "matches": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1match" + } + }, + "size": { + "type": "string", + "format": "int64", + "title": "size limits the preview result,\nif not set, will use default 200" + } + } + }, + "v1alpha1PreviewSilenceResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + } + } + }, + "v1alpha1Process": { + "type": "object", + "properties": { + "serviceName": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1KeyValue" + } + } + } + }, + "v1alpha1PrometheusQueryRangeResult": { + "type": "object", + "properties": { + "matrix": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SampleStream" + } + } + } + }, + "v1alpha1PrometheusQueryResult": { + "type": "object", + "properties": { + "vector": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Sample" + } + } + } + }, + "v1alpha1QueryLogContextRequest": { + "type": "object", + "properties": { + "startTime": { + "type": "string" + }, + "endTime": { + "type": "string" + }, + "before": { + "type": "integer", + "format": "int32" + }, + "after": { + "type": "integer", + "format": "int32" + }, + "nanotimestamp": { + "type": "string" + }, + "resource": { + "$ref": "#/definitions/v1alpha1LogContextResourceFilter" + }, + "system": { + "$ref": "#/definitions/v1alpha1LogContextSystemFilter" + }, + "event": { + "$ref": "#/definitions/v1alpha1LogContextEventFilter" + } + } + }, + "v1alpha1QueryLogHistogramRequest": { + "type": "object", + "properties": { + "startTime": { + "type": "string" + }, + "endTime": { + "type": "string" + }, + "interval": { + "type": "string" + }, + "resource": { + "$ref": "#/definitions/v1alpha1LogQueryResourceFilter" + }, + "system": { + "$ref": "#/definitions/v1alpha1LogQuerySystemFilter" + }, + "event": { + "$ref": "#/definitions/v1alpha1LogQueryEventFilter" + } + } + }, + "v1alpha1QueryLogHistogramResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1LogHistogramResult" + } + } + } + }, + "v1alpha1QueryLogRequest": { + "type": "object", + "properties": { + "startTime": { + "type": "string" + }, + "endTime": { + "type": "string" + }, + "page": { + "type": "integer", + "format": "int32", + "description": "Page is current page." + }, + "pageSize": { + "type": "integer", + "format": "int32", + "description": "Size is the data number shown per page." + }, + "sorts": { + "type": "array", + "items": { + "type": "string" + } + }, + "resource": { + "$ref": "#/definitions/v1alpha1LogQueryResourceFilter" + }, + "system": { + "$ref": "#/definitions/v1alpha1LogQuerySystemFilter" + }, + "event": { + "$ref": "#/definitions/v1alpha1LogQueryEventFilter" + } + } + }, + "v1alpha1QueryLogResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1LogQueryResult" + } + }, + "pagination": { + "$ref": "#/definitions/v1alpha1Pagination" + } + } + }, + "v1alpha1Receiver": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1alpha1ReceiverType" + }, + "webhook": { + "$ref": "#/definitions/v1alpha1WebhookConfig" + }, + "email": { + "$ref": "#/definitions/v1alpha1EmailConfig" + }, + "wecom": { + "$ref": "#/definitions/v1alpha1WecomConfig" + }, + "dingtalk": { + "$ref": "#/definitions/v1alpha1DingtalkConfig" + }, + "createAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1ReceiverDataResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/v1alpha1Receiver" + } + } + }, + "v1alpha1ReceiverType": { + "type": "string", + "enum": [ + "RECEIVER_TYPE_UNSPECIFIED", + "webhook", + "email", + "dingtalk", + "wecom" + ], + "default": "RECEIVER_TYPE_UNSPECIFIED" + }, + "v1alpha1ResourceNumSummary": { + "type": "object", + "properties": { + "totalNum": { + "type": "integer", + "format": "int32" + }, + "readyNum": { + "type": "integer", + "format": "int32" + } + } + }, + "v1alpha1Role": { + "type": "string", + "enum": [ + "NOT_ADMIN", + "ADMIN" + ], + "default": "NOT_ADMIN" + }, + "v1alpha1Rule": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "expr": { + "type": "string" + }, + "thresholdSymbol": { + "type": "string", + "title": "when create rule from metric_tpl,use thresholdSymbol and thresholdNum to\ncomplete the promql" + }, + "thresholdNum": { + "type": "number", + "format": "float" + }, + "duration": { + "type": "string", + "title": "For evaluation interval in time.Duration format,like 30s, 1m, 1h" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "source": { + "$ref": "#/definitions/v1alpha1RuleSource" + }, + "status": { + "$ref": "#/definitions/v1alpha1RuleStatus" + }, + "promQL": { + "type": "string", + "title": "real sql that used to query, add info like cluster, namespaces" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "custiomized labels" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "custiomized annotations" + }, + "description": { + "type": "string" + }, + "createAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1RuleSource": { + "type": "string", + "enum": [ + "RULE_SOURCE_UNSPECIFIED", + "METRIC_TPL", + "PROMQL", + "LOG_TPL" + ], + "default": "RULE_SOURCE_UNSPECIFIED" + }, + "v1alpha1RuleStatus": { + "type": "string", + "enum": [ + "UNSPECIFIED", + "FIRING", + "ENABLED" + ], + "default": "UNSPECIFIED" + }, + "v1alpha1RuleSummary": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "source": { + "$ref": "#/definitions/v1alpha1RuleSource" + }, + "expr": { + "type": "string" + }, + "thresholdSymbol": { + "type": "string" + }, + "thresholdNum": { + "type": "number", + "format": "float" + }, + "status": { + "$ref": "#/definitions/v1alpha1RuleStatus" + }, + "description": { + "type": "string" + }, + "createAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1SafeTLSConfig": { + "type": "object", + "properties": { + "insecureSkipVerify": { + "type": "boolean" + } + } + }, + "v1alpha1Sample": { + "type": "object", + "properties": { + "metric": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "values": { + "$ref": "#/definitions/v1alpha1samplePair" + } + } + }, + "v1alpha1SampleStream": { + "type": "object", + "properties": { + "metric": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "values": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1samplePair" + } + } + } + }, + "v1alpha1SearchLogResponse": { + "type": "object", + "properties": { + "response": { + "type": "string" + } + } + }, + "v1alpha1ServerComponentSummary": { + "type": "object", + "properties": { + "summary": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1serverComponent" + } + } + } + }, + "v1alpha1Service": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "serviceType": { + "$ref": "#/definitions/v1alpha1ServiceType" + }, + "clusterIp": { + "type": "string" + }, + "workloadData": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1WorkloadSum" + } + } + } + }, + "v1alpha1ServiceItem": { + "type": "object", + "properties": { + "serviceName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "reqRate": { + "type": "number", + "format": "double" + }, + "repLatency": { + "type": "number", + "format": "double" + }, + "errorRate": { + "type": "number", + "format": "double" + } + } + }, + "v1alpha1ServiceType": { + "type": "string", + "enum": [ + "SERVICE_TYPE_UNSPECIFIED", + "CLUSTER_IP", + "NODE_PORT", + "LOAD_BALANCER", + "EXTERNAL_NAME" + ], + "default": "SERVICE_TYPE_UNSPECIFIED", + "description": "- SERVICE_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - CLUSTER_IP: ClusterIP means a service will only be accessible inside the cluster, via\nthe cluster IP.\n - NODE_PORT: NodePort means a service will be exposed on one port of every node, in\naddition to 'ClusterIP' type.\n - LOAD_BALANCER: LoadBalancer means a service will be exposed via an external load balancer\n(if the cloud provider supports it), in addition to 'NodePort' type.\n - EXTERNAL_NAME: ExternalName means a service consists of only a reference to an external\nname that kubedns or equivalent will return as a CNAME record, with no\nexposing or proxying of any pods involved.", + "title": "ServiceType string describes ingress methods for a service" + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1Silence": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "description": { + "type": "string" + }, + "matches": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1match" + } + }, + "activeTimeInterval": { + "$ref": "#/definitions/v1alpha1timeInterval" + }, + "expired": { + "type": "boolean" + }, + "createAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1SpanKind": { + "type": "string", + "enum": [ + "SPAN_KIND_UNSPECIFIED", + "SPAN_KIND_INTERNAL", + "SPAN_KIND_SERVER", + "SPAN_KIND_CLIENT", + "SPAN_KIND_PRODUCER", + "SPAN_KIND_CONSUMER" + ], + "default": "SPAN_KIND_UNSPECIFIED", + "description": "SpanKind is the type of span. Can be used to specify additional relationships between spans\nin addition to a parent/child relationship.\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans." + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + }, + "v1alpha1Template": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "body": { + "$ref": "#/definitions/v1alpha1TemplateBody" + }, + "builtin": { + "type": "boolean" + }, + "createAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1TemplateBody": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "wecom": { + "type": "string" + }, + "dingtalk": { + "type": "string" + }, + "webhook": { + "type": "string" + } + } + }, + "v1alpha1TemplateSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "updateAt": { + "type": "string", + "format": "int64" + }, + "builtin": { + "type": "boolean" + } + } + }, + "v1alpha1Trace": { + "type": "object", + "properties": { + "operationName": { + "type": "string" + }, + "processMap": { + "type": "array", + "items": { + "$ref": "#/definitions/TraceProcessMapping" + } + }, + "warnings": { + "type": "array", + "items": { + "type": "string" + } + }, + "traceId": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/TraceTraceStatus" + }, + "spanCount": { + "type": "integer", + "format": "int64" + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "duration": { + "type": "string" + } + } + }, + "v1alpha1TracesResponseChunk": { + "type": "object", + "properties": { + "traces": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Trace" + } + } + } + }, + "v1alpha1ValueType": { + "type": "string", + "enum": [ + "STRING", + "BOOL", + "INT64", + "FLOAT64", + "BINARY" + ], + "default": "STRING" + }, + "v1alpha1VersionInfo": { + "type": "object", + "properties": { + "gitVersion": { + "type": "string" + }, + "gitCommit": { + "type": "string" + }, + "buildDate": { + "type": "string" + }, + "goVersion": { + "type": "string" + }, + "compiler": { + "type": "string" + }, + "platform": { + "type": "string" + } + } + }, + "v1alpha1WebhookConfig": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "httpConfig": { + "$ref": "#/definitions/v1alpha1HTTPConfig" + } + } + }, + "v1alpha1WecomConfig": { + "type": "object", + "properties": { + "webhook": { + "type": "string" + } + } + }, + "v1alpha1Workload": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1WorkloadPhase" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "podNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Condition" + }, + "description": "conditions of current workload." + } + } + }, + "v1alpha1WorkloadKind": { + "type": "string", + "enum": [ + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET" + ], + "default": "DEPLOYMENT" + }, + "v1alpha1WorkloadPhase": { + "type": "string", + "enum": [ + "WORKLOAD_STATE_UNKNOWN", + "WORKLOAD_STATE_RUNNING", + "WORKLOAD_STATE_DELETING", + "WORKLOAD_STATE_NOT_READY", + "WORKLOAD_STATE_STOPPED", + "WORKLOAD_STATE_WAITING" + ], + "default": "WORKLOAD_STATE_UNKNOWN", + "title": "WorkloadPhase describes the state of\nworkload(deployments/daemonsets/statefulsets)" + }, + "v1alpha1WorkloadSum": { + "type": "object", + "properties": { + "workloadKind": { + "$ref": "#/definitions/WorkloadSumKind" + }, + "name": { + "type": "string" + } + } + }, + "v1alpha1agentModuleStatus": { + "type": "object", + "properties": { + "pods": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Pod" + } + } + } + }, + "v1alpha1countInfo": { + "type": "object", + "properties": { + "target": { + "type": "string", + "description": "target is the object that match the targetType, null means no specific\ntarget or not group_by_type." + }, + "sum": { + "type": "object", + "additionalProperties": { + "type": "string", + "format": "int64" + } + } + } + }, + "v1alpha1empty": { + "type": "object" + }, + "v1alpha1groupReceiver": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1alpha1ReceiverType" + }, + "names": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1alpha1groupRuleStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1alpha1RuleStatus" + }, + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "v1alpha1helmInstallConfigRequest": { + "type": "object", + "properties": { + "chartName": { + "type": "string" + }, + "version": { + "type": "string" + }, + "extra": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "key:registry_host,val:registry_url" + } + } + }, + "v1alpha1helmInstallConfigResponse": { + "type": "object", + "properties": { + "values": { + "type": "string" + } + } + }, + "v1alpha1insightAgentState": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1alpha1InsightAgentStatus" + }, + "version": { + "type": "string" + }, + "createTime": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1match": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1alpha1matchType" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1alpha1matchType": { + "type": "string", + "enum": [ + "MATCH_TYPE_UNSPECIFIED", + "EQUAL", + "NOT_EQUAL", + "REGEXP" + ], + "default": "MATCH_TYPE_UNSPECIFIED" + }, + "v1alpha1repeatConfig": { + "type": "object", + "properties": { + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "interval": { + "type": "integer", + "format": "int32", + "title": "interval unit is hour" + } + } + }, + "v1alpha1requestStatus": { + "type": "string", + "enum": [ + "STATUS_UNSPECIFIED", + "SUCCESS", + "FAIL" + ], + "default": "STATUS_UNSPECIFIED" + }, + "v1alpha1resourceType": { + "type": "string", + "enum": [ + "overview", + "dashboard", + "resourceInsight", + "scenarioInsight", + "dataQuery", + "alertList", + "alertRules", + "notificationSettings", + "alertSilence", + "notificationTemplates", + "dataCollection", + "systemComponents", + "systemSettings" + ], + "default": "overview", + "title": "refs: charts/insight/templates/ghippo/gproduct-resource-permissions.yaml#resourceTypes" + }, + "v1alpha1samplePair": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "int64" + }, + "value": { + "type": "string" + } + } + }, + "v1alpha1serverComponent": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/v1alpha1serverComponentName", + "title": "serverComponentName is service name" + }, + "workloadName": { + "type": "string", + "title": "workloadName is full workload name in cluster" + }, + "workloadNamespace": { + "type": "string", + "description": "workloadNamespace is namespace that workload installed, null means not in\nthis cluster." + }, + "workloadKind": { + "$ref": "#/definitions/v1alpha1WorkloadKind" + }, + "phase": { + "$ref": "#/definitions/v1alpha1WorkloadPhase" + }, + "availability": { + "type": "boolean" + }, + "message": { + "type": "string", + "title": "message give the reason when service is unavailable" + }, + "version": { + "type": "string" + }, + "podNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1serverComponentName": { + "type": "string", + "enum": [ + "NAME_UNSPECIFIED", + "VMINSERT", + "VMALERT", + "VMALERTMANAGER", + "VMSELECT", + "VMSTORAGE", + "GRAFANA", + "JAEGER_COLLECTOR", + "JAEGER_QUERY", + "OPENTELEMETRY_COLLECTOR", + "ELASTICSEARCH" + ], + "default": "NAME_UNSPECIFIED" + }, + "v1alpha1serviceSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "tracingEnabled": { + "type": "boolean", + "title": "tracing enabled" + } + } + }, + "v1alpha1timeInterval": { + "type": "object", + "properties": { + "timeRanges": { + "type": "array", + "items": { + "$ref": "#/definitions/timeIntervaltimeRange" + }, + "description": "if weekday_range is null, start and end is the unix timestamp like\n1678350699;\nif weekday_range is not null, start and end represents a range\nof seconds within a 86400 second day.In this case, start can be greater\nthan end; For example, 17:00 to End of the day would Start at 61200 and End\nat 86400.[default timezone is UTC]\nsupport multiple timerange if weekday_range is not null." + }, + "weekdayRange": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "description": "A list ranges between [0, 6] where 0 = Sunday.\nFor example: [1,2] means Monday and Tuesday.\n[0,1,2,3,4,5,6] means all week." + } + } + }, + "v1alpha1usage": { + "type": "object", + "properties": { + "cpuCapacity": { + "type": "string", + "format": "int64", + "description": "CpuCapacity is the total cpu of the node. Unit: m." + }, + "cpuAllocated": { + "type": "number", + "format": "double", + "description": "CpuAllocated is the total pod cpu request on the node. Unit: m." + }, + "cpuUsage": { + "type": "number", + "format": "double", + "description": "CpuUsage is the actual total pod cpu usage on the node. Unit: m." + }, + "memoryCapacity": { + "type": "string", + "format": "int64", + "description": "MemoryCapacity is the total memory of the node. Unit: byte." + }, + "memoryAllocated": { + "type": "number", + "format": "double", + "description": "MemoryAllocated is the total pod memory request on the node. Unit: byte." + }, + "memoryUsage": { + "type": "number", + "format": "double", + "description": "MemoryUsage is the actual total pod memory usage on the node. Unit: byte." + }, + "storageCapacity": { + "type": "string", + "format": "int64", + "description": "StorageCapacity is the total storage of the node. Unit: byte." + }, + "storageAllocated": { + "type": "string", + "format": "int64", + "description": "StorageAllocated is the total pod storage request on the node. Unit: byte." + }, + "storageUsage": { + "type": "number", + "format": "double", + "description": "StorageUsage is the actual total storage usage on the node. Unit: byte." + } + } + }, + "v1alpha1userinfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "isAdmin": { + "type": "boolean" + }, + "canView": { + "type": "boolean" + }, + "resourceTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1resourceType" + } + } + } + }, + "v1alpha1workloadSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/v1alpha1WorkloadPhase" + }, + "podNumSummary": { + "$ref": "#/definitions/v1alpha1ResourceNumSummary" + } + } + } + } +} diff --git a/openapi/insight/v0.16.0-alpha1.md b/openapi/insight/v0.16.0-alpha1.md new file mode 100644 index 00000000..715af50b --- /dev/null +++ b/openapi/insight/v0.16.0-alpha1.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/elasticsearch-index.md b/openapi/mcamel/elasticsearch-index.md new file mode 100644 index 00000000..361a70ac --- /dev/null +++ b/openapi/mcamel/elasticsearch-index.md @@ -0,0 +1,2 @@ +# 中间件服务 OpenAPI +- [版本 v0.7.0](./elasticsearch-v0.7.0.md) diff --git a/openapi/mcamel/elasticsearch-v0.7.0.json b/openapi/mcamel/elasticsearch-v0.7.0.json new file mode 100644 index 00000000..ade7ab13 --- /dev/null +++ b/openapi/mcamel/elasticsearch-v0.7.0.json @@ -0,0 +1,3031 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.7.0" + }, + "tags": [ + { + "name": "Cluster" + }, + { + "name": "Elasticsearch" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "Version" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/elasticsearch/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch": { + "post": { + "operationId": "Elasticsearch_CreateElasticsearch", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateElasticsearchResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateElasticsearchReq" + } + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch-operator/versions": { + "get": { + "operationId": "Elasticsearch_GetElasticsearchOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetElasticsearchOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch-params/{cluster}": { + "get": { + "operationId": "Elasticsearch_GetElasticsearchParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetElasticsearchParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "Elasticsearch_GetElasticsearch", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetElasticsearchResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Elasticsearch" + ] + }, + "delete": { + "operationId": "Elasticsearch_DeleteElasticsearch", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteElasticsearchResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unknown clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unknown namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,34}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Elasticsearch" + ] + }, + "put": { + "operationId": "Elasticsearch_UpdateElasticsearch", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateElasticsearchResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,34}[a-z0-9]$#input name!|input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Version\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateElasticsearchReqPorts" + } + }, + "nodeSets": { + "type": "array", + "items": { + "$ref": "#/definitions/NodeSets" + }, + "description": "NodeSet is the specification for a group of Elasticsearch nodes sharing the same configuration and a Pod template." + }, + "elasticsearchPassword": { + "type": "string", + "title": "elasticsearchPassword represents the elasticsearch's login password\n@inject_tag: v:\"required|passwordMid#input password|input valid password\"" + }, + "kibanaPorts": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateElasticsearchReqPorts" + }, + "title": "elasticsearchPassword represents the elasticsearch's kibanaPorts" + }, + "kibanaServiceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "kibanaServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "kibanaServiceExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "kibana" + }, + "kibanaServiceLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "kibanaServiceLbPoolName": { + "type": "string" + }, + "kibanaServiceLbAddress": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "Elasticsearch_GetElasticsearchGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetElasticsearchGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch/{cluster}/{namespace}/{name}/pods": { + "get": { + "operationId": "Elasticsearch_GetElasticsearchPodList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetElasticsearchPodListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearch/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "Elasticsearch_GetElasticsearchUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetElasticsearchUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/elasticsearchs": { + "post": { + "operationId": "Elasticsearch_DeleteElasticsearchs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteElasticsearchsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteElasticsearchsReq" + } + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{workspaceId}/elasticsearchs": { + "get": { + "operationId": "Elasticsearch_GetElasticsearchList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetElasticsearchListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Elasticsearch" + ] + } + }, + "/apis/mcamel.io/elasticsearch/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreateElasticsearchReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,34}[a-z0-9]$#input name!|input name!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Version\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateElasticsearchReqPorts" + } + }, + "nodeSets": { + "type": "array", + "items": { + "$ref": "#/definitions/NodeSets" + }, + "description": "NodeSet is the specification for a group of Elasticsearch nodes sharing the same configuration and a Pod template." + }, + "elasticsearchPassword": { + "type": "string", + "title": "elasticsearchPassword represents the elasticsearch's login password\n@inject_tag: v:\"required|passwordMid#input password|input valid password\"" + }, + "kibanaPorts": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateElasticsearchReqPorts" + }, + "title": "elasticsearchPassword represents the elasticsearch's kibanaPorts" + }, + "kibanaServiceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "kibanaServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "kibanaServiceExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "kibana" + }, + "kibanaServiceLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "kibanaServiceLbPoolName": { + "type": "string" + }, + "kibanaServiceLbAddress": { + "type": "string" + } + } + }, + "CreateElasticsearchReqPorts": { + "type": "object", + "properties": { + "nodePort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:ServiceType,NodePort|between:30000,32767#input nodePort port|input nodePort port\"" + } + } + }, + "CreateElasticsearchResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "DeleteElasticsearchReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unknown clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unknown namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,34}[a-z0-9]$#unknown name!\"" + } + } + }, + "DeleteElasticsearchResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteElasticsearchsReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeleteElasticsearchReq" + } + } + } + }, + "DeleteElasticsearchsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "ElasticSearchNodeRole": { + "type": "string", + "enum": [ + "NodeRole_UNSPECIFIED", + "NodeRole_DATACOLD", + "NodeRole_DATACONTENT", + "NodeRole_DATAFROZEN", + "NodeRole_DATAHOT", + "NodeRole_DATA", + "NodeRole_DATAWARM", + "NodeRole_INGEST", + "NodeRole_ML", + "NodeRole_MASTER", + "NodeRole_REMOTECLUSTERCLIENT", + "NodeRole_TRANSFORM", + "NodeRole_VOTINGONLY", + "NodeRole_KIBANA", + "NodeRole_Exporter" + ], + "default": "NodeRole_UNSPECIFIED" + }, + "ElasticsearchClusterItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/ElasticsearchClusterItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateElasticsearchReq" + }, + "status": { + "$ref": "#/definitions/ElasticsearchClusterItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "ElasticsearchClusterItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "finalizers": { + "type": "array", + "items": { + "type": "string" + } + }, + "generation": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "ElasticsearchClusterItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/StatusPhase", + "title": "phase represents the elasticsearch's status" + }, + "podsAreReadyNum": { + "type": "integer", + "format": "int32", + "title": "the elasticsearch's available nodes" + }, + "webManagerAddr": { + "type": "string", + "title": "kibana' web manager addr" + }, + "userName": { + "type": "string", + "title": "the elasticsearch's user name" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + }, + "title": "elasticsearch ip" + }, + "roleResource": { + "type": "array", + "items": { + "$ref": "#/definitions/StatusRoleResource" + } + }, + "allReplicaNum": { + "type": "integer", + "format": "int32", + "title": "data role count" + }, + "serviceAddr": { + "type": "string" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + }, + "isControl": { + "type": "boolean" + }, + "health": { + "$ref": "#/definitions/StatusHealth" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetElasticsearchGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetElasticsearchListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetElasticsearchListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/ElasticsearchClusterItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetElasticsearchOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetElasticsearchOperatorVersionListRespGetElasticsearchOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetElasticsearchOperatorVersionListRespGetElasticsearchOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "GetElasticsearchParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetElasticsearchParamRespSelect" + }, + "replicas": { + "$ref": "#/definitions/GetElasticsearchParamRespSelect" + }, + "resource": { + "$ref": "#/definitions/GetElasticsearchParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetElasticsearchParamRespSelect" + } + } + }, + "GetElasticsearchParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/SelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetElasticsearchParamRespSelectData" + } + } + } + }, + "GetElasticsearchParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/DataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/DataIntValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetElasticsearchPodListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetElasticsearchPodListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetElasticsearchPodListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetElasticsearchPodListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/Status" + }, + "nodeRole": { + "$ref": "#/definitions/ElasticSearchNodeRole" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "storageCapacityUtilization": { + "type": "number", + "format": "float" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetElasticsearchResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/ElasticsearchClusterItem" + } + } + }, + "GetElasticsearchUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetElasticsearchUsersRespUserItem" + } + } + } + }, + "GetElasticsearchUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "NodeSets": { + "type": "object", + "properties": { + "nodeType": { + "$ref": "#/definitions/NodeSetsNodeType", + "title": "NodeType represents elasticsearch's node" + }, + "replicas": { + "type": "integer", + "format": "int32", + "title": "replicas represents elasticsearch's node set count" + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input CpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input CpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input MemoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input MemoryLimit|resource\"" + }, + "storageClassName": { + "type": "string" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"resource#resource\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "tolerations": { + "type": "array", + "items": { + "$ref": "#/definitions/commonToleration" + } + } + } + }, + "NodeSetsNodeType": { + "type": "string", + "enum": [ + "UNKNOWN", + "Data", + "Kibana", + "Master", + "DataCold", + "DataHot", + "Coordination" + ], + "default": "UNKNOWN" + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "SelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "Status": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "StatusHealth": { + "type": "string", + "enum": [ + "Red", + "Yellow", + "Green", + "Unknown" + ], + "default": "Red" + }, + "StatusPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Ready", + "ApplyingChanges", + "MigratingData", + "Stalled", + "Invalid" + ], + "default": "PHASE_UNSPECIFIED" + }, + "StatusRoleResource": { + "type": "object", + "properties": { + "nodeRole": { + "$ref": "#/definitions/ElasticSearchNodeRole" + }, + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "cpuUtilization": { + "type": "number", + "format": "float" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + }, + "memoryUtilization": { + "type": "number", + "format": "float" + }, + "storageCapacity": { + "type": "string" + }, + "storageCapacityUtilization": { + "type": "number", + "format": "float" + } + } + }, + "UpdateElasticsearchResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "commonToleration": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "operator": { + "type": "string", + "title": "Operator valid string: Equal, Exists" + }, + "value": { + "type": "string" + }, + "effect": { + "type": "string", + "title": "Effect valid string: NoSchedule, PreferNoSchedule, NoExecute" + }, + "tolerationSeconds": { + "type": "string" + } + } + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/elasticsearch-v0.7.0.md b/openapi/mcamel/elasticsearch-v0.7.0.md new file mode 100644 index 00000000..958264d0 --- /dev/null +++ b/openapi/mcamel/elasticsearch-v0.7.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/kafka-index.md b/openapi/mcamel/kafka-index.md new file mode 100644 index 00000000..16c4cb08 --- /dev/null +++ b/openapi/mcamel/kafka-index.md @@ -0,0 +1,2 @@ +# 中间件服务 OpenAPI +- [版本 v0.5.0](./kafka-v0.5.0.md) diff --git a/openapi/mcamel/kafka-v0.5.0.json b/openapi/mcamel/kafka-v0.5.0.json new file mode 100644 index 00000000..4e10a553 --- /dev/null +++ b/openapi/mcamel/kafka-v0.5.0.json @@ -0,0 +1,3033 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.5.0" + }, + "tags": [ + { + "name": "Cluster" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "Kafka" + }, + { + "name": "Version" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/kafka/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka": { + "post": { + "operationId": "Kafka_CreateKafka", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateKafkaResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateKafkaReq" + } + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka-operator/versions": { + "get": { + "operationId": "Kafka_GetKafkaOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetKafkaOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka-params/{cluster}": { + "get": { + "operationId": "Kafka_GetKafkaParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetKafkaParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "Kafka_GetKafka", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetKafkaResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Kafka" + ] + }, + "delete": { + "operationId": "Kafka_DeleteKafka", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteKafkaResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "Kafka_GetKafkaGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetKafkaGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka/{cluster}/{namespace}/{name}/manager": { + "post": { + "operationId": "Kafka_AddKafkaToManager", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/AddKafkaToManagerResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object" + } + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka/{cluster}/{namespace}/{name}/nodes": { + "get": { + "operationId": "Kafka_GetKafkaNodeList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetKafkaNodeListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka/{cluster}/{namespace}/{name}/params": { + "put": { + "operationId": "Kafka_UpdateKafkaParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateKafkaParamsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:3.1.0#choose 3.1.0|choose 3.1.0\"" + }, + "kafkaReplicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#choose replicas|choose replicas\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/CreateKafkaReqServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateKafkaReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "kafkaConf": { + "type": "string" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "isOpenManager": { + "type": "boolean" + }, + "managerCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input cpuRequest|resource\"" + }, + "managerCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input cpuLimit|resource\"" + }, + "managerMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input memoryRequest|resource\"" + }, + "managerMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input memoryLimit|resource\"" + }, + "managerUser": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|length:4,64|regex:^[a-z|A-Z][a-z|0-9|-|_]+$#input user|input manager user|input user\" json:\"managerUser\"" + }, + "managerPass": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|passwordLow#input password|input valid password\" json:\"managerPass\"" + }, + "managerReplicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#choose replicas|choose replicas\"" + }, + "managerServiceType": { + "$ref": "#/definitions/CreateKafkaReqServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "managerPorts": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateKafkaReqPorts" + } + }, + "managerServiceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "zookeeperReplicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#choose replicas|choose replicas\"" + }, + "zookeeperConf": { + "type": "string" + }, + "zookeeperCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "zookeeperCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "zookeeperMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "zookeeperMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + } + } + } + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafka/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "Kafka_GetKafkaUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetKafkaUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/kafkas": { + "post": { + "operationId": "Kafka_DeleteKafkas", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteKafkasResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteKafkasReq" + } + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{workspaceId}/kafkas": { + "get": { + "operationId": "Kafka_GetKafkaList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetKafkaListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Kafka" + ] + } + }, + "/apis/mcamel.io/kafka/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "AddKafkaToManagerResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreateKafkaReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input name!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:3.1.0#choose 3.1.0|choose 3.1.0\"" + }, + "kafkaReplicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#choose replicas|choose replicas\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/CreateKafkaReqServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateKafkaReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "kafkaConf": { + "type": "string" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "isOpenManager": { + "type": "boolean" + }, + "managerCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input cpuRequest|resource\"" + }, + "managerCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input cpuLimit|resource\"" + }, + "managerMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input memoryRequest|resource\"" + }, + "managerMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|resource#input memoryLimit|resource\"" + }, + "managerUser": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|length:4,64|regex:^[a-z|A-Z][a-z|0-9|-|_]+$#input user|input manager user|input user\" json:\"managerUser\"" + }, + "managerPass": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenManager,true|passwordLow#input password|input valid password\" json:\"managerPass\"" + }, + "managerReplicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#choose replicas|choose replicas\"" + }, + "managerServiceType": { + "$ref": "#/definitions/CreateKafkaReqServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "managerPorts": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateKafkaReqPorts" + } + }, + "managerServiceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "zookeeperReplicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#choose replicas|choose replicas\"" + }, + "zookeeperConf": { + "type": "string" + }, + "zookeeperCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "zookeeperCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "zookeeperMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "zookeeperMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + } + } + }, + "CreateKafkaReqPorts": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name\"" + }, + "protocol": { + "type": "string", + "title": "@inject_tag: v:\"required|in:TCP,UDP#choose protocol|choose protocol\"" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "targetPort": { + "type": "integer", + "format": "int32" + }, + "nodePort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:ServiceType,NodePort|between:30000,32767#input nodePort port|input nodePort port\"" + } + } + }, + "CreateKafkaReqServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "CreateKafkaResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "DeleteKafkaReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unkonwn namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"" + } + } + }, + "DeleteKafkaResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteKafkasReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeleteKafkaReq" + } + } + } + }, + "DeleteKafkasResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetKafkaGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetKafkaListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetKafkaListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/KafkaClusterItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetKafkaNodeListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetKafkaNodeListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetKafkaNodeListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetKafkaNodeListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/GetKafkaNodeListRespPodStatus" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "nodeType": { + "$ref": "#/definitions/GetKafkaNodeListRespNodeType" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetKafkaNodeListRespNodeType": { + "type": "string", + "enum": [ + "Kafka", + "Zookeeper", + "Manager" + ], + "default": "Kafka" + }, + "GetKafkaNodeListRespPodStatus": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "GetKafkaOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetKafkaOperatorVersionListRespGetKafkaOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetKafkaOperatorVersionListRespGetKafkaOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "GetKafkaParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetKafkaParamRespSelect" + }, + "replicas": { + "$ref": "#/definitions/GetKafkaParamRespSelect" + }, + "resource": { + "$ref": "#/definitions/GetKafkaParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetKafkaParamRespSelect" + }, + "kafkaConf": { + "$ref": "#/definitions/GetKafkaParamRespSelect" + }, + "zookeeperConf": { + "$ref": "#/definitions/GetKafkaParamRespSelect" + } + } + }, + "GetKafkaParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/SelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetKafkaParamRespSelectData" + } + } + } + }, + "GetKafkaParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/DataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/DataIntValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetKafkaResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/KafkaClusterItem" + } + } + }, + "GetKafkaUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetKafkaUsersRespUserItem" + } + } + } + }, + "GetKafkaUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "KafkaClusterItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/KafkaClusterItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateKafkaReq" + }, + "status": { + "$ref": "#/definitions/KafkaClusterItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "KafkaClusterItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "KafkaClusterItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/Status" + }, + "webManagerAddr": { + "type": "string" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "serviceAddr": { + "type": "string" + }, + "kafkaPodsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "zookeeperPodsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + } + } + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "SelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "Status": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Creating" + ], + "default": "Failed" + }, + "UpdateKafkaParamsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/kafka-v0.5.0.md b/openapi/mcamel/kafka-v0.5.0.md new file mode 100644 index 00000000..a7c42e70 --- /dev/null +++ b/openapi/mcamel/kafka-v0.5.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/minio-index.md b/openapi/mcamel/minio-index.md new file mode 100644 index 00000000..056a479c --- /dev/null +++ b/openapi/mcamel/minio-index.md @@ -0,0 +1,2 @@ +# 中间件服务 OpenAPI +- [版本 v0.5.0](./minio-v0.5.0.md) diff --git a/openapi/mcamel/minio-v0.5.0.json b/openapi/mcamel/minio-v0.5.0.json new file mode 100644 index 00000000..5686515a --- /dev/null +++ b/openapi/mcamel/minio-v0.5.0.json @@ -0,0 +1,3146 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.5.0" + }, + "tags": [ + { + "name": "Cluster" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "Version" + }, + { + "name": "Minio" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/minio/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio": { + "post": { + "operationId": "Minio_CreateMinio", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateMinioResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateMinioReq" + } + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio-operator/versions": { + "get": { + "operationId": "Minio_GetMinioOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio-params/{cluster}": { + "get": { + "operationId": "Minio_GetMinioParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "Minio_GetMinio", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + }, + "delete": { + "operationId": "Minio_DeleteMinio", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteMinioResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/{cluster}/{namespace}/{name}/conf": { + "put": { + "operationId": "Minio_UpdateMinioConf", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateMinioConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "conf": { + "type": "string", + "title": "@inject_tag: v:\"required#input conf!\"" + } + } + } + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/{cluster}/{namespace}/{name}/confs": { + "get": { + "operationId": "Minio_GetMinioConfs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "Minio_GetMinioGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/{cluster}/{namespace}/{name}/nodes": { + "get": { + "operationId": "Minio_GetMinioNodeList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioNodeListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/{cluster}/{namespace}/{name}/params": { + "put": { + "operationId": "Minio_UpdateMinioParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateMinioParamsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input invalid name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:RELEASE.2022-10-02T19-29-29Z#input version!|input valid version!\"" + }, + "servers": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#input servers|input servers\"" + }, + "volumesPerServer": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#input volumes_per_server\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateMinioReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "instanceType": { + "$ref": "#/definitions/CreateMinioReqInstanceType" + }, + "consoleAccessKey": { + "type": "string" + }, + "consoleSecretKey": { + "type": "string" + }, + "consoleServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "consoleNodePort": { + "type": "integer", + "format": "int32" + }, + "consoleServiceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "minioRootUser": { + "type": "string", + "title": "@inject_tag: v:\"required#input minio_root_user\"" + }, + "minioRootPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input minio_root_password|input valid minio_root_password\"" + }, + "buckets": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateMinioReqBucket" + } + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minio/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "Minio_GetMinioUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/minios": { + "post": { + "operationId": "Minio_DeleteMinios", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteMiniosResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteMiniosReq" + } + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{workspaceId}/minios": { + "get": { + "operationId": "Minio_GetMinioList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Minio" + ] + } + }, + "/apis/mcamel.io/minio/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreateMinioReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input invalid name!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:RELEASE.2022-10-02T19-29-29Z#input version!|input valid version!\"" + }, + "servers": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|min:1#input servers|input servers\"" + }, + "volumesPerServer": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#input volumes_per_server\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateMinioReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "instanceType": { + "$ref": "#/definitions/CreateMinioReqInstanceType" + }, + "consoleAccessKey": { + "type": "string" + }, + "consoleSecretKey": { + "type": "string" + }, + "consoleServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "consoleNodePort": { + "type": "integer", + "format": "int32" + }, + "consoleServiceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "minioRootUser": { + "type": "string", + "title": "@inject_tag: v:\"required#input minio_root_user\"" + }, + "minioRootPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input minio_root_password|input valid minio_root_password\"" + }, + "buckets": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateMinioReqBucket" + } + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + } + } + }, + "CreateMinioReqBucket": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name\"" + } + } + }, + "CreateMinioReqInstanceType": { + "type": "string", + "enum": [ + "HighAvailable", + "Single" + ], + "default": "HighAvailable" + }, + "CreateMinioReqPorts": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name\"" + }, + "protocol": { + "type": "string", + "title": "@inject_tag: v:\"required|in:TCP,UDP#choose protocol|choose protocol\"" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "targetPort": { + "type": "integer", + "format": "int32" + }, + "nodePort": { + "type": "integer", + "format": "int32" + } + } + }, + "CreateMinioResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "DeleteMinioReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unkonwn namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"" + } + } + }, + "DeleteMinioResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteMiniosReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeleteMinioReq" + } + } + } + }, + "DeleteMiniosResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetMinioConfReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMinioConfResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMinioConfRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + }, + "conf": { + "$ref": "#/definitions/UpdateMinioConfReq" + } + } + }, + "GetMinioConfRespItems": { + "type": "object", + "properties": { + "paramType": { + "$ref": "#/definitions/ItemsParamType" + }, + "paramName": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "GetMinioGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetMinioListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMinioListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/TenantItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMinioNodeListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMinioNodeListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMinioNodeListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMinioNodeListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/GetMinioNodeListRespPodStatus" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetMinioNodeListRespPodStatus": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "GetMinioOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMinioOperatorVersionListRespGetMinioOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMinioOperatorVersionListRespGetMinioOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "GetMinioParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetMinioParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetMinioParamRespSelect" + } + } + }, + "GetMinioParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/SelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMinioParamRespSelectData" + } + } + } + }, + "GetMinioParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/DataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/DataIntValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetMinioResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/TenantItem" + } + } + }, + "GetMinioUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMinioUsersRespUserItem" + } + } + } + }, + "GetMinioUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsParamType": { + "type": "string", + "enum": [ + "conf" + ], + "default": "conf" + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "SelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "Status": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Creating" + ], + "default": "Failed" + }, + "TenantItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/TenantItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateMinioReq" + }, + "status": { + "$ref": "#/definitions/TenantItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "TenantItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "TenantItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/Status" + }, + "podsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "webManagerAddr": { + "type": "string" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "serviceAddr": { + "type": "string" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + } + } + }, + "UpdateMinioConfReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"required#input conf!\"" + } + } + }, + "UpdateMinioConfResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateMinioParamsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/minio-v0.5.0.md b/openapi/mcamel/minio-v0.5.0.md new file mode 100644 index 00000000..fd1e7f6f --- /dev/null +++ b/openapi/mcamel/minio-v0.5.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/mysql-index.md b/openapi/mcamel/mysql-index.md new file mode 100644 index 00000000..e1b1b805 --- /dev/null +++ b/openapi/mcamel/mysql-index.md @@ -0,0 +1,2 @@ +# 中间件服务 OpenAPI +- [版本 v0.8.0](./mysql-v0.8.0.md) diff --git a/openapi/mcamel/mysql-v0.8.0.json b/openapi/mcamel/mysql-v0.8.0.json new file mode 100644 index 00000000..9331e725 --- /dev/null +++ b/openapi/mcamel/mysql-v0.8.0.json @@ -0,0 +1,5098 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.8.0" + }, + "tags": [ + { + "name": "Mysql" + }, + { + "name": "Cluster" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "StorageConfig" + }, + { + "name": "Version" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/mysql/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql": { + "post": { + "operationId": "Mysql_CreateMysql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateMysqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateMysqlReq" + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql-operator/versions": { + "get": { + "operationId": "Mysql_GetMysqlOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql-params/{cluster}": { + "get": { + "operationId": "Mysql_GetMysqlParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "Mysql_GetMysql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + }, + "delete": { + "operationId": "Mysql_DeleteMysql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteMysqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/backup": { + "delete": { + "operationId": "Mysql_DeleteMysqlBackup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteMysqlBackupResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "cluster's name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + }, + "post": { + "operationId": "Mysql_CreateMysqlBackup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateMysqlBackupResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|input clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "cluster's name\n@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "backupName": { + "type": "string", + "title": "backup's name\n@inject_tag: v:\"required#unknown name!\"" + }, + "backupBucket": { + "type": "string", + "title": "backup's bucket" + }, + "backupBucketSubPath": { + "type": "string", + "title": "backup's bucket sub path" + } + } + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/backup/config": { + "put": { + "operationId": "Mysql_UpdateMysqlBackupConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateMysqlBackupConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|unknown backup_schedule!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "backupSchedule": { + "type": "string", + "title": "backup's backup_schedule" + }, + "backupBucket": { + "type": "string", + "title": "Deprecated: backup's bucket, find bucket in storage_config_name instead" + }, + "backupHistoryLimit": { + "type": "integer", + "format": "int32", + "title": "backup's history limit" + }, + "backupBucketSubPath": { + "type": "string", + "title": "backup's bucket sub path\n@inject_tag: v:\"regex:^(/[^/ ]*)+/?$#invalid path!\"" + }, + "isOpenAutoBackup": { + "type": "boolean", + "title": "if open auto backup" + }, + "storageConfigName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_name!\"" + }, + "storageConfigNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_namespace!\"" + }, + "storageConfigCluster": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_cluster!\"" + } + } + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/backup/jobs": { + "get": { + "operationId": "Mysql_GetMysqlBackupJobList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlBackupJobListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster info", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "namespace info", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "name info", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "backupName", + "description": "job's backupname", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/backups": { + "get": { + "operationId": "Mysql_GetMysqlBackupList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlBackupListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster info", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "namespace info", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "name info", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/conf": { + "put": { + "operationId": "Mysql_UpdateMysqlConf", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateMysqlConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "conf": { + "type": "string", + "title": "@inject_tag: v:\"required#input conf!\"" + } + } + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/confs": { + "get": { + "operationId": "Mysql_GetMysqlConfs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "Mysql_GetMysqlGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/nodes": { + "get": { + "operationId": "Mysql_GetMysqlNodeList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlNodeListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/params": { + "put": { + "operationId": "Mysql_UpdateMysqlParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateMysqlParamsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"withFiledsMaxLen:%v-mysql-%v.mysql.%v,name,replicas,namespace,60|required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#fields too long!|input name!|input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|supportVersion#choose version|choose version\"" + }, + "replicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100|not-in:2#choose replicas|choose replicas between 3 and 100\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "rootPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input password|input valid password\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateMysqlReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string", + "title": "mysql's conf" + }, + "backupSchedule": { + "type": "string", + "title": "backup's backup_schedule" + }, + "backupSecretName": { + "type": "string", + "title": "backup's secret" + }, + "backupBucket": { + "type": "string", + "title": "Deprecated: will get bucket name from storage_config_name\nbackup's bucket" + }, + "isOpenPhpAdmin": { + "type": "boolean", + "title": "isOpenPhpAdmin, phpAdmin set ,if true,will deploy phpadmin,if false do notiong with phpAdmin" + }, + "phpAdminServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "phpAdminService,default clusterIP\n@inject_tag: v:\"serviceType#choose phpAdminServiceType\"" + }, + "phpAdminNodePort": { + "type": "integer", + "format": "int32", + "title": "if PhpAdminServiceType is nodePort,it will required!" + }, + "phpAdminCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input cpuRequest|resource\"" + }, + "phpAdminCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input cpuLimit|resource\"" + }, + "phpAdminMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input memoryRequest|resource\"" + }, + "phpAdminMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input memoryLimit|resource\"" + }, + "backupHistoryLimit": { + "type": "integer", + "format": "int32", + "title": "backup's history limit" + }, + "backupBucketSubPath": { + "type": "string", + "title": "backup's bucket sub path" + }, + "initBackupPath": { + "type": "string", + "title": "init backup file path, if set, will create mysql cluster from backup" + }, + "initBackupSecretName": { + "type": "string", + "title": "init backup secret name, operator use it to clone backup file from remote storage" + }, + "isOpenAutoBackup": { + "type": "boolean", + "title": "if open auto backup" + }, + "initSourceMysqlClusterName": { + "type": "string", + "title": "init_source_mysql_cluster_name is the recover source of current cluster" + }, + "initSourceBackupName": { + "type": "string", + "title": "init_source_mysql_cluster_namespace is the source backup name" + }, + "storageConfigName": { + "type": "string" + }, + "storageConfigNamespace": { + "type": "string" + }, + "storageConfigCluster": { + "type": "string" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "phpAdminExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "phpadmin lb" + }, + "phpAdminLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "phpAdminLbPoolName": { + "type": "string" + }, + "phpAdminLbAddress": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/recover": { + "post": { + "operationId": "Mysql_CreateMysqlRecover", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateMysqlRecoverResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "name is source mysql cluster get config from source mysql cluster\n@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "backupName": { + "type": "string", + "title": "backup_name \n@inject_tag: v:\"required#input backup name for new cluster!\"" + }, + "targetMysqlClusterName": { + "type": "string", + "title": "target_mysql_cluster_name, the cluster to create\n@inject_tag: v:\"required#input name!\"" + } + } + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "Mysql_GetMysqlUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{workspaceId}/providers": { + "get": { + "operationId": "Mysql_GetMysqlBackupProviderList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlBackupProviderListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysql/{workspaceId}/secret": { + "get": { + "operationId": "Mysql_GetMysqlBackupSecret", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlBackupSecretResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"get|min:1#RBAC error|choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Mysql" + ] + }, + "put": { + "operationId": "Mysql_SetMysqlBackupSecret", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/SetMysqlBackupSecretResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"update|min:1#RBAC error|choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string" + }, + "accessKey": { + "type": "string" + }, + "secretKey": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "provider": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/mysqls": { + "post": { + "operationId": "Mysql_DeleteMysqls", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteMysqlsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteMysqlsReq" + } + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/storage-config/bucket/check-job": { + "post": { + "operationId": "StorageConfig_CreateStorageConfigBucketCheckJob", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateStorageConfigBucketCheckJobResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateStorageConfigBucketCheckJobReq" + } + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/storage-config/param": { + "get": { + "operationId": "StorageConfig_GetStorageConfigParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/minios": { + "get": { + "operationId": "Mysql_GetMinioList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/mysqls": { + "get": { + "operationId": "Mysql_GetMysqlList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMysqlListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterCluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterNamespace", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Mysql" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/storage-config": { + "post": { + "operationId": "StorageConfig_CreateStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"in:minio,minio-wild,s3#choose storage type!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required-unless:storageType,minio#input endpoint if storage type is not minio!\"" + }, + "minioCluster": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "minioNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "minioName": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + }, + "description": { + "type": "string" + } + } + } + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/storage-config/{cluster}/{namespace}/{name}": { + "delete": { + "operationId": "StorageConfig_DeleteStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/storage-config/{name}": { + "get": { + "operationId": "StorageConfig_GetStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + }, + "put": { + "operationId": "StorageConfig_UpdateStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"in:minio,minio-wild,s3#choose storage type!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required-unless:storageType,minio#input endpoint if storage type is not minio!\"" + }, + "minioCluster": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "minioNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "minioName": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + }, + "description": { + "type": "string" + } + } + } + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/storage-config/{name}/consumers": { + "get": { + "operationId": "StorageConfig_GetStorageConfigConsumers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigConsumersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/storage-configs": { + "get": { + "operationId": "StorageConfig_GetStorageConfigList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/mysql/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreateMysqlBackupReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|input clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#input namespace!\"" + }, + "name": { + "type": "string", + "title": "cluster's name\n@inject_tag: v:\"required#input name!\"" + }, + "backupName": { + "type": "string", + "title": "backup's name\n@inject_tag: v:\"required#unknown name!\"" + }, + "backupBucket": { + "type": "string", + "title": "backup's bucket" + }, + "backupBucketSubPath": { + "type": "string", + "title": "backup's bucket sub path" + } + } + }, + "CreateMysqlBackupResp": { + "type": "object", + "properties": { + "message": { + "type": "string", + "title": "when create,message will write" + } + } + }, + "CreateMysqlRecoverResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateMysqlReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"withFiledsMaxLen:%v-mysql-%v.mysql.%v,name,replicas,namespace,60|required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#fields too long!|input name!|input name!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|supportVersion#choose version|choose version\"" + }, + "replicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100|not-in:2#choose replicas|choose replicas between 3 and 100\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "rootPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input password|input valid password\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateMysqlReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string", + "title": "mysql's conf" + }, + "backupSchedule": { + "type": "string", + "title": "backup's backup_schedule" + }, + "backupSecretName": { + "type": "string", + "title": "backup's secret" + }, + "backupBucket": { + "type": "string", + "title": "Deprecated: will get bucket name from storage_config_name\nbackup's bucket" + }, + "isOpenPhpAdmin": { + "type": "boolean", + "title": "isOpenPhpAdmin, phpAdmin set ,if true,will deploy phpadmin,if false do notiong with phpAdmin" + }, + "phpAdminServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "phpAdminService,default clusterIP\n@inject_tag: v:\"serviceType#choose phpAdminServiceType\"" + }, + "phpAdminNodePort": { + "type": "integer", + "format": "int32", + "title": "if PhpAdminServiceType is nodePort,it will required!" + }, + "phpAdminCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input cpuRequest|resource\"" + }, + "phpAdminCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input cpuLimit|resource\"" + }, + "phpAdminMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input memoryRequest|resource\"" + }, + "phpAdminMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-with:IsOpenPhpAdmin|resource#input memoryLimit|resource\"" + }, + "backupHistoryLimit": { + "type": "integer", + "format": "int32", + "title": "backup's history limit" + }, + "backupBucketSubPath": { + "type": "string", + "title": "backup's bucket sub path" + }, + "initBackupPath": { + "type": "string", + "title": "init backup file path, if set, will create mysql cluster from backup" + }, + "initBackupSecretName": { + "type": "string", + "title": "init backup secret name, operator use it to clone backup file from remote storage" + }, + "isOpenAutoBackup": { + "type": "boolean", + "title": "if open auto backup" + }, + "initSourceMysqlClusterName": { + "type": "string", + "title": "init_source_mysql_cluster_name is the recover source of current cluster" + }, + "initSourceBackupName": { + "type": "string", + "title": "init_source_mysql_cluster_namespace is the source backup name" + }, + "storageConfigName": { + "type": "string" + }, + "storageConfigNamespace": { + "type": "string" + }, + "storageConfigCluster": { + "type": "string" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "phpAdminExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "phpadmin lb" + }, + "phpAdminLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "phpAdminLbPoolName": { + "type": "string" + }, + "phpAdminLbAddress": { + "type": "string" + } + } + }, + "CreateMysqlReqPorts": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name\"" + }, + "protocol": { + "type": "string", + "title": "@inject_tag: v:\"required|in:TCP,UDP#choose protocol|choose protocol\"" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "targetPort": { + "type": "integer", + "format": "int32" + }, + "nodePort": { + "type": "integer", + "format": "int32" + } + } + }, + "CreateMysqlResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateStorageConfigBucketCheckJobReq": { + "type": "object", + "properties": { + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"required|in:minio,minio-wild,s3:#choose storage type!|choose valid storage type!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required#input endpoint!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket name!\"" + }, + "cluster": { + "type": "string", + "title": "minio cluster\n@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "namespace": { + "type": "string", + "title": "minio namespace\n@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "name": { + "type": "string", + "title": "minio name\n@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + } + } + }, + "CreateStorageConfigBucketCheckJobResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateStorageConfigReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"in:minio,minio-wild,s3#choose storage type!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required-unless:storageType,minio#input endpoint if storage type is not minio!\"" + }, + "minioCluster": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "minioNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "minioName": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + }, + "description": { + "type": "string" + } + } + }, + "CreateStorageConfigResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DeleteMysqlBackupResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteMysqlReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unkonwn namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"" + } + } + }, + "DeleteMysqlResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteMysqlsReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeleteMysqlReq" + } + } + } + }, + "DeleteMysqlsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteStorageConfigResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetMinioListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMinioListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/TenantItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMysqlBackupJobItemGetMysqlBackupJobItemSpec": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "parallelism": { + "type": "integer", + "format": "int32" + }, + "completions": { + "type": "integer", + "format": "int32" + }, + "jobType": { + "$ref": "#/definitions/GetMysqlBackupJobItemSpecJobType" + }, + "completionTimestamp": { + "type": "string", + "format": "int64" + }, + "backupType": { + "$ref": "#/definitions/GetMysqlBackupJobItemGetMysqlBackupJobItemSpecBackupType" + }, + "backupPath": { + "type": "string" + } + } + }, + "GetMysqlBackupJobItemGetMysqlBackupJobItemSpecBackupType": { + "type": "string", + "enum": [ + "Full" + ], + "default": "Full" + }, + "GetMysqlBackupJobItemSpecJobType": { + "type": "string", + "enum": [ + "Auto", + "Manual" + ], + "default": "Auto" + }, + "GetMysqlBackupJobItemStatusStatus": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Complete" + ], + "default": "Failed" + }, + "GetMysqlBackupJobListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMysqlBackupJobListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMysqlBackupJobListRespGetMysqlBackupJobItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + }, + "status": { + "$ref": "#/definitions/GetMysqlBackupJobListRespStatus" + } + } + }, + "GetMysqlBackupJobListRespGetMysqlBackupJobItem": { + "type": "object", + "properties": { + "spec": { + "$ref": "#/definitions/GetMysqlBackupJobItemGetMysqlBackupJobItemSpec" + }, + "status": { + "$ref": "#/definitions/GetMysqlBackupJobListRespGetMysqlBackupJobItemStatus" + } + } + }, + "GetMysqlBackupJobListRespGetMysqlBackupJobItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetMysqlBackupJobItemStatusStatus" + }, + "message": { + "type": "string" + } + } + }, + "GetMysqlBackupJobListRespStatus": { + "type": "object", + "properties": { + "isConfigAutoBackup": { + "type": "boolean" + }, + "backupSchedule": { + "type": "string", + "title": "backup's backup_schedule" + }, + "backupSecretName": { + "type": "string", + "title": "backup's secret" + }, + "backupBucket": { + "type": "string", + "title": "backup's bucket" + }, + "backupBucketSubPath": { + "type": "string" + } + } + }, + "GetMysqlBackupListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMysqlBackupListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/MysqlBackupItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMysqlBackupProviderListResp": { + "type": "object", + "properties": { + "provider": { + "$ref": "#/definitions/GetMysqlParamRespSelect" + } + } + }, + "GetMysqlBackupSecretResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/SetMysqlBackupSecretReq" + } + } + }, + "GetMysqlConfReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMysqlConfResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMysqlConfRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + }, + "conf": { + "$ref": "#/definitions/UpdateMysqlConfReq" + } + } + }, + "GetMysqlConfRespItems": { + "type": "object", + "properties": { + "paramType": { + "$ref": "#/definitions/ItemsParamType" + }, + "paramName": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "GetMysqlGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetMysqlListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMysqlListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/MysqlClusterItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMysqlNodeListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMysqlNodeListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMysqlNodeListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMysqlNodeListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/GetMysqlNodeListRespPodStatus" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "nodeType": { + "$ref": "#/definitions/GetMysqlNodeListRespNodeType" + }, + "healthStatus": { + "$ref": "#/definitions/GetMysqlNodeListRespHealthStatus" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetMysqlNodeListRespHealthStatus": { + "type": "string", + "enum": [ + "HealthStatusUnknown", + "HealthStatusHealthy", + "HealthStatusUnhealthy" + ], + "default": "HealthStatusUnknown", + "description": " - HealthStatusUnknown: Unknown means the state of the pod is unknown.\n - HealthStatusHealthy: Healthy means the pod is healthy.\n - HealthStatusUnhealthy: Unhealthy means the pod is unhealthy." + }, + "GetMysqlNodeListRespNodeType": { + "type": "string", + "enum": [ + "Master", + "Replica", + "PhpAdmin" + ], + "default": "Master" + }, + "GetMysqlNodeListRespPodStatus": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "GetMysqlOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMysqlOperatorVersionListRespGetMysqlOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetMysqlOperatorVersionListRespGetMysqlOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "GetMysqlParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetMysqlParamRespSelect" + }, + "replicas": { + "$ref": "#/definitions/GetMysqlParamRespSelect" + }, + "resource": { + "$ref": "#/definitions/GetMysqlParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetMysqlParamRespSelect" + }, + "cnf": { + "$ref": "#/definitions/GetMysqlParamRespSelect", + "title": "cnf is mysql 5.x conf" + }, + "eightXcnf": { + "$ref": "#/definitions/GetMysqlParamRespSelect", + "title": "eightXcnf is mysql 8.x conf" + } + } + }, + "GetMysqlParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/GetMysqlParamRespSelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMysqlParamRespSelectData" + } + } + } + }, + "GetMysqlParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/GetMysqlParamRespSelectDataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/GetMysqlParamRespSelectDataIntValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetMysqlParamRespSelectDataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "GetMysqlParamRespSelectDataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "GetMysqlParamRespSelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "GetMysqlResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/MysqlClusterItem" + } + } + }, + "GetMysqlUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMysqlUsersRespUserItem" + } + } + } + }, + "GetMysqlUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetStorageConfigConsumersResp": { + "type": "object", + "properties": { + "consumers": { + "type": "array", + "items": { + "$ref": "#/definitions/GetStorageConfigConsumersRespConsumer" + } + } + } + }, + "GetStorageConfigConsumersRespConsumer": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/GetStorageConfigConsumersRespStorageConfigConsumerType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "GetStorageConfigConsumersRespStorageConfigConsumerType": { + "type": "string", + "enum": [ + "STORAGE_CONFIG_CONSUMER_TYPE_UNSPECIFIED", + "STORAGE_CONFIG_CONSUMER_TYPE_MYSQL", + "STORAGE_CONFIG_CONSUMER_TYPE_REDIS" + ], + "default": "STORAGE_CONFIG_CONSUMER_TYPE_UNSPECIFIED" + }, + "GetStorageConfigListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetStorageConfigListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/StorageConfigItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetStorageConfigParamResp": { + "type": "object", + "properties": { + "storageType": { + "$ref": "#/definitions/GetStorageConfigParamRespSelect" + } + } + }, + "GetStorageConfigParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectData" + } + } + } + }, + "GetStorageConfigParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectDataStringValue" + }, + "iValue": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectDataIntValue" + } + } + }, + "GetStorageConfigParamRespSelectDataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "GetStorageConfigParamRespSelectDataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "GetStorageConfigParamRespSelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "GetStorageConfigResp": { + "type": "object", + "properties": { + "item": { + "$ref": "#/definitions/StorageConfigItem" + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsParamType": { + "type": "string", + "enum": [ + "conf" + ], + "default": "conf" + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "MysqlBackupItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/MysqlBackupItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateMysqlBackupReq" + }, + "status": { + "$ref": "#/definitions/MysqlBackupItemStatus" + } + } + }, + "MysqlBackupItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "MysqlBackupItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/MysqlBackupItemStatusStatus" + }, + "message": { + "type": "string" + }, + "backupUrl": { + "type": "string" + }, + "backupType": { + "$ref": "#/definitions/MysqlBackupItemStatusBackupType" + }, + "backupMethod": { + "$ref": "#/definitions/MysqlBackupItemStatusBackupMethod" + }, + "completionTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "MysqlBackupItemStatusBackupMethod": { + "type": "string", + "enum": [ + "Manual", + "Auto" + ], + "default": "Manual" + }, + "MysqlBackupItemStatusBackupType": { + "type": "string", + "enum": [ + "Full", + "Incremental" + ], + "default": "Full" + }, + "MysqlBackupItemStatusStatus": { + "type": "string", + "enum": [ + "Running", + "Failed", + "Succeeded" + ], + "default": "Running" + }, + "MysqlClusterItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/MysqlClusterItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateMysqlReq" + }, + "status": { + "$ref": "#/definitions/MysqlClusterItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "MysqlClusterItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "MysqlClusterItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/Status" + }, + "podsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "webManagerAddr": { + "type": "string" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "isAutoBackupEnabled": { + "type": "boolean" + }, + "serviceAddr": { + "type": "string" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + }, + "isControl": { + "type": "boolean" + }, + "secondsBehindMaster": { + "type": "number", + "format": "float" + }, + "cpuUtilization": { + "type": "number", + "format": "float" + }, + "memoryUtilization": { + "type": "number", + "format": "float" + } + } + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "SetMysqlBackupSecretReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"update|min:1#RBAC error|choose workspace_id!\"" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string" + }, + "accessKey": { + "type": "string" + }, + "secretKey": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "provider": { + "type": "string" + } + } + }, + "SetMysqlBackupSecretResp": { + "type": "object", + "properties": { + "message": { + "type": "string", + "title": "create message" + } + } + }, + "Status": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Creating" + ], + "default": "Failed" + }, + "StorageConfigItem": { + "type": "object", + "properties": { + "spec": { + "$ref": "#/definitions/CreateStorageConfigReq" + }, + "status": { + "$ref": "#/definitions/StorageConfigItemStorageConfigStatus" + } + } + }, + "StorageConfigItemStorageConfigStatus": { + "type": "object", + "properties": { + "lastUpdateTimestamp": { + "type": "string", + "format": "int64" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "TenantItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "spec": { + "$ref": "#/definitions/TenantItemCreateMinioReq" + }, + "status": { + "$ref": "#/definitions/TenantItemStatus" + } + } + }, + "TenantItemCreateMinioReq": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "cluster": { + "type": "string" + } + } + }, + "TenantItemStatus": { + "type": "object", + "properties": { + "common": { + "$ref": "#/definitions/commonCommonItemStatus", + "title": "Status status= 1;\nint32 pods_are_ready_num=2;\nstring web_manager_addr=3;\nrepeated string cluster_i_ps=4;\nstring service_addr=6;" + } + } + }, + "UpdateMysqlBackupConfigResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateMysqlConfReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"required#input conf!\"" + } + } + }, + "UpdateMysqlConfResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateMysqlParamsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateStorageConfigResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/mysql-v0.8.0.md b/openapi/mcamel/mysql-v0.8.0.md new file mode 100644 index 00000000..370cd918 --- /dev/null +++ b/openapi/mcamel/mysql-v0.8.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/postgresql-index.md b/openapi/mcamel/postgresql-index.md new file mode 100644 index 00000000..f49e686b --- /dev/null +++ b/openapi/mcamel/postgresql-index.md @@ -0,0 +1,5 @@ +# 中间件服务 OpenAPI + +- [版本 v0.1.0](./postgresql-v0.1.0.md) +- [版本 v0.1.1](./postgresql-v0.1.1.md) + diff --git a/openapi/mcamel/postgresql-v0.1.0.json b/openapi/mcamel/postgresql-v0.1.0.json new file mode 100644 index 00000000..0fbd2a6f --- /dev/null +++ b/openapi/mcamel/postgresql-v0.1.0.json @@ -0,0 +1,3236 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.1.0" + }, + "tags": [ + { + "name": "Cluster" + }, + { + "name": "Postgresql" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "Version" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/postgresql/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgres-operator/versions": { + "get": { + "operationId": "Postgresql_GetPostgresqlOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql": { + "post": { + "operationId": "Postgresql_CreatePostgresql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreatePostgresqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreatePostgresqlReq" + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql-params/{cluster}": { + "get": { + "operationId": "Postgresql_GetPostgresqlParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "Postgresql_GetPostgresql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + }, + "delete": { + "operationId": "Postgresql_DeletePostgresql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeletePostgresqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/conf": { + "put": { + "operationId": "Postgresql_UpdatePostgresqlConf", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdatePostgresqlConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + } + } + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/confs": { + "get": { + "operationId": "Postgresql_GetPostgresqlConfs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "Postgresql_GetPostgresqlGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/params": { + "put": { + "operationId": "Postgresql_UpdatePostgresqlParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdatePostgresqlParamsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input invalid name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:15#input version!|input valid version!\"" + }, + "numberOfInstances": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100#choose replicas|choose replicas between 1 and 100\"" + }, + "synchronousMode": { + "type": "boolean" + }, + "synchronousModeStrict": { + "type": "boolean" + }, + "synchronousNodeCount": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:synchronousMode,true#input synchronous_node_count when synchronous_mode is true!\"" + }, + "superuserPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input superuser_password|input valid superuser_password!\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreatePostgresqlReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + }, + "isOpenPgAdmin": { + "type": "boolean", + "title": "isOpenPgAdmin, PgAdmin set ,if true,will deploy Pgadmin,if false do notiong with PgAdmin" + }, + "pgAdminServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose PgAdminServiceType\"" + }, + "pgAdminNodePort": { + "type": "integer", + "format": "int32", + "title": "if PgAdminServiceType is nodePort,it will required!" + }, + "pgAdminCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_request\"" + }, + "pgAdminCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_limit\"" + }, + "pgAdminMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_request\"" + }, + "pgAdminMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_limit\"" + }, + "pgAdminServerModeEnable": { + "type": "boolean" + }, + "pgAdminDefaultEmail": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_email if PgAdminServerModeEnable is true\"" + }, + "pgAdminDefaultPassword": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_password if PgAdminServerModeEnable is true\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "pgAdminExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "pgAdmin lb" + }, + "pgAdminLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "pgAdminLbPoolName": { + "type": "string" + }, + "pgAdminLbAddress": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/pods": { + "get": { + "operationId": "Postgresql_GetPostgresqlPodList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlPodListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "Postgresql_GetPostgresqlUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresqls": { + "post": { + "operationId": "Postgresql_DeletePostgresqls", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeletePostgresqlsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeletePostgresqlsReq" + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{workspaceId}/postgresqls": { + "get": { + "operationId": "Postgresql_GetPostgresqlList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterCluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterNamespace", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreatePostgresqlReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input invalid name!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:15#input version!|input valid version!\"" + }, + "numberOfInstances": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100#choose replicas|choose replicas between 1 and 100\"" + }, + "synchronousMode": { + "type": "boolean" + }, + "synchronousModeStrict": { + "type": "boolean" + }, + "synchronousNodeCount": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:synchronousMode,true#input synchronous_node_count when synchronous_mode is true!\"" + }, + "superuserPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input superuser_password|input valid superuser_password!\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreatePostgresqlReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + }, + "isOpenPgAdmin": { + "type": "boolean", + "title": "isOpenPgAdmin, PgAdmin set ,if true,will deploy Pgadmin,if false do notiong with PgAdmin" + }, + "pgAdminServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose PgAdminServiceType\"" + }, + "pgAdminNodePort": { + "type": "integer", + "format": "int32", + "title": "if PgAdminServiceType is nodePort,it will required!" + }, + "pgAdminCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_request\"" + }, + "pgAdminCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_limit\"" + }, + "pgAdminMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_request\"" + }, + "pgAdminMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_limit\"" + }, + "pgAdminServerModeEnable": { + "type": "boolean" + }, + "pgAdminDefaultEmail": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_email if PgAdminServerModeEnable is true\"" + }, + "pgAdminDefaultPassword": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_password if PgAdminServerModeEnable is true\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "pgAdminExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "pgAdmin lb" + }, + "pgAdminLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "pgAdminLbPoolName": { + "type": "string" + }, + "pgAdminLbAddress": { + "type": "string" + } + } + }, + "CreatePostgresqlReqPorts": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "port name be consistent with operator\nhttps://github.com/zalando/postgres-operator/blob/30b612489a2a20d968262791857d1db1a85e0b36/pkg/cluster/k8sres.go#L1861\n@inject_tag: v:\"required|in:postgresql#input name|input name postgresql\"" + }, + "protocol": { + "type": "string", + "title": "@inject_tag: v:\"required|in:TCP,UDP#choose protocol|choose protocol\"" + }, + "port": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|in:5432#choose port|choose port 5432\"" + }, + "targetPort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|in:5432#choose targetPort|choose targetPort 5432\"" + }, + "nodePort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:serviceType,NodePort#choose nodePort|choose nodePort\"" + } + } + }, + "CreatePostgresqlResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "DeletePostgresqlReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unkonwn namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"" + } + } + }, + "DeletePostgresqlResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeletePostgresqlsReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeletePostgresqlReq" + } + } + } + }, + "DeletePostgresqlsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetPostgresqlConfReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetPostgresqlConfResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlConfRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + }, + "conf": { + "$ref": "#/definitions/UpdatePostgresqlConfReq" + } + } + }, + "GetPostgresqlConfRespItems": { + "type": "object", + "properties": { + "paramType": { + "$ref": "#/definitions/ItemsParamType" + }, + "paramName": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "GetPostgresqlGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetPostgresqlListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetPostgresqlListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/PostgresqlItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetPostgresqlOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlOperatorVersionListRespGetPostgresqlOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetPostgresqlOperatorVersionListRespGetPostgresqlOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "GetPostgresqlParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "conf": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "replicas": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "resource": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + } + } + }, + "GetPostgresqlParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/SelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlParamRespSelectData" + } + } + } + }, + "GetPostgresqlParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/DataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/DataIntValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetPostgresqlPodListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetPostgresqlPodListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlPodListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetPostgresqlPodListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/GetPostgresqlPodListRespPodStatus" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "podType": { + "$ref": "#/definitions/GetPostgresqlPodListRespPodType" + }, + "replicationLagInBytes": { + "type": "string" + }, + "healthStatus": { + "$ref": "#/definitions/GetPostgresqlPodListRespHealthStatus" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetPostgresqlPodListRespHealthStatus": { + "type": "string", + "enum": [ + "HealthStatusUnknown", + "HealthStatusHealthy", + "HealthStatusUnhealthy" + ], + "default": "HealthStatusUnknown", + "description": " - HealthStatusUnknown: Unknown means the state of the pod is unknown.\n - HealthStatusHealthy: Healthy means the pod is healthy.\n - HealthStatusUnhealthy: Unhealthy means the pod is unhealthy." + }, + "GetPostgresqlPodListRespPodStatus": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "GetPostgresqlPodListRespPodType": { + "type": "string", + "enum": [ + "Master", + "Replica", + "PgAdmin" + ], + "default": "Master" + }, + "GetPostgresqlResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/PostgresqlItem" + } + } + }, + "GetPostgresqlUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlUsersRespUserItem" + } + } + } + }, + "GetPostgresqlUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsParamType": { + "type": "string", + "enum": [ + "conf" + ], + "default": "conf" + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "PostgresqlItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/PostgresqlItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreatePostgresqlReq" + }, + "status": { + "$ref": "#/definitions/PostgresqlItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "PostgresqlItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "PostgresqlItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/Status" + }, + "podsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "avgReplicationLagInBytes": { + "type": "string" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + } + } + }, + "SelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "Status": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Creating" + ], + "default": "Failed" + }, + "UpdatePostgresqlConfReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + } + } + }, + "UpdatePostgresqlConfResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdatePostgresqlParamsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/postgresql-v0.1.0.md b/openapi/mcamel/postgresql-v0.1.0.md new file mode 100644 index 00000000..63751e96 --- /dev/null +++ b/openapi/mcamel/postgresql-v0.1.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/postgresql-v0.1.1.json b/openapi/mcamel/postgresql-v0.1.1.json new file mode 100644 index 00000000..b6d4b5d8 --- /dev/null +++ b/openapi/mcamel/postgresql-v0.1.1.json @@ -0,0 +1,3236 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.1.1" + }, + "tags": [ + { + "name": "Cluster" + }, + { + "name": "Postgresql" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "Version" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/postgresql/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgres-operator/versions": { + "get": { + "operationId": "Postgresql_GetPostgresqlOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql": { + "post": { + "operationId": "Postgresql_CreatePostgresql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreatePostgresqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreatePostgresqlReq" + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql-params/{cluster}": { + "get": { + "operationId": "Postgresql_GetPostgresqlParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "Postgresql_GetPostgresql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + }, + "delete": { + "operationId": "Postgresql_DeletePostgresql", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeletePostgresqlResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/conf": { + "put": { + "operationId": "Postgresql_UpdatePostgresqlConf", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdatePostgresqlConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + } + } + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/confs": { + "get": { + "operationId": "Postgresql_GetPostgresqlConfs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "Postgresql_GetPostgresqlGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/params": { + "put": { + "operationId": "Postgresql_UpdatePostgresqlParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdatePostgresqlParamsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input invalid name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:15#input version!|input valid version!\"" + }, + "numberOfInstances": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100#choose replicas|choose replicas between 1 and 100\"" + }, + "synchronousMode": { + "type": "boolean" + }, + "synchronousModeStrict": { + "type": "boolean" + }, + "synchronousNodeCount": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:synchronousMode,true#input synchronous_node_count when synchronous_mode is true!\"" + }, + "superuserPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input superuser_password|input valid superuser_password!\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreatePostgresqlReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + }, + "isOpenPgAdmin": { + "type": "boolean", + "title": "isOpenPgAdmin, PgAdmin set ,if true,will deploy Pgadmin,if false do notiong with PgAdmin" + }, + "pgAdminServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose PgAdminServiceType\"" + }, + "pgAdminNodePort": { + "type": "integer", + "format": "int32", + "title": "if PgAdminServiceType is nodePort,it will required!" + }, + "pgAdminCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_request\"" + }, + "pgAdminCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_limit\"" + }, + "pgAdminMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_request\"" + }, + "pgAdminMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_limit\"" + }, + "pgAdminServerModeEnable": { + "type": "boolean" + }, + "pgAdminDefaultEmail": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_email if PgAdminServerModeEnable is true\"" + }, + "pgAdminDefaultPassword": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_password if PgAdminServerModeEnable is true\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "pgAdminExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "pgAdmin lb" + }, + "pgAdminLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "pgAdminLbPoolName": { + "type": "string" + }, + "pgAdminLbAddress": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/pods": { + "get": { + "operationId": "Postgresql_GetPostgresqlPodList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlPodListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresql/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "Postgresql_GetPostgresqlUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/postgresqls": { + "post": { + "operationId": "Postgresql_DeletePostgresqls", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeletePostgresqlsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeletePostgresqlsReq" + } + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{workspaceId}/postgresqls": { + "get": { + "operationId": "Postgresql_GetPostgresqlList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPostgresqlListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterCluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterNamespace", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Postgresql" + ] + } + }, + "/apis/mcamel.io/postgresql/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreatePostgresqlReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required#choose workspace_id!\"" + }, + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input invalid name!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:15#input version!|input valid version!\"" + }, + "numberOfInstances": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100#choose replicas|choose replicas between 1 and 100\"" + }, + "synchronousMode": { + "type": "boolean" + }, + "synchronousModeStrict": { + "type": "boolean" + }, + "synchronousNodeCount": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:synchronousMode,true#input synchronous_node_count when synchronous_mode is true!\"" + }, + "superuserPassword": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input superuser_password|input valid superuser_password!\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreatePostgresqlReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + }, + "isOpenPgAdmin": { + "type": "boolean", + "title": "isOpenPgAdmin, PgAdmin set ,if true,will deploy Pgadmin,if false do notiong with PgAdmin" + }, + "pgAdminServiceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose PgAdminServiceType\"" + }, + "pgAdminNodePort": { + "type": "integer", + "format": "int32", + "title": "if PgAdminServiceType is nodePort,it will required!" + }, + "pgAdminCpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_request\"" + }, + "pgAdminCpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_cpu_limit\"" + }, + "pgAdminMemoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_request\"" + }, + "pgAdminMemoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required-if:IsOpenPgAdmin,true#input pg_admin_memory_limit\"" + }, + "pgAdminServerModeEnable": { + "type": "boolean" + }, + "pgAdminDefaultEmail": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_email if PgAdminServerModeEnable is true\"" + }, + "pgAdminDefaultPassword": { + "type": "string", + "title": "@inject_tag: v:\"required-if:PgAdminServerModeEnable,true#input pg_admin_default_password if PgAdminServerModeEnable is true\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "pgAdminExternalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "pgAdmin lb" + }, + "pgAdminLbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "pgAdminLbPoolName": { + "type": "string" + }, + "pgAdminLbAddress": { + "type": "string" + } + } + }, + "CreatePostgresqlReqPorts": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "port name be consistent with operator\nhttps://github.com/zalando/postgres-operator/blob/30b612489a2a20d968262791857d1db1a85e0b36/pkg/cluster/k8sres.go#L1861\n@inject_tag: v:\"required|in:postgresql#input name|input name postgresql\"" + }, + "protocol": { + "type": "string", + "title": "@inject_tag: v:\"required|in:TCP,UDP#choose protocol|choose protocol\"" + }, + "port": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|in:5432#choose port|choose port 5432\"" + }, + "targetPort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|in:5432#choose targetPort|choose targetPort 5432\"" + }, + "nodePort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:serviceType,NodePort#choose nodePort|choose nodePort\"" + } + } + }, + "CreatePostgresqlResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "DeletePostgresqlReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unkonwn namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"" + } + } + }, + "DeletePostgresqlResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeletePostgresqlsReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeletePostgresqlReq" + } + } + } + }, + "DeletePostgresqlsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetPostgresqlConfReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetPostgresqlConfResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlConfRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + }, + "conf": { + "$ref": "#/definitions/UpdatePostgresqlConfReq" + } + } + }, + "GetPostgresqlConfRespItems": { + "type": "object", + "properties": { + "paramType": { + "$ref": "#/definitions/ItemsParamType" + }, + "paramName": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "GetPostgresqlGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetPostgresqlListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetPostgresqlListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/PostgresqlItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetPostgresqlOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlOperatorVersionListRespGetPostgresqlOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetPostgresqlOperatorVersionListRespGetPostgresqlOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "GetPostgresqlParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "conf": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "replicas": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "resource": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetPostgresqlParamRespSelect" + } + } + }, + "GetPostgresqlParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/SelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlParamRespSelectData" + } + } + } + }, + "GetPostgresqlParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/DataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/DataIntValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetPostgresqlPodListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetPostgresqlPodListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlPodListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetPostgresqlPodListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/GetPostgresqlPodListRespPodStatus" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "podType": { + "$ref": "#/definitions/GetPostgresqlPodListRespPodType" + }, + "replicationLagInBytes": { + "type": "string" + }, + "healthStatus": { + "$ref": "#/definitions/GetPostgresqlPodListRespHealthStatus" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetPostgresqlPodListRespHealthStatus": { + "type": "string", + "enum": [ + "HealthStatusUnknown", + "HealthStatusHealthy", + "HealthStatusUnhealthy" + ], + "default": "HealthStatusUnknown", + "description": " - HealthStatusUnknown: Unknown means the state of the pod is unknown.\n - HealthStatusHealthy: Healthy means the pod is healthy.\n - HealthStatusUnhealthy: Unhealthy means the pod is unhealthy." + }, + "GetPostgresqlPodListRespPodStatus": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "GetPostgresqlPodListRespPodType": { + "type": "string", + "enum": [ + "Master", + "Replica", + "PgAdmin" + ], + "default": "Master" + }, + "GetPostgresqlResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/PostgresqlItem" + } + } + }, + "GetPostgresqlUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetPostgresqlUsersRespUserItem" + } + } + } + }, + "GetPostgresqlUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsParamType": { + "type": "string", + "enum": [ + "conf" + ], + "default": "conf" + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "PostgresqlItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/PostgresqlItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreatePostgresqlReq" + }, + "status": { + "$ref": "#/definitions/PostgresqlItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "PostgresqlItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "PostgresqlItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/Status" + }, + "podsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "avgReplicationLagInBytes": { + "type": "string" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + } + } + }, + "SelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "Status": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Creating" + ], + "default": "Failed" + }, + "UpdatePostgresqlConfReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "conf": { + "type": "string", + "title": "@inject_tag: v:\"validateConf#input valid conf!\"" + } + } + }, + "UpdatePostgresqlConfResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdatePostgresqlParamsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/postgresql-v0.1.1.md b/openapi/mcamel/postgresql-v0.1.1.md new file mode 100644 index 00000000..12ab9269 --- /dev/null +++ b/openapi/mcamel/postgresql-v0.1.1.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/rabbitmq-index.md b/openapi/mcamel/rabbitmq-index.md new file mode 100644 index 00000000..b3c3c301 --- /dev/null +++ b/openapi/mcamel/rabbitmq-index.md @@ -0,0 +1,2 @@ +# 中间件服务 OpenAPI +- [版本 v0.10.0](./rabbitmq-v0.10.0.md) diff --git a/openapi/mcamel/rabbitmq-v0.10.0.json b/openapi/mcamel/rabbitmq-v0.10.0.json new file mode 100644 index 00000000..a6a2640d --- /dev/null +++ b/openapi/mcamel/rabbitmq-v0.10.0.json @@ -0,0 +1,3023 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.10.0" + }, + "tags": [ + { + "name": "Cluster" + }, + { + "name": "RabbitMq" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "Version" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/rabbitmq/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq": { + "post": { + "operationId": "RabbitMq_CreateRabbitMq", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateRabbitMqResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateRabbitMqReq" + } + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq-operator/versions": { + "get": { + "operationId": "RabbitMq_GetRabbitMqOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRabbitMqOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq-params/{cluster}": { + "get": { + "operationId": "RabbitMq_GetRabbitMqParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRabbitMqParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "RabbitMq_GetRabbitMq", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRabbitMqResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + }, + "delete": { + "operationId": "RabbitMq_DeleteRabbitMq", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteRabbitMqResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/{cluster}/{namespace}/{name}/conf": { + "put": { + "operationId": "RabbitMq_UpdateRabbitMqConf", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateRabbitMqConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "defaultUser": { + "type": "string", + "title": "@inject_tag: v:\"length:4,64|regex:^[a-zA-Z][a-z|0-9|-|_]+$#input user!|input user!\"" + }, + "defaultPass": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input password|input valid password\" json:\"defaultPass\"" + } + } + } + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/{cluster}/{namespace}/{name}/confs": { + "get": { + "operationId": "RabbitMq_GetRabbitMqConfs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRabbitMqConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "RabbitMq_GetRabbitMqGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRabbitMqGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/{cluster}/{namespace}/{name}/nodes": { + "get": { + "operationId": "RabbitMq_GetRabbitMqNodeList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRabbitMqNodeListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/{cluster}/{namespace}/{name}/params": { + "put": { + "operationId": "RabbitMq_UpdateRabbitMqParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateRabbitMqParamsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "replicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"in:1,3,5,7#choose replica 1,3,5,7!\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input capacity!|resource\"" + }, + "serviceType": { + "$ref": "#/definitions/CreateRabbitMqReqServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "describe": { + "type": "string" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateRabbitMqReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"in:3.9.25#choose 3.9.25\"" + } + } + } + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmq/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "RabbitMq_GetRabbitMqUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/rabbitmqs": { + "post": { + "operationId": "RabbitMq_DeleteRabbitMqs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteRabbitMqsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteRabbitMqsReq" + } + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{workspaceId}/rabbitmqs": { + "get": { + "operationId": "RabbitMq_GetRabbitMqList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRabbitMqListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "RabbitMq" + ] + } + }, + "/apis/mcamel.io/rabbitmq/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreateRabbitMqReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input name!\"" + }, + "describe": { + "type": "string" + }, + "version": { + "type": "string", + "title": "@inject_tag: v:\"required|in:3.9.25#choose 3.9.25|choose 3.9.25\"" + }, + "replicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|in:1,3,5,7#choose replicas|choose replicas\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "defaultUser": { + "type": "string", + "title": "@inject_tag: v:\"required|length:4,64|regex:^[a-z|A-Z][a-z|0-9|-|_]+$#input user|input user|input user\" json:\"defaultUser\"" + }, + "defaultPass": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input password|input valid password\" json:\"defaultPass\"" + }, + "serviceType": { + "$ref": "#/definitions/CreateRabbitMqReqServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateRabbitMqReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + } + } + }, + "CreateRabbitMqReqPorts": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name\"" + }, + "protocol": { + "type": "string", + "title": "@inject_tag: v:\"required|in:TCP,UDP#choose protocol|choose protocol\"" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "targetPort": { + "type": "integer", + "format": "int32" + }, + "nodePort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:ServiceType,NodePort|between:30000,32767#input nodePort port|input nodePort port\"" + } + } + }, + "CreateRabbitMqReqServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "CreateRabbitMqResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "DeleteRabbitMqReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unkonwn namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"" + } + } + }, + "DeleteRabbitMqResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteRabbitMqsReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeleteRabbitMqReq" + } + } + } + }, + "DeleteRabbitMqsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetRabbitMqConfReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetRabbitMqConfResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRabbitMqConfRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + }, + "conf": { + "$ref": "#/definitions/UpdateRabbitMqConfReq" + } + } + }, + "GetRabbitMqConfRespItems": { + "type": "object", + "properties": { + "paramType": { + "$ref": "#/definitions/ItemsParamType" + }, + "paramName": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "GetRabbitMqGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetRabbitMqListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetRabbitMqListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/RabbitmqClusterItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRabbitMqNodeListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetRabbitMqNodeListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRabbitMqNodeListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRabbitMqNodeListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/GetRabbitMqNodeListRespPodStatus" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetRabbitMqNodeListRespPodStatus": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "GetRabbitMqOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRabbitMqOperatorVersionListRespGetRabbitMqOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRabbitMqOperatorVersionListRespGetRabbitMqOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "GetRabbitMqParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetRabbitMqParamRespSelect" + }, + "replicas": { + "$ref": "#/definitions/GetRabbitMqParamRespSelect" + }, + "resource": { + "$ref": "#/definitions/GetRabbitMqParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetRabbitMqParamRespSelect" + } + } + }, + "GetRabbitMqParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/SelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRabbitMqParamRespSelectData" + } + } + } + }, + "GetRabbitMqParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/DataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/DataIntValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetRabbitMqResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/RabbitmqClusterItem" + } + } + }, + "GetUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetUsersRespUserItem" + } + } + } + }, + "GetUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsParamType": { + "type": "string", + "enum": [ + "defaultUser", + "defaultPass" + ], + "default": "defaultUser" + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "RabbitmqClusterItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/RabbitmqClusterItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateRabbitMqReq" + }, + "status": { + "$ref": "#/definitions/RabbitmqClusterItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "RabbitmqClusterItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "RabbitmqClusterItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/Status" + }, + "podsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "webManagerAddr": { + "type": "string" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "serviceAddr": { + "type": "string" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + } + } + }, + "SelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "Status": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Creating" + ], + "default": "Failed" + }, + "UpdateRabbitMqConfReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "defaultUser": { + "type": "string", + "title": "@inject_tag: v:\"length:4,64|regex:^[a-zA-Z][a-z|0-9|-|_]+$#input user!|input user!\"" + }, + "defaultPass": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordMid#input password|input valid password\" json:\"defaultPass\"" + } + } + }, + "UpdateRabbitMqConfResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateRabbitMqParamsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/rabbitmq-v0.10.0.md b/openapi/mcamel/rabbitmq-v0.10.0.md new file mode 100644 index 00000000..28e592db --- /dev/null +++ b/openapi/mcamel/rabbitmq-v0.10.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/mcamel/redis-index.md b/openapi/mcamel/redis-index.md new file mode 100644 index 00000000..28aff283 --- /dev/null +++ b/openapi/mcamel/redis-index.md @@ -0,0 +1,2 @@ +# 中间件服务 OpenAPI +- [版本 v0.7.0](./redis-v0.7.0.md) diff --git a/openapi/mcamel/redis-v0.7.0.json b/openapi/mcamel/redis-v0.7.0.json new file mode 100644 index 00000000..7f8a09c6 --- /dev/null +++ b/openapi/mcamel/redis-v0.7.0.json @@ -0,0 +1,4746 @@ +{ + "swagger": "2.0", + "info": { + "title": "中间件服务", + "version": "v0.7.0" + }, + "tags": [ + { + "name": "Cluster" + }, + { + "name": "Metric" + }, + { + "name": "CloudShellService" + }, + { + "name": "StorageConfig" + }, + { + "name": "Version" + }, + { + "name": "Redis" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/mcamel.io/redis/v1alpha1/cloudshells": { + "post": { + "operationId": "CloudShellService_CreateCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudShellRequest" + } + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/cloudshells/{name}": { + "get": { + "summary": "GetCloudShell get a cloudshell in golobal cluster.", + "operationId": "CloudShellService_GetCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + }, + "delete": { + "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", + "operationId": "CloudShellService_DeleteCloudShell", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "CloudShellService" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis": { + "post": { + "operationId": "Redis_CreateRedis", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateRedisResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateRedisReq" + } + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis-operator/versions": { + "get": { + "operationId": "Redis_GetRedisOperatorVersionList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisOperatorVersionListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis-params/{cluster}": { + "get": { + "operationId": "Redis_GetRedisParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "instanceType", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ], + "default": "RedisStandalone" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/backup": { + "post": { + "operationId": "Redis_CreateRedisBackup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateRedisBackupResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateRedisBackupReq" + } + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/backups": { + "get": { + "operationId": "Redis_GetRedisBackupList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisBackupListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/backups/{cluster}/{namespace}/{backupName}": { + "delete": { + "operationId": "Redis_DeleteRedisBackup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteRedisBackupResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "backupName", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "isOpenAutoBackup", + "description": "if open auto backup", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/version": { + "get": { + "operationId": "Version_Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVersionReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "Version" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{cluster}/{namespace}/{name}/auto-backup": { + "put": { + "operationId": "Redis_UpdateRedisAutoBackup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateRedisAutoBackupResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType", + "title": "@inject_tag: v:\"required#input instance type!\"" + }, + "accessKeyId": { + "type": "string", + "title": "gen by storage" + }, + "accessKeySecret": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "provider": { + "$ref": "#/definitions/UpdateRedisAutoBackupReqProvider" + }, + "storePath": { + "type": "string", + "title": "[Bucket]/[RDB_NAME]\n@inject_tag: v:\"required#input store_path!\"" + }, + "isOpenAutoBackup": { + "type": "boolean" + }, + "backupSchedule": { + "type": "string" + }, + "backupHistoryLimit": { + "type": "integer", + "format": "int32" + }, + "storageConfigName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_name!\"" + }, + "storageConfigNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_namespace!\"" + }, + "storageConfigCluster": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_cluster!\"" + } + } + } + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{cluster}/{namespace}/{name}/recover": { + "post": { + "operationId": "Redis_CreateRedisRecover", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateRedisRecoverResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"update\n|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "name is source redis cluster get config from source mysql cluster\n@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "backupName": { + "type": "string", + "title": "backup_name\n@inject_tag: v:\"required#input backup name for new cluster!\"" + }, + "targetRedisName": { + "type": "string", + "title": "target_redis_name, the cluster to create\n@inject_tag: v:\"required#input name!\"" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType" + } + } + } + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{instanceType}/{cluster}/{namespace}/{name}": { + "get": { + "operationId": "Redis_GetRedis", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + }, + "delete": { + "operationId": "Redis_DeleteRedis", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteRedisResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#unkonwn namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{instanceType}/{cluster}/{namespace}/{name}/conf": { + "put": { + "operationId": "Redis_UpdateRedisConf", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateRedisConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "authPass": { + "type": "string" + }, + "conf": { + "type": "string" + } + } + } + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{instanceType}/{cluster}/{namespace}/{name}/confs": { + "get": { + "operationId": "Redis_GetRedisConfs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisConfResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{instanceType}/{cluster}/{namespace}/{name}/grafana": { + "get": { + "operationId": "Redis_GetRedisGrafanaAddr", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisGrafanaAddrResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{instanceType}/{cluster}/{namespace}/{name}/nodes": { + "get": { + "operationId": "Redis_GetRedisNodeList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisNodeListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{instanceType}/{cluster}/{namespace}/{name}/params": { + "put": { + "operationId": "Redis_UpdateRedisParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateRedisParamsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "describe": { + "type": "string" + }, + "replicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100|not-in:2#choose replicas|choose replicas\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "authPass": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordLow#input password|input valid password\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateRedisReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string" + }, + "version": { + "type": "string" + }, + "followerReplicas": { + "type": "integer", + "format": "int32", + "title": "when cluster , follower must set" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "restore": { + "$ref": "#/definitions/CreateRedisReqRestore" + }, + "autoBackupConfig": { + "$ref": "#/definitions/UpdateRedisAutoBackupReq" + } + } + } + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/redis/{instanceType}/{cluster}/{namespace}/{name}/users": { + "get": { + "operationId": "Redis_GetRedisUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisUsersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "instanceType", + "description": "@inject_tag: v:\"required#input instance type!\"", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ] + }, + { + "name": "cluster", + "description": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can get password.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#choose Namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/rediss": { + "post": { + "operationId": "Redis_DeleteRediss", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteRedissResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteRedissReq" + } + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/storage-config/bucket/check-job": { + "post": { + "operationId": "StorageConfig_CreateStorageConfigBucketCheckJob", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateStorageConfigBucketCheckJobResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateStorageConfigBucketCheckJobReq" + } + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/storage-config/param": { + "get": { + "operationId": "StorageConfig_GetStorageConfigParam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigParamResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/workspaces": { + "get": { + "operationId": "Cluster_GetWorkspaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWorkspaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/all-events-kinds": { + "get": { + "operationId": "Cluster_GetAllEventKindsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventKindsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/insight/status": { + "get": { + "operationId": "Cluster_GetInsightAgentStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetInsightAgentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/lbaddress/pools": { + "get": { + "operationId": "Cluster_GetMetallbIPAddressPoolsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "mcamel_type is holdplace for mcamel type.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/nodelabels": { + "get": { + "operationId": "Cluster_GetClusterNodeLabelList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodeLabelListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/nodeports": { + "get": { + "operationId": "Cluster_GetClusterNodePortList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNodePortListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/{namespace}/events": { + "get": { + "summary": "pod 列表上会使用", + "operationId": "Cluster_GetEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "cluster represents the name of deployment belongs to.\n@inject_tag: v:\"required#choose cluster\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "Namespace represents which namespace the deployment belongs to.\n@inject_tag: v:\"required#choose namespace\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Kind represents what type of event is needed.\n@inject_tag: v:\"required#choose kind\"\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED" + }, + { + "name": "kindName", + "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.\n@inject_tag: v:\"required#choose kind name\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "type", + "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ] + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/{namespace}/{name}/alerts": { + "get": { + "operationId": "Metric_GetAlertsList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAlertsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Metric" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{cluster}/{namespace}/{name}/all-events": { + "get": { + "operationId": "Cluster_GetAllEventList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAllEventListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "eventType", + "description": " - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED" + }, + { + "name": "kindName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/clusters": { + "get": { + "operationId": "Cluster_GetClusterList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Cluster" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/minios": { + "get": { + "operationId": "Redis_GetMinioList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMinioListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/rediss": { + "get": { + "operationId": "Redis_GetRedisList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetRedisListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "description": "common.PageInfoReq=1;", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterCluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filterNamespace", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Redis" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/storage-config": { + "post": { + "operationId": "StorageConfig_CreateStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/CreateStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"in:minio,minio-wild,s3#choose storage type!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required-unless:storageType,minio#input endpoint if storage type is not minio!\"" + }, + "minioCluster": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "minioNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "minioName": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + }, + "description": { + "type": "string" + } + } + } + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/storage-config/{cluster}/{namespace}/{name}": { + "delete": { + "operationId": "StorageConfig_DeleteStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/DeleteStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/storage-config/{name}": { + "get": { + "operationId": "StorageConfig_GetStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "description": "@inject_tag: v:\"required#input namespace!\"", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#input cluster!\"", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + }, + "put": { + "operationId": "StorageConfig_UpdateStorageConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/UpdateStorageConfigResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"in:minio,minio-wild,s3#choose storage type!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required-unless:storageType,minio#input endpoint if storage type is not minio!\"" + }, + "minioCluster": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "minioNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "minioName": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + }, + "description": { + "type": "string" + } + } + } + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/storage-config/{name}/consumers": { + "get": { + "operationId": "StorageConfig_GetStorageConfigConsumers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigConsumersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "name", + "description": "@inject_tag: v:\"required#input name!\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/storage-configs": { + "get": { + "operationId": "StorageConfig_GetStorageConfigList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetStorageConfigListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"min:1#choose workspace_id!\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "searchKey", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "StorageConfig" + ] + } + }, + "/apis/mcamel.io/redis/v1alpha1/{workspaceId}/{cluster}/namespaces": { + "get": { + "operationId": "Cluster_GetClusterNamespaceList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "workspaceId", + "description": "@inject_tag: v:\"required#请输入WSid\"", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "cluster", + "description": "@inject_tag: v:\"required#请输入Cluster\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cluster" + ] + } + } + }, + "definitions": { + "CloudShell": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/CloudShellSpec" + }, + "status": { + "$ref": "#/definitions/CloudShellStatus" + } + } + }, + "CloudShellSpec": { + "type": "object", + "properties": { + "configMapName": { + "type": "string" + }, + "once": { + "type": "boolean" + }, + "commandAction": { + "type": "string" + }, + "ttl": { + "type": "integer", + "format": "int32" + }, + "cleanup": { + "type": "boolean" + } + } + }, + "CloudShellStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "accessUrl": { + "type": "string" + } + } + }, + "CommonReply": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "msg": { + "type": "string" + } + } + }, + "CreateCloudShellRequest": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/CreateCloudShellRequestType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "container": { + "type": "string" + }, + "logCount": { + "type": "integer", + "format": "int32" + }, + "data": { + "$ref": "#/definitions/CloudShell" + } + } + }, + "CreateCloudShellRequestType": { + "type": "string", + "enum": [ + "TYPE_UNSPECIFIED", + "bash", + "exec", + "logs", + "upload", + "download" + ], + "default": "TYPE_UNSPECIFIED" + }, + "CreateRedisBackupReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType", + "title": "@inject_tag: v:\"required#input instance type!\"" + }, + "backupName": { + "type": "string", + "title": "The field \"backup_name\" will be used to generate the name of the K8S job. \nTherefore, we need to ensure that it follows the naming convention for K8S jobs, which is a maximum length of 63 characters and can only contain lowercase alphanumeric characters or hyphens.\nWe can use the following validation rule to enforce this:\n@inject_tag: v:\"required|regex:^[a-z0-9-]{1,61}$#input backup_name|input backup_name\"" + }, + "accessKeyId": { + "type": "string", + "title": "minio should get from configmap" + }, + "accessKeySecret": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "provider": { + "$ref": "#/definitions/CreateRedisBackupReqProvider" + }, + "storePath": { + "type": "string" + }, + "genCreateTime": { + "type": "string", + "title": "used for backend, xxx/xxxx.rdb => xxx/[gen_create_time]xxx.rdb" + } + } + }, + "CreateRedisBackupReqProvider": { + "type": "string", + "enum": [ + "Minio", + "Other" + ], + "default": "Minio" + }, + "CreateRedisBackupResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateRedisRecoverResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateRedisReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "WHY check update? \nAdmin and Editor have 「update」verb, according to https://docs.daocloud.io/middleware/permission/, only Admin and Editor can create mcamel instance.\n@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required|regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#input name!|input name!\"" + }, + "describe": { + "type": "string" + }, + "replicas": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required|between:1,100|not-in:2#choose replicas|choose replicas\"" + }, + "storageClassName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose sc\"" + }, + "storageCapacity": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#choose capacity|resource\"" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType" + }, + "authPass": { + "type": "string", + "title": "@inject_tag: v:\"required|passwordLow#input password|input valid password\"" + }, + "serviceType": { + "$ref": "#/definitions/commonServiceType", + "title": "@inject_tag: v:\"serviceType#choose serviceType\"" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "@inject_tag: v:\"k8sValidation:annotations#input valid annotations\"" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/CreateRedisReqPorts" + } + }, + "cpuRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuRequest|resource\"" + }, + "cpuLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input cpuLimit|resource\"" + }, + "memoryRequest": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryRequest|resource\"" + }, + "memoryLimit": { + "type": "string", + "title": "@inject_tag: v:\"required|resource#input memoryLimit|resource\"" + }, + "conf": { + "type": "string" + }, + "version": { + "type": "string" + }, + "followerReplicas": { + "type": "integer", + "format": "int32", + "title": "when cluster , follower must set" + }, + "affinity": { + "$ref": "#/definitions/commonAffinity", + "title": "@inject_tag: v:\"k8sValidation:affinity#input valid affinity\"" + }, + "externalTrafficPolicy": { + "$ref": "#/definitions/commonExternalTrafficPolicy", + "title": "lb\n@inject_tag: v:\"checklb#checklb failed!\"" + }, + "lbTyp": { + "$ref": "#/definitions/commonLBTyp" + }, + "lbPoolName": { + "type": "string" + }, + "lbAddress": { + "type": "string" + }, + "restore": { + "$ref": "#/definitions/CreateRedisReqRestore" + }, + "autoBackupConfig": { + "$ref": "#/definitions/UpdateRedisAutoBackupReq" + } + } + }, + "CreateRedisReqPorts": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name\"" + }, + "protocol": { + "type": "string", + "title": "@inject_tag: v:\"required|in:TCP,UDP#choose protocol|choose protocol\"" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "targetPort": { + "type": "integer", + "format": "int32" + }, + "nodePort": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"required-if:ServiceType,NodePort|between:30000,32767#input nodePort port|input nodePort port\"" + } + } + }, + "CreateRedisReqRestore": { + "type": "object", + "properties": { + "enable": { + "type": "boolean" + }, + "accessKeyId": { + "type": "string" + }, + "accessKeySecret": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "provider": { + "$ref": "#/definitions/CreateRedisReqRestoreProvider" + }, + "storePath": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "targetRedisName": { + "type": "string" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType" + } + }, + "title": "restore info" + }, + "CreateRedisReqRestoreProvider": { + "type": "string", + "enum": [ + "Minio", + "Other" + ], + "default": "Minio" + }, + "CreateRedisResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateStorageConfigBucketCheckJobReq": { + "type": "object", + "properties": { + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"required|in:minio,minio-wild,s3:#choose storage type!|choose valid storage type!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required#input endpoint!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket name!\"" + }, + "cluster": { + "type": "string", + "title": "minio cluster\n@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "namespace": { + "type": "string", + "title": "minio namespace\n@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "name": { + "type": "string", + "title": "minio name\n@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + } + } + }, + "CreateStorageConfigBucketCheckJobResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateStorageConfigReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "storageType": { + "type": "string", + "title": "@inject_tag: v:\"in:minio,minio-wild,s3#choose storage type!\"" + }, + "accessKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input access key!\"" + }, + "secretKey": { + "type": "string", + "title": "@inject_tag: v:\"required#input secret key!\"" + }, + "bucket": { + "type": "string", + "title": "@inject_tag: v:\"required#input bucket!\"" + }, + "endpoint": { + "type": "string", + "title": "@inject_tag: v:\"required-unless:storageType,minio#input endpoint if storage type is not minio!\"" + }, + "minioCluster": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio cluster if storage type is minio!\"" + }, + "minioNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio namespace if storage type is minio!\"" + }, + "minioName": { + "type": "string", + "title": "@inject_tag: v:\"required-if:storageType,minio#input minio name if storage type is minio!\"" + }, + "description": { + "type": "string" + } + } + }, + "CreateStorageConfigResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DataInstanceTypeValue": { + "type": "object", + "properties": { + "value": { + "$ref": "#/definitions/InstanceType" + } + } + }, + "DataResourceValue": { + "type": "object", + "properties": { + "cpuRequest": { + "type": "string" + }, + "cpuLimit": { + "type": "string" + }, + "memoryRequest": { + "type": "string" + }, + "memoryLimit": { + "type": "string" + } + } + }, + "DataStorageClassValue": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "allowVolumeExpansion": { + "type": "boolean" + } + } + }, + "DeleteRedisBackupResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteRedisReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"delete|required#RBAC error|unkonwn clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#unkonwn namespace!\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"regex:^[a-z][a-z|0-9|-]{0,38}[a-z0-9]$#unknown name!\"" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType" + } + } + }, + "DeleteRedisResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteRedissReq": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/DeleteRedisReq" + } + } + } + }, + "DeleteRedissResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "DeleteStorageConfigResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "EventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "title": "Component from which the event is generated.\n+optional" + }, + "host": { + "type": "string", + "title": "Node name on which the event is generated.\n+optional" + } + }, + "description": "EventSource contains information for an event." + }, + "EventType": { + "type": "string", + "enum": [ + "EVENT_TYPE_UNSPECIFIED", + "Normal", + "Warning" + ], + "default": "EVENT_TYPE_UNSPECIFIED", + "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." + }, + "GetAlertsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AlertSummary" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventKindsListResp": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetAllEventListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetAllEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetAllEventListRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetAllEventListRespItems": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "type": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int64" + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/ItemsSource" + }, + "message": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/GetAllEventListRespItemsMetadata" + }, + "apiVersion": { + "type": "string" + }, + "lastTimestamp": { + "type": "string", + "format": "int64" + }, + "firstTimestamp": { + "type": "string", + "format": "int64" + }, + "involvedObject": { + "$ref": "#/definitions/ItemsInvolvedObject" + }, + "reportingInstance": { + "type": "string" + }, + "reportingComponent": { + "type": "string" + } + } + }, + "GetAllEventListRespItemsMetadata": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "GetClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetClusterNodeLabelListRespLabel" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetClusterNodeLabelListRespLabel": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetClusterNodePortListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListReqKind": { + "type": "string", + "enum": [ + "KIND_UNSPECIFIED", + "Pod" + ], + "default": "KIND_UNSPECIFIED", + "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Pod: ListEvents by deployment.\n Deployment = 1;\n // ListEvents by statefulSet.\n StatefulSet = 2;\n // ListEvents by daemonSet.\n DaemonSet = 3;\n // ListEvents by pod." + }, + "GetEventListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetEventListRespItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetEventListRespItem": { + "type": "object", + "properties": { + "involvedObject": { + "$ref": "#/definitions/ObjectReference", + "description": "The object that this event is about." + }, + "reason": { + "type": "string", + "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." + }, + "message": { + "type": "string", + "description": "A human-readable description of the status of this operation." + }, + "source": { + "$ref": "#/definitions/EventSource", + "description": "The component reporting this event. Should be a short machine\nunderstandable string." + }, + "lastTimestamp": { + "type": "string", + "format": "int64", + "description": "The time at which the most recent occurrence of this event was recorded." + }, + "type": { + "$ref": "#/definitions/EventType", + "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." + } + } + }, + "GetInsightAgentStatusResp": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/GetInsightAgentStatusRespInsightAgentStatus" + } + } + }, + "GetInsightAgentStatusRespInsightAgentStatus": { + "type": "string", + "enum": [ + "NotInstall", + "Install" + ], + "default": "NotInstall" + }, + "GetMetallbIPAddressPoolsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetMetallbIPAddressPoolsListRespItem" + } + }, + "isSupportLb": { + "type": "boolean" + }, + "externalTrafficPolicy": { + "type": "array", + "items": { + "$ref": "#/definitions/commonExternalTrafficPolicy" + }, + "title": "lb" + }, + "lbTyp": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLBTyp" + } + } + } + }, + "GetMetallbIPAddressPoolsListRespItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "autoAssign": { + "type": "boolean", + "description": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool." + }, + "avoidBuggyIPs": { + "type": "boolean", + "description": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool." + } + } + }, + "GetMinioListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetMinioListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/TenantItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRedisBackupListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetRedisBackupListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRedisBackupListRespRedisBackupItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRedisBackupListRespRedisBackupItem": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/GetRedisBackupListRespRedisBackupItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateRedisBackupReq" + }, + "status": { + "$ref": "#/definitions/GetRedisBackupListRespRedisBackupItemStatus" + } + } + }, + "GetRedisBackupListRespRedisBackupItemMetadata": { + "type": "object", + "properties": { + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "GetRedisBackupListRespRedisBackupItemStatus": { + "type": "object", + "properties": { + "completionTime": { + "type": "string", + "format": "int64" + }, + "startTime": { + "type": "string", + "format": "int64" + }, + "active": { + "type": "integer", + "format": "int32" + }, + "succeeded": { + "type": "integer", + "format": "int32" + }, + "failed": { + "type": "integer", + "format": "int32" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/StatusJobCondition" + } + }, + "isAutoBackup": { + "type": "boolean" + }, + "status": { + "$ref": "#/definitions/RedisBackupItemStatusStatus" + } + } + }, + "GetRedisConfReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetRedisConfResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRedisConfRespItems" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + }, + "conf": { + "$ref": "#/definitions/UpdateRedisConfReq" + } + } + }, + "GetRedisConfRespItems": { + "type": "object", + "properties": { + "paramType": { + "$ref": "#/definitions/ItemsParamType" + }, + "paramName": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "GetRedisGrafanaAddrResp": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "GetRedisListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetRedisListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/RedisItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRedisNodeListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetRedisNodeListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRedisNodeListRespData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRedisNodeListRespData": { + "type": "object", + "properties": { + "podName": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/GetRedisNodeListRespPodStatus" + }, + "ip": { + "type": "string" + }, + "restart": { + "type": "integer", + "format": "int32" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "redisType": { + "$ref": "#/definitions/RedisPodType" + }, + "common": { + "$ref": "#/definitions/commonPodCommon" + } + } + }, + "GetRedisNodeListRespPodStatus": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "GetRedisOperatorVersionListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRedisOperatorVersionListRespGetRedisOperatorVersionListData" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetRedisOperatorVersionListRespGetRedisOperatorVersionListData": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "instanceType": { + "type": "array", + "items": { + "$ref": "#/definitions/InstanceType" + } + } + } + }, + "GetRedisParamResp": { + "type": "object", + "properties": { + "version": { + "$ref": "#/definitions/GetRedisParamRespSelect" + }, + "replicas": { + "$ref": "#/definitions/GetRedisParamRespSelect" + }, + "resource": { + "$ref": "#/definitions/GetRedisParamRespSelect" + }, + "storage": { + "$ref": "#/definitions/GetRedisParamRespSelect" + }, + "conf": { + "$ref": "#/definitions/GetRedisParamRespSelect" + } + } + }, + "GetRedisParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/GetRedisParamRespSelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRedisParamRespSelectData" + } + } + } + }, + "GetRedisParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/GetRedisParamRespSelectDataStringValue" + }, + "rValue": { + "$ref": "#/definitions/DataResourceValue" + }, + "iValue": { + "$ref": "#/definitions/GetRedisParamRespSelectDataIntValue" + }, + "tValue": { + "$ref": "#/definitions/DataInstanceTypeValue" + }, + "scValue": { + "$ref": "#/definitions/DataStorageClassValue" + } + } + }, + "GetRedisParamRespSelectDataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "GetRedisParamRespSelectDataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "GetRedisParamRespSelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "GetRedisResp": { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/RedisItem" + } + } + }, + "GetRedisUsersResp": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/GetRedisUsersRespUserItem" + } + } + } + }, + "GetRedisUsersRespUserItem": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "GetStorageConfigConsumersResp": { + "type": "object", + "properties": { + "consumers": { + "type": "array", + "items": { + "$ref": "#/definitions/GetStorageConfigConsumersRespConsumer" + } + } + } + }, + "GetStorageConfigConsumersRespConsumer": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/GetStorageConfigConsumersRespStorageConfigConsumerType" + }, + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "GetStorageConfigConsumersRespStorageConfigConsumerType": { + "type": "string", + "enum": [ + "STORAGE_CONFIG_CONSUMER_TYPE_UNSPECIFIED", + "STORAGE_CONFIG_CONSUMER_TYPE_MYSQL", + "STORAGE_CONFIG_CONSUMER_TYPE_REDIS" + ], + "default": "STORAGE_CONFIG_CONSUMER_TYPE_UNSPECIFIED" + }, + "GetStorageConfigListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetStorageConfigListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/StorageConfigItem" + } + }, + "pagination": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "GetStorageConfigParamResp": { + "type": "object", + "properties": { + "storageType": { + "$ref": "#/definitions/GetStorageConfigParamRespSelect" + } + } + }, + "GetStorageConfigParamRespSelect": { + "type": "object", + "properties": { + "selectType": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectSelectType" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectData" + } + } + } + }, + "GetStorageConfigParamRespSelectData": { + "type": "object", + "properties": { + "sValue": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectDataStringValue" + }, + "iValue": { + "$ref": "#/definitions/GetStorageConfigParamRespSelectDataIntValue" + } + } + }, + "GetStorageConfigParamRespSelectDataIntValue": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "GetStorageConfigParamRespSelectDataStringValue": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "GetStorageConfigParamRespSelectSelectType": { + "type": "string", + "enum": [ + "Single", + "Multiple" + ], + "default": "Single" + }, + "GetStorageConfigResp": { + "type": "object", + "properties": { + "item": { + "$ref": "#/definitions/StorageConfigItem" + } + } + }, + "GetVersionReply": { + "type": "object", + "properties": { + "commonReply": { + "$ref": "#/definitions/CommonReply" + }, + "gitCommit": { + "type": "string" + }, + "gitVersion": { + "type": "string" + }, + "buildTime": { + "type": "string" + } + } + }, + "GetWorkspaceListReqSortDir": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + }, + "GetWorkspaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GetWorkspaceListRespItem" + }, + "title": "def items" + }, + "pagination": { + "$ref": "#/definitions/commonPagination", + "title": "def pagination" + } + } + }, + "GetWorkspaceListRespItem": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int64", + "title": "id" + }, + "alias": { + "type": "string", + "title": "alias" + } + } + }, + "InstanceType": { + "type": "string", + "enum": [ + "RedisStandalone", + "RedisFailover", + "RedisCluster" + ], + "default": "RedisStandalone" + }, + "ItemsInvolvedObject": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + } + } + }, + "ItemsParamType": { + "type": "string", + "enum": [ + "authPass", + "conf" + ], + "default": "authPass" + }, + "ItemsSource": { + "type": "object", + "properties": { + "component": { + "type": "string" + } + } + }, + "ObjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "resourceVersion": { + "type": "string" + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "deletionTimestamp": { + "type": "string", + "format": "int64" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ownerReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "cluster": { + "type": "string" + }, + "workspaceAlias": { + "type": "string" + } + } + }, + "ObjectReference": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" + }, + "name": { + "type": "string", + "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + } + }, + "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." + }, + "PodCommonCondition": { + "type": "object", + "properties": { + "lastTransitionTime": { + "type": "string" + }, + "lastUpdateTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PodCommonConditionStatus" + }, + "type": { + "type": "string" + } + } + }, + "PodCommonConditionStatus": { + "type": "string", + "enum": [ + "PodConditionStatusUnknown", + "PodConditionStatusTrue", + "PodConditionStatusFalse" + ], + "default": "PodConditionStatusUnknown" + }, + "PodCommonPodPhase": { + "type": "string", + "enum": [ + "PHASE_UNSPECIFIED", + "Unknown", + "Pending", + "Running", + "Succeeded", + "Failed" + ], + "default": "PHASE_UNSPECIFIED", + "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." + }, + "RedisBackupItemStatusStatus": { + "type": "string", + "enum": [ + "Running", + "Failed", + "Succeeded" + ], + "default": "Running" + }, + "RedisItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/RedisItemMetadata" + }, + "spec": { + "$ref": "#/definitions/CreateRedisReq" + }, + "status": { + "$ref": "#/definitions/RedisItemStatus" + } + }, + "title": "generate by https://json2pb.vercel.app" + }, + "RedisItemMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "format": "int64" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "RedisItemStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/Status" + }, + "podsAreReadyNum": { + "type": "integer", + "format": "int32" + }, + "redisAddr": { + "type": "string" + }, + "clusterIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "serviceAddr": { + "type": "string" + }, + "common": { + "$ref": "#/definitions/commonCommonItemStatus" + }, + "isControl": { + "type": "boolean" + } + } + }, + "RedisPodType": { + "type": "string", + "enum": [ + "StandaloneRedis", + "SentinelRedis", + "Sentinel", + "LeaderRedis", + "FollowerRedis", + "SentinelRedisMaster", + "SentinelRedisReplica" + ], + "default": "StandaloneRedis" + }, + "Status": { + "type": "string", + "enum": [ + "Failed", + "Running", + "Creating" + ], + "default": "Failed" + }, + "StatusJobCondition": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "status": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "StorageConfigItem": { + "type": "object", + "properties": { + "spec": { + "$ref": "#/definitions/CreateStorageConfigReq" + }, + "status": { + "$ref": "#/definitions/StorageConfigItemStorageConfigStatus" + } + } + }, + "StorageConfigItemStorageConfigStatus": { + "type": "object", + "properties": { + "lastUpdateTimestamp": { + "type": "string", + "format": "int64" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + } + } + }, + "TenantItem": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "spec": { + "$ref": "#/definitions/TenantItemCreateMinioReq" + }, + "status": { + "$ref": "#/definitions/TenantItemStatus" + } + } + }, + "TenantItemCreateMinioReq": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "cluster": { + "type": "string" + } + } + }, + "TenantItemStatus": { + "type": "object", + "properties": { + "common": { + "$ref": "#/definitions/commonCommonItemStatus", + "title": "Status status= 1;\nint32 pods_are_ready_num=2;\nstring web_manager_addr=3;\nrepeated string cluster_i_ps=4;\nstring service_addr=6;" + } + } + }, + "UpdateRedisAutoBackupReq": { + "type": "object", + "properties": { + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "@inject_tag: v:\"min:1#choose workspace_id!\"" + }, + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType", + "title": "@inject_tag: v:\"required#input instance type!\"" + }, + "accessKeyId": { + "type": "string", + "title": "gen by storage" + }, + "accessKeySecret": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "provider": { + "$ref": "#/definitions/UpdateRedisAutoBackupReqProvider" + }, + "storePath": { + "type": "string", + "title": "[Bucket]/[RDB_NAME]\n@inject_tag: v:\"required#input store_path!\"" + }, + "isOpenAutoBackup": { + "type": "boolean" + }, + "backupSchedule": { + "type": "string" + }, + "backupHistoryLimit": { + "type": "integer", + "format": "int32" + }, + "storageConfigName": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_name!\"" + }, + "storageConfigNamespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_namespace!\"" + }, + "storageConfigCluster": { + "type": "string", + "title": "@inject_tag: v:\"required#choose storage_config_cluster!\"" + } + } + }, + "UpdateRedisAutoBackupReqProvider": { + "type": "string", + "enum": [ + "Minio", + "Other" + ], + "default": "Minio" + }, + "UpdateRedisAutoBackupResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateRedisConfReq": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "@inject_tag: v:\"update|required#RBAC error|choose clusterName!\"" + }, + "namespace": { + "type": "string", + "title": "@inject_tag: v:\"required#choose Namespace\"" + }, + "name": { + "type": "string", + "title": "@inject_tag: v:\"required#input name!\"" + }, + "authPass": { + "type": "string" + }, + "conf": { + "type": "string" + }, + "instanceType": { + "$ref": "#/definitions/InstanceType" + } + } + }, + "UpdateRedisConfResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateRedisParamsResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "UpdateStorageConfigResp": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "commonAffinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/commonNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/commonPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/commonPodAntiAffinity" + } + } + }, + "commonCommonItemStatus": { + "type": "object", + "properties": { + "serviceAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "webManagerAddress": { + "type": "string" + }, + "webLogAddress": { + "type": "string" + }, + "isHwameistorSc": { + "type": "boolean" + }, + "avgPvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "avgPvUsedInGb": { + "type": "number", + "format": "double" + } + }, + "description": "CommonItemStatus define CR(MysqlCluster/Tenant...) common status." + }, + "commonExternalTrafficPolicy": { + "type": "string", + "enum": [ + "Cluster", + "Local" + ], + "default": "Cluster" + }, + "commonLBTyp": { + "type": "string", + "enum": [ + "MetalLB", + "Others" + ], + "default": "MetalLB" + }, + "commonLabelSelector": { + "type": "object", + "properties": { + "matchLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonLabelSelectorRequirement" + } + } + } + }, + "commonLabelSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist" + } + } + }, + "commonNodeAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/commonNodeSelector" + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPreferredSchedulingTerm" + } + } + } + }, + "commonNodeSelector": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + } + }, + "commonNodeSelectorRequirement": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": { + "type": "string", + "title": "Operator valid string: In, NotIn, Exists, DoesNotExist, Gt, Lt" + } + } + }, + "commonNodeSelectorTerm": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + }, + "matchFields": { + "type": "array", + "items": { + "$ref": "#/definitions/commonNodeSelectorRequirement" + } + } + } + }, + "commonOwnerReference": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "controller": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "commonPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pages": { + "type": "integer", + "format": "int32" + } + } + }, + "commonPodAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodAffinityTerm": { + "type": "object", + "properties": { + "labelSelector": { + "$ref": "#/definitions/commonLabelSelector" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "type": "string" + }, + "namespaceSelector": { + "$ref": "#/definitions/commonLabelSelector" + } + } + }, + "commonPodAntiAffinity": { + "type": "object", + "properties": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "items": { + "$ref": "#/definitions/commonWeightedPodAffinityTerm" + } + } + } + }, + "commonPodCommon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "phase": { + "$ref": "#/definitions/PodCommonPodPhase" + }, + "ip": { + "type": "string" + }, + "restartCount": { + "type": "integer", + "format": "int32" + }, + "createTimestamp": { + "type": "string", + "format": "int64" + }, + "cpuUsage": { + "type": "number", + "format": "double" + }, + "cpuLimit": { + "type": "number", + "format": "double" + }, + "memoryUsage": { + "type": "number", + "format": "double" + }, + "memoryLimit": { + "type": "number", + "format": "double" + }, + "pvUsedInGb": { + "type": "number", + "format": "double" + }, + "pvAllocatedInGb": { + "type": "number", + "format": "double" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/PodCommonCondition" + } + }, + "containersName": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerReference": { + "type": "array", + "items": { + "$ref": "#/definitions/commonOwnerReference" + } + }, + "initContainersName": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "commonPreferredSchedulingTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "preference": { + "$ref": "#/definitions/commonNodeSelectorTerm" + } + } + }, + "commonServiceType": { + "type": "string", + "enum": [ + "ClusterIP", + "NodePort", + "LoadBalancer" + ], + "default": "ClusterIP" + }, + "commonWeightedPodAffinityTerm": { + "type": "object", + "properties": { + "weight": { + "type": "integer", + "format": "int32" + }, + "podAffinityTerm": { + "$ref": "#/definitions/commonPodAffinityTerm" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "v1alpha1AlertSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "int64" + }, + "groupName": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "targetType": { + "$ref": "#/definitions/v1alpha1TargetType" + }, + "target": { + "type": "string" + }, + "severity": { + "$ref": "#/definitions/v1alpha1Severity" + }, + "value": { + "type": "string" + }, + "notifyResponse": { + "type": "string" + }, + "description": { + "type": "string" + }, + "startAt": { + "type": "string", + "format": "int64" + }, + "updateAt": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1Severity": { + "type": "string", + "enum": [ + "SEVERITY_UNSPECIFIED", + "CRITICAL", + "WARNING", + "INFO" + ], + "default": "SEVERITY_UNSPECIFIED" + }, + "v1alpha1TargetType": { + "type": "string", + "enum": [ + "TARGET_TYPE_UNSPECIFIED", + "GLOBAL", + "CLUSTER", + "NAMESPACE", + "NODE", + "DEPLOYMENT", + "STATEFULSET", + "DAEMONSET", + "POD" + ], + "default": "TARGET_TYPE_UNSPECIFIED" + } + } +} diff --git a/openapi/mcamel/redis-v0.7.0.md b/openapi/mcamel/redis-v0.7.0.md new file mode 100644 index 00000000..e978781b --- /dev/null +++ b/openapi/mcamel/redis-v0.7.0.md @@ -0,0 +1 @@ +# diff --git a/openapi/midware.md b/openapi/midware.md new file mode 100644 index 00000000..d415590a --- /dev/null +++ b/openapi/midware.md @@ -0,0 +1,23 @@ +--- +hide: + - toc +--- + +# 中间件 OpenAPI 文档 + +本页列出所有中间件的 OpenAPI 文档,方便以程序方式调用。 + +

+ +![what is midware](images/middleware.png) diff --git a/openapi/mspider/index.md b/openapi/mspider/index.md new file mode 100644 index 00000000..0eeac563 --- /dev/null +++ b/openapi/mspider/index.md @@ -0,0 +1,2 @@ +# 服务网格 OpenAPI +- [版本 v0.105.1](./v0.105.1.md) diff --git a/openapi/mspider/v0.105.1.json b/openapi/mspider/v0.105.1.json new file mode 100644 index 00000000..e5d0203b --- /dev/null +++ b/openapi/mspider/v0.105.1.json @@ -0,0 +1,9572 @@ +{ + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "schemes": [ + "http" + ], + "swagger": "2.0", + "info": { + "title": "MSpider swagger api docs", + "version": "v3alpha1" + }, + "host": "demo-dev.daocloud.io", + "paths": { + "/apis/mcpc.mspider.io/v3alpha1/istio-resources/{type}/type-value": { + "get": { + "tags": [ + "IstioResourceService" + ], + "summary": "根据 ResourceType 类型,获取 Any 的 @type 值,方便进行序列化。", + "operationId": "IstioResourceService_GetAnyTypeNameByResourceType", + "parameters": [ + { + "enum": [ + "RESOURCE_TYPE_UNSPECIFIED", + "VIRTUAL_SERVICE", + "DESTINATION_RULE", + "GATEWAY", + "SERVICE_ENTRY", + "ENVOY_FILTER", + "PROXY_CONFIG", + "SIDECAR", + "WORKLOAD_GROUP", + "WORKLOAD_ENTRY", + "AUTHORIZATION_POLICY", + "PEER_AUTHENTICATION", + "REQUEST_AUTHENTICATION", + "WASM_PLUGIN", + "TELEMETRY" + ], + "type": "string", + "name": "type", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/protobufAny" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/namespaces": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询命名空间列表", + "operationId": "GovernService_GetNamespaceList", + "parameters": [ + { + "type": "string", + "description": "所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1NamespaceListResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/services": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询服务列表", + "operationId": "GovernService_GetServiceList", + "parameters": [ + { + "type": "string", + "description": "服务所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "命名空间组(多个命名空间以 ',' 分割,例如 “ns1,ns2,ns3”, 全部命名空间就为\n\"\")", + "name": "namespaces", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ServiceListResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/services/{service}": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询服务详情", + "operationId": "GovernService_GetService", + "parameters": [ + { + "type": "string", + "description": "服务所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "服务", + "name": "service", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespace", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Service" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/services/{service}/addresses": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询服务地址列表", + "operationId": "GovernService_GetServiceAddressList", + "parameters": [ + { + "type": "string", + "description": "服务所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "服务名称", + "name": "service", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ServiceAddressListResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/services/{service}/addresses/{port}/protocol": { + "post": { + "tags": [ + "GovernService" + ], + "summary": "修改服务端口协议", + "operationId": "GovernService_UpdateServicePortGovernProtocol", + "parameters": [ + { + "type": "string", + "description": "服务所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "服务名称", + "name": "service", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "服务端口", + "name": "port", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "governProtocol": { + "title": "服务导入协议,也就是治理协议,如 TCP、HTTP、HTTPS、HTTP2", + "$ref": "#/definitions/v3alpha1GovernProtocol" + }, + "namespace": { + "type": "string", + "title": "命名空间", + "required": [ + "namespace" + ] + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ConfigServicePort" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/services/{service}/instances": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询ServiceInstance列表", + "operationId": "GovernService_GetServiceInstanceList", + "parameters": [ + { + "type": "string", + "description": "服务所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "服务名称", + "name": "service", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ServiceInstanceListResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/services/{service}/labels": { + "put": { + "tags": [ + "GovernService" + ], + "summary": "修改服务 labels", + "operationId": "GovernService_UpdateServiceLabels", + "parameters": [ + { + "type": "string", + "description": "服务所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "服务名称", + "name": "service", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "namespace", + "ops" + ], + "properties": { + "namespace": { + "type": "string", + "title": "命名空间", + "required": [ + "namespace" + ] + }, + "ops": { + "type": "array", + "required": [ + "ops" + ], + "items": { + "$ref": "#/definitions/v3alpha1LabelsOP" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Service" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/services/{service}/versions": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询服务版本列表", + "operationId": "GovernService_ListServiceVersions", + "parameters": [ + { + "type": "string", + "description": "服务所在网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "服务名称", + "name": "service", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListServiceVersionResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/workloads": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询服务工作负载列表", + "operationId": "GovernService_GetWorkloadList", + "parameters": [ + { + "type": "string", + "description": "网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "服务名", + "name": "service", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1WorkloadListResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/govern/workloads/{workloadId}/instances": { + "get": { + "tags": [ + "GovernService" + ], + "summary": "查询工作负载实例详情列表", + "operationId": "GovernService_GetWorkloadInstanceList", + "parameters": [ + { + "type": "string", + "description": "所属网格", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "工作负载 ID,非工作负载名称", + "name": "workloadId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "所属命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "所属集群", + "name": "cluster", + "in": "query", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1WorkloadInstanceListResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/istio-resources/namespaces/{namespace}/{type}/{name}": { + "get": { + "tags": [ + "IstioResourceService" + ], + "summary": "获取 Istio 资源", + "operationId": "IstioResourceService_GetResource", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "所在 namespace", + "name": "namespace", + "in": "path", + "required": true + }, + { + "enum": [ + "RESOURCE_TYPE_UNSPECIFIED", + "VIRTUAL_SERVICE", + "DESTINATION_RULE", + "GATEWAY", + "SERVICE_ENTRY", + "ENVOY_FILTER", + "PROXY_CONFIG", + "SIDECAR", + "WORKLOAD_GROUP", + "WORKLOAD_ENTRY", + "AUTHORIZATION_POLICY", + "PEER_AUTHENTICATION", + "REQUEST_AUTHENTICATION", + "WASM_PLUGIN", + "TELEMETRY" + ], + "type": "string", + "description": "资源类型", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "名称", + "name": "name", + "in": "path", + "required": true + }, + { + "enum": [ + "OUTPUT_FORMAT_UNSPECIFIED", + "YAML", + "SPEC" + ], + "type": "string", + "default": "OUTPUT_FORMAT_UNSPECIFIED", + "description": "返回格式\n\n - OUTPUT_FORMAT_UNSPECIFIED: Unspecified type.\n - YAML: yaml type, 输出对象会包含 yaml 字段,没有 spec 字段。\n - SPEC: spec type, 输出对象会包含 spec 字段,没有 yaml 字段。", + "name": "output", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1IstioResource" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "put": { + "tags": [ + "IstioResourceService" + ], + "summary": "更新 Istio 资源", + "operationId": "IstioResourceService_UpdateResource", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "所在 namespace", + "name": "namespace", + "in": "path", + "required": true + }, + { + "enum": [ + "RESOURCE_TYPE_UNSPECIFIED", + "VIRTUAL_SERVICE", + "DESTINATION_RULE", + "GATEWAY", + "SERVICE_ENTRY", + "ENVOY_FILTER", + "PROXY_CONFIG", + "SIDECAR", + "WORKLOAD_GROUP", + "WORKLOAD_ENTRY", + "AUTHORIZATION_POLICY", + "PEER_AUTHENTICATION", + "REQUEST_AUTHENTICATION", + "WASM_PLUGIN", + "TELEMETRY" + ], + "type": "string", + "description": "type 表示资源类型。", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "资源名称", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "spec": { + "$ref": "#/definitions/protobufAny" + }, + "yaml": { + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1IstioResource" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "post": { + "tags": [ + "IstioResourceService" + ], + "summary": "创建 Istio 资源", + "operationId": "IstioResourceService_CreateResource", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "所在 namespace", + "name": "namespace", + "in": "path", + "required": true + }, + { + "enum": [ + "RESOURCE_TYPE_UNSPECIFIED", + "VIRTUAL_SERVICE", + "DESTINATION_RULE", + "GATEWAY", + "SERVICE_ENTRY", + "ENVOY_FILTER", + "PROXY_CONFIG", + "SIDECAR", + "WORKLOAD_GROUP", + "WORKLOAD_ENTRY", + "AUTHORIZATION_POLICY", + "PEER_AUTHENTICATION", + "REQUEST_AUTHENTICATION", + "WASM_PLUGIN", + "TELEMETRY" + ], + "type": "string", + "description": "type 表示资源类型。", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "资源名称", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "spec": { + "$ref": "#/definitions/protobufAny" + }, + "yaml": { + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1IstioResource" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "IstioResourceService" + ], + "summary": "删除 Istio 资源", + "operationId": "IstioResourceService_DeleteResource", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "所在 namespace", + "name": "namespace", + "in": "path", + "required": true + }, + { + "enum": [ + "RESOURCE_TYPE_UNSPECIFIED", + "VIRTUAL_SERVICE", + "DESTINATION_RULE", + "GATEWAY", + "SERVICE_ENTRY", + "ENVOY_FILTER", + "PROXY_CONFIG", + "SIDECAR", + "WORKLOAD_GROUP", + "WORKLOAD_ENTRY", + "AUTHORIZATION_POLICY", + "PEER_AUTHENTICATION", + "REQUEST_AUTHENTICATION", + "WASM_PLUGIN", + "TELEMETRY" + ], + "type": "string", + "description": "资源类型", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "名称", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "output": { + "title": "返回格式", + "$ref": "#/definitions/v3alpha1OutputFormat" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1IstioResource" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/istio-resources/{type}": { + "get": { + "tags": [ + "IstioResourceService" + ], + "summary": "查询 Istio 资源列表", + "operationId": "IstioResourceService_ListResources", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "enum": [ + "RESOURCE_TYPE_UNSPECIFIED", + "VIRTUAL_SERVICE", + "DESTINATION_RULE", + "GATEWAY", + "SERVICE_ENTRY", + "ENVOY_FILTER", + "PROXY_CONFIG", + "SIDECAR", + "WORKLOAD_GROUP", + "WORKLOAD_ENTRY", + "AUTHORIZATION_POLICY", + "PEER_AUTHENTICATION", + "REQUEST_AUTHENTICATION", + "WASM_PLUGIN", + "TELEMETRY" + ], + "type": "string", + "description": "资源类型", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "所在 namespace,空表示所有", + "name": "namespaces", + "in": "query" + }, + { + "enum": [ + "OUTPUT_FORMAT_UNSPECIFIED", + "YAML", + "SPEC" + ], + "type": "string", + "default": "OUTPUT_FORMAT_UNSPECIFIED", + "description": " - OUTPUT_FORMAT_UNSPECIFIED: Unspecified type.\n - YAML: yaml type, 输出对象会包含 yaml 字段,没有 spec 字段。\n - SPEC: spec type, 输出对象会包含 spec 字段,没有 yaml 字段。", + "name": "output", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListResourceResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/namespaces/{namespace}/secrets": { + "post": { + "tags": [ + "SecretManagementService" + ], + "summary": "创建 Secret", + "operationId": "SecretManagementService_CreateSecret", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "namespace", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "required": [ + "name" + ] + }, + "spec": { + "title": "秘钥内容", + "$ref": "#/definitions/v3alpha1SimpleTLSSecretSpec" + }, + "yaml": { + "type": "string", + "title": "yaml 资源信息\n具体参考:https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets\n有以下几点需要注意;\n1. 类型(type) 必须是 kubernetes.io/tls\n2. data 中必须包含 tls.crt 和 tls.key,分别对应凭证和私钥" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Secret" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/namespaces/{namespace}/secrets/{name}": { + "get": { + "tags": [ + "SecretManagementService" + ], + "summary": "获取 Secret", + "operationId": "SecretManagementService_GetSecret", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "name", + "in": "path", + "required": true + }, + { + "enum": [ + "UNSPECIFIED", + "YAML" + ], + "type": "string", + "default": "UNSPECIFIED", + "description": " - UNSPECIFIED: 默认为基本的数据结构类型\n - YAML: 输出为 YAML 格式的信息", + "name": "format", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Secret" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "put": { + "tags": [ + "SecretManagementService" + ], + "summary": "更新 Secret", + "operationId": "SecretManagementService_UpdateSecret", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "spec": { + "title": "秘钥内容", + "$ref": "#/definitions/v3alpha1SimpleTLSSecretSpec" + }, + "yaml": { + "type": "string", + "title": "yaml 资源信息\n具体参考:https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets\n有以下几点需要注意;\n1. 类型(type) 必须是 kubernetes.io/tls\n2. data 中必须包含 tls.crt 和 tls.key,分别对应凭证和私钥" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Secret" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "SecretManagementService" + ], + "summary": "删除 Secret", + "operationId": "SecretManagementService_DeleteSecret", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": {} + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/namespaces/{namespace}/secrets/{name}/delete-constraints": { + "get": { + "tags": [ + "SecretManagementService" + ], + "summary": "删除 Secret 前检查条件", + "operationId": "SecretManagementService_DeleteSecretConstraintCheck", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1DeleteConstraintResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/reg-proxies": { + "get": { + "tags": [ + "RegProxyManagementService" + ], + "summary": "获取现有注册中心列表", + "operationId": "RegProxyManagementService_ListRegProxies", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListRegProxiesResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "post": { + "tags": [ + "RegProxyManagementService" + ], + "summary": "创建注册中心代理", + "operationId": "RegProxyManagementService_CreateRegProxy", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "name", + "addresses" + ], + "properties": { + "addresses": { + "type": "array", + "title": "真实注册中心访问信息", + "required": [ + "addresses" + ], + "items": { + "$ref": "#/definitions/v3alpha1RegistryAddress" + } + }, + "name": { + "type": "string", + "title": "唯一名称,符合 Kubernetes name 规范", + "required": [ + "name" + ] + }, + "type": { + "title": "注册中心类型", + "$ref": "#/definitions/v3alpha1RegProxyType" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1RegProxyResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/reg-proxies/{name}": { + "get": { + "tags": [ + "RegProxyManagementService" + ], + "summary": "获取单个注册中心代理", + "operationId": "RegProxyManagementService_GetRegProxy", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1RegProxyResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "put": { + "tags": [ + "RegProxyManagementService" + ], + "summary": "修改单个注册中心代理", + "operationId": "RegProxyManagementService_UpdateRegProxy", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "唯一名称,符合 Kubernetes name 规范", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "addresses" + ], + "properties": { + "addresses": { + "type": "array", + "title": "真实注册中心访问信息", + "required": [ + "addresses" + ], + "items": { + "$ref": "#/definitions/v3alpha1RegistryAddress" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1RegProxyResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "RegProxyManagementService" + ], + "summary": "删除单个注册中心代理", + "operationId": "RegProxyManagementService_DeleteRegProxy", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1RegProxyResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mcpc.mspider.io/v3alpha1/meshes/{meshId}/secrets": { + "get": { + "tags": [ + "SecretManagementService" + ], + "summary": "Secret 列表", + "operationId": "SecretManagementService_ListSecrets", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "namespaces", + "in": "query" + }, + { + "type": "boolean", + "description": "是否需要包括数据中的敏感信息,如私钥的内容,如果为\ntrue,则会返回,默认不返回。", + "name": "needSensitiveData", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListSecretsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/clusters": { + "get": { + "tags": [ + "ClusterManagementService" + ], + "summary": "获取所有集群列表", + "operationId": "ClusterManagementService_ListClusters", + "parameters": [ + { + "enum": [ + "MESH_CLUSTER_ROLE_UNSPECIFIED", + "FREE_CLUSTER", + "HOSTED_WORKLOAD_CLUSTER", + "INTEGRATED_CLUSTER", + "EXTERNAL_MESH_CLUSTER", + "VIRTUAL_CLUSTER", + "HOSTED_CLUSTER" + ], + "type": "string", + "default": "MESH_CLUSTER_ROLE_UNSPECIFIED", + "description": "集群角色,\n\n - MESH_CLUSTER_ROLE_UNSPECIFIED: Unspecified type.\n - FREE_CLUSTER: FreeCluster means that a cluster was been created, but no mesh\ninstalled yet.\n - HOSTED_WORKLOAD_CLUSTER: HostedWorkloadCluster means that this cluster was an workload\ncluster.\n - INTEGRATED_CLUSTER: IntegratedCluster means that this is an integrated cluster, which\ncontains a istio control plane.\n - EXTERNAL_MESH_CLUSTER: ExternalMeshCluster means that this cluster contains a istio control\nplane, but which was not create by us.\n - VIRTUAL_CLUSTER: VirtualCluster means that this cluster is created by us, NOT from\ninfra like kpanda. which CAN NOT shown on ui.\n - HOSTED_CLUSTER: Deprecated: HOSTED_CLUSTER\nHostedCluster means that this cluster is some meshes' ownerCluster.\nwe will create mspider mcpc components on this cluster.", + "name": "role", + "in": "query" + }, + { + "type": "string", + "description": "所述集群名称", + "name": "meshId", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + }, + { + "type": "boolean", + "description": "是否是托管网格控制面集群\n 创建网格时:其有效的集群列表,`filter_hosted_owner` 必须为 `true`,\n 过滤已经托管过网格的 `FREE_CLUSTER` 集群。\n 托管网格模式下,新增工作集群时:`filter_hosted_owner`,\n 该字段可以不传,托管控制面的集群可以作为网格工作集群存在。", + "name": "filterHostedOwner", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/clusters/{cluster}/mesh": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取集群所在网格信息", + "operationId": "MeshManagementService_GetMeshDetailsByClusterID", + "parameters": [ + { + "type": "string", + "description": "集群id", + "name": "cluster", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Mesh" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/clusters/{name}": { + "get": { + "tags": [ + "ClusterManagementService" + ], + "summary": "获取集群详情", + "operationId": "ClusterManagementService_GetCluster", + "parameters": [ + { + "type": "string", + "description": "集群名称。", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网格ID", + "name": "meshId", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Cluster" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/clusters/{name}/config": { + "put": { + "tags": [ + "ClusterManagementService" + ], + "summary": "更新集群配置", + "operationId": "ClusterManagementService_UpdateClusterConfig", + "parameters": [ + { + "type": "string", + "description": "集群名称。", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "meshId" + ], + "properties": { + "customMeshConfig": { + "description": "该字段允许为 nil,为空时清除集群自定义配置", + "type": "object", + "title": "自定义参数\n继承网格全局参数\n例如:\nistio.custom_params.values.global.proxy.resources.requests.cpu\nistio.custom_params.values.global.proxy.resources.requests.memory\nistio.custom_params.values.global.proxy.resources.limits.cpu\nistio.custom_params.values.global.proxy.resources.limits.memory", + "additionalProperties": { + "type": "string" + } + }, + "meshId": { + "type": "string", + "title": "网格ID", + "required": [ + "meshId" + ] + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/clusters/{name}/namespaces": { + "get": { + "tags": [ + "ClusterManagementService" + ], + "summary": "获取集群命名空间列表", + "operationId": "ClusterManagementService_ListClusterNamespaces", + "parameters": [ + { + "type": "string", + "description": "集群名称", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "需要边车注入信息", + "name": "withInjectionDetails", + "in": "query" + }, + { + "type": "string", + "description": "网格信息,仅当需要边车注入信息时提供", + "name": "meshId", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + }, + { + "type": "boolean", + "description": "是否展示包含 Istio 控制平面等信息", + "name": "withIstioControlPlaneInfo", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/feature-gates": { + "get": { + "tags": [ + "FeatureGatesService" + ], + "operationId": "FeatureGatesService_GetFeatureGates", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1FeatureGatesResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/feature-gates/{id}": { + "get": { + "tags": [ + "FeatureGatesService" + ], + "operationId": "FeatureGatesService_GetFeatureGateByID", + "parameters": [ + { + "enum": [ + "FEATURE_GATE_ID_ENUM_UNSPECIFIED", + "SPRING_CLOUD", + "DUBBO" + ], + "type": "string", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1FeatureGate" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取网格列表", + "operationId": "MeshManagementService_GetMeshList", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "创建网格", + "operationId": "MeshManagementService_CreateMesh", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v3alpha1CreateMeshRequest" + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Mesh" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取网格详情", + "operationId": "MeshManagementService_GetMeshDetails", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Mesh" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "put": { + "tags": [ + "MeshManagementService" + ], + "summary": "更新网格", + "operationId": "MeshManagementService_UpdateMesh", + "parameters": [ + { + "type": "string", + "description": "网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "Mesh is the UI interface of GlobalMesh CRD.", + "type": "object", + "required": [ + "customParams" + ], + "properties": { + "customParams": { + "description": "网格出口流量策略类型,其值应该是`REGISTRY_ONLY`或`ALLOW_ANY`\nistio.custom_params.values.meshConfig.outboundTrafficPolicy.mode\n是否开启网格的`tracing`\nistio.custom_params.values.meshConfig.enableTracing\n\n地域负载均衡策略\n注:数组用[*]表示,*\n为大于等于0的数字,表示第几条策略;distribute和failover两个策略只能二选一。\n\n是否开启地域负载均衡\nistio.custom_params.values.meshConfig.localityLbSetting.enabled\n从哪个地域转发流量,值为 string 类型,如 \"region1/zone1/subzone1\"。\nistio.custom_params.values.meshConfig.localityLbSetting.distribute[*].from\n流量转发到哪个地域,值为map,如istio.custom_params.values.meshConfig.localityLbSetting.distribute[*].to.shanghai=50\nistio.custom_params.values.meshConfig.localityLbSetting.distribute[*].to\n\n从哪个地域转发流量,值为string类型,如 \"region1/zone1/subzone1\"。\nistio.custom_params.values.meshConfig.localityLbSetting.failover[*].from\n转发到哪个地域,值为string类型,如 \"region1/zone1/subzone1\"。\nistio.custom_params.values.meshConfig.localityLbSetting.failover[*].to\n\n默认重试策略\n重试次数\nistio.custom_params.values.meshConfig.defaultHttpRetryPolicy.attempts\n重试条件,值为 string\n类型,用逗号隔开,如\"5xx,gateway-error,connect-failure,refused-stream\"\nistio.custom_params.values.meshConfig.defaultHttpRetryPolicy.retryOn", + "type": "object", + "title": "自定义参数\n更新自定义参数时,如果需要保留原先的配置,需要带上原先的参数;如果不需要保留原先的配置,需要将原先的参数设置为空。\n其中,Key 为自定义的,目前在界面上的参数如下:\nistio.custom_params.values.global.proxy.resources.requests.cpu\nistio.custom_params.values.global.proxy.resources.requests.memory\nistio.custom_params.values.global.proxy.resources.limits.cpu\nistio.custom_params.values.global.proxy.resources.limits.memory\nistio.custom_params.values.sidecarInjectorWebhook.enableNamespacesByDefault\nglobal.mesh_capacity 网格规模,其值应该是 MeshCapacity 枚举类型中的值.\nglobal.mesh_capacity 目前可以是 S50P200 S200P1000 S500P2000 CUSTOM", + "required": [ + "customParams" + ], + "additionalProperties": { + "type": "string" + } + }, + "hub": { + "type": "string", + "title": "镜像仓库地址" + }, + "loadBalancerIp": { + "type": "string", + "title": "负载均衡 IP" + }, + "meshVersion": { + "type": "string", + "title": "网格的 Istio 版本" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Mesh" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "删除网格", + "operationId": "MeshManagementService_DeleteMesh", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Mesh" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/cloudshells": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "根据网格以及用户获取 CloudShell,根据授权获取用户信息", + "operationId": "MeshManagementService_GetMeshCloudShell", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "根据网格以及用户创建 CloudShell,根据授权获取用户信息", + "operationId": "MeshManagementService_CreateMeshCloudShell", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "title": "CreateIngressResponse the response of create cluster ingresses", + "properties": { + "config": { + "title": "optional", + "$ref": "#/definitions/v3alpha1CloudShellSpec" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/cloudshells/{name}": { + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "根据网格与 Shell 名字删除 CloudShell", + "operationId": "MeshManagementService_DeleteMeshCloudShell", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1CloudShell" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取网格集群列表。", + "operationId": "MeshManagementService_GetMeshManagedClusters", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "添加集群到网格", + "operationId": "MeshManagementService_BindClusterToMesh", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "title": "需要绑定的集群名称。", + "required": [ + "cluster" + ] + }, + "toInjectNamespaces": { + "type": "array", + "title": "需要注入 Sidecar 的命名空间列表。", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1BindCluster" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{cluster}": { + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "从网格移除集群", + "operationId": "MeshManagementService_RemoveClusterFromMesh", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "需要绑定的集群名称。", + "name": "cluster", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1DeleteClusterRequest" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{cluster}/east-west-gateway": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "查询集群东西网关", + "operationId": "MeshManagementService_GetClusterEastWestGateway", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "需要绑定的集群名称。", + "name": "cluster", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterEastWestGateway" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "创建或更新东西网关", + "operationId": "MeshManagementService_CreateOrUpdateClusterEastWestGateway", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群", + "name": "cluster", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "gateway": { + "title": "网关配置", + "$ref": "#/definitions/v3alpha1GatewayConfiguration" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterEastWestGateway" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "删除集群东西网关", + "operationId": "MeshManagementService_DeleteClusterEastWestGateway", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "需要绑定的集群名称。", + "name": "cluster", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterEastWestGateway" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{cluster}/remove-permissions": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "网格移除集群检测", + "operationId": "MeshManagementService_RemoveClusterPermissionsFromMesh", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "需要绑定的集群名称。", + "name": "cluster", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1DeletePermissionsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{cluster}/sidecar-management/-/upgrade-detection": { + "get": { + "tags": [ + "SidecarManagementService" + ], + "summary": "升级环境检测", + "operationId": "SidecarManagementService_UpgradeSidecarClusterDetection", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称", + "name": "cluster", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1UpgradeSidecarClusterDetectionResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{cluster}/sidecar-management/workloads": { + "get": { + "tags": [ + "SidecarManagementService" + ], + "summary": "获取集群中工作负载边车注入信息", + "operationId": "SidecarManagementService_ListMeshSidecarManagementWorkloads", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称", + "name": "cluster", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespaces", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1SidecarManagementWorkloadsListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{cluster}/sidecar-management/workloads/-/actions": { + "post": { + "tags": [ + "SidecarManagementService" + ], + "summary": "对工作负载中注入的边车进行操作", + "operationId": "SidecarManagementService_ControlMeshSidecarManagementWorkloadSidecars", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称", + "name": "cluster", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "action": { + "title": "动作类型", + "$ref": "#/definitions/v3alpha1ControlWorkloadInjectionAction" + }, + "needsRestart": { + "type": "boolean", + "title": "需要立即重启" + }, + "workloads": { + "type": "array", + "title": "需操作的工作负载", + "items": { + "$ref": "#/definitions/ControlWorkloadInjectionWorkloadMeta" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ControlWorkloadInjection" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{cluster}/sidecar-management/workloads/{workloadId}/sidecars": { + "get": { + "tags": [ + "SidecarManagementService" + ], + "summary": "获取工作负载中不同实例的边车注入情况", + "operationId": "SidecarManagementService_ListMeshSidecarManagementWorkloadSidecars", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称", + "name": "cluster", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "工作负载 ID", + "name": "workloadId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1SidecarManagementWorkloadSidecarListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{name}": { + "get": { + "tags": [ + "ClusterManagementService" + ], + "summary": "获取集群详情", + "operationId": "ClusterManagementService_GetCluster2", + "parameters": [ + { + "type": "string", + "description": "网格ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称。", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1Cluster" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{name}/config": { + "put": { + "tags": [ + "ClusterManagementService" + ], + "summary": "更新集群配置", + "operationId": "ClusterManagementService_UpdateClusterConfig2", + "parameters": [ + { + "type": "string", + "description": "网格ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称。", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "customMeshConfig": { + "description": "该字段允许为 nil,为空时清除集群自定义配置", + "type": "object", + "title": "自定义参数\n继承网格全局参数\n例如:\nistio.custom_params.values.global.proxy.resources.requests.cpu\nistio.custom_params.values.global.proxy.resources.requests.memory\nistio.custom_params.values.global.proxy.resources.limits.cpu\nistio.custom_params.values.global.proxy.resources.limits.memory", + "additionalProperties": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/clusters/{name}/namespaces": { + "get": { + "tags": [ + "ClusterManagementService" + ], + "summary": "获取集群命名空间列表", + "operationId": "ClusterManagementService_ListClusterNamespaces2", + "parameters": [ + { + "type": "string", + "description": "网格信息,仅当需要边车注入信息时提供", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "需要边车注入信息", + "name": "withInjectionDetails", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + }, + { + "type": "boolean", + "description": "是否展示包含 Istio 控制平面等信息", + "name": "withIstioControlPlaneInfo", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterNamespaceListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/delete-permissions": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "网格删除检测接口", + "operationId": "MeshManagementService_DeleteMeshPermissions", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1DeletePermissionsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/environment-statuses": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "网格升级环境检测", + "operationId": "MeshManagementService_MeshEnvironmentStatus", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "version", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshEnvironmentStatusResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/graph": { + "get": { + "tags": [ + "GraphQueryService" + ], + "summary": "查询当前网格拓扑", + "operationId": "GraphQueryService_GetGraph", + "parameters": [ + { + "type": "string", + "description": "所属网格 ID,只在 MSpider 生效。", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群范围,以逗号分割", + "name": "clusters", + "in": "query" + }, + { + "type": "string", + "description": "命名空间范围,以逗号分割", + "name": "namespaces", + "in": "query" + }, + { + "enum": [ + "LAYER_UNSPECIFIED", + "KUBERNETES", + "MESH", + "OS_LINUX", + "VM", + "INFRA", + "GENERAL" + ], + "type": "string", + "default": "LAYER_UNSPECIFIED", + "description": "期望展示的 layer 层级,比如 MESH, TRACING\n\n - KUBERNETES: 直接部署在 Kubernetes 上\n - MESH: 服务网格层级\n - OS_LINUX: 虚拟机或操作系统层级\n - INFRA: 基础设施层级,\n - GENERAL: 通用层级,可能是传统应用上报的数据", + "name": "layer", + "in": "query" + }, + { + "type": "string", + "format": "int64", + "description": "数据范围, 单位:秒(s)", + "name": "start", + "in": "query", + "required": true + }, + { + "type": "string", + "format": "int64", + "name": "end", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1Graph" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/mesh-config": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取网格全局配置", + "operationId": "MeshManagementService_GetMeshConfig", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "put": { + "tags": [ + "MeshManagementService" + ], + "summary": "更新网格全局配置", + "operationId": "MeshManagementService_UpdateMeshConfig", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "meshConfig": { + "title": "网格配置,如不填写则使用默认配置,如填写则使用填写的配置。", + "$ref": "#/definitions/v3alpha1MeshConfig" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/mesh-gateways": { + "get": { + "tags": [ + "MeshGatewayManagementService" + ], + "summary": "获取网格网关列表", + "operationId": "MeshGatewayManagementService_GetMeshGatewayList", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称", + "name": "cluster", + "in": "query" + }, + { + "type": "string", + "description": "命名空间, \"\" 代表全部命名空间, 以 ',' 分割", + "name": "namespaces", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshGatewayListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshGatewayManagementService" + ], + "summary": "创建网格网关", + "operationId": "MeshGatewayManagementService_CreateMeshGateway", + "parameters": [ + { + "type": "string", + "description": "网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "gateway", + "cluster", + "namespace" + ], + "properties": { + "cluster": { + "type": "string", + "title": "所属集群", + "required": [ + "cluster" + ] + }, + "configuration": { + "title": "网关配置", + "$ref": "#/definitions/v3alpha1GatewayConfiguration" + }, + "gateway": { + "type": "string", + "title": "网关名称", + "required": [ + "gateway" + ] + }, + "gatewayType": { + "title": "网关类型", + "$ref": "#/definitions/v3alpha1GatewayType" + }, + "namespace": { + "type": "string", + "title": "所属命名空间", + "required": [ + "namespace" + ] + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshGateway" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/mesh-gateways/{gateway}": { + "get": { + "tags": [ + "MeshGatewayManagementService" + ], + "summary": "获取网格网关", + "operationId": "MeshGatewayManagementService_GetMeshGateway", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网关名称", + "name": "gateway", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群名称", + "name": "cluster", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "命名空间", + "name": "namespace", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshGateway" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "put": { + "tags": [ + "MeshGatewayManagementService" + ], + "summary": "更新网格网关", + "operationId": "MeshGatewayManagementService_UpdateMeshGateway", + "parameters": [ + { + "type": "string", + "description": "网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网关名称", + "name": "gateway", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "cluster", + "namespace" + ], + "properties": { + "cluster": { + "type": "string", + "title": "所属集群", + "required": [ + "cluster" + ] + }, + "configuration": { + "title": "网关配置", + "$ref": "#/definitions/v3alpha1GatewayConfiguration" + }, + "gatewayType": { + "title": "网关类型", + "$ref": "#/definitions/v3alpha1GatewayType" + }, + "namespace": { + "type": "string", + "title": "所属命名空间", + "required": [ + "namespace" + ] + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshGateway" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "MeshGatewayManagementService" + ], + "summary": "删除网格网关", + "operationId": "MeshGatewayManagementService_DeleteMeshGateway", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网关名称", + "name": "gateway", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "cluster", + "namespace" + ], + "properties": { + "cluster": { + "type": "string", + "title": "集群名称", + "required": [ + "cluster" + ] + }, + "namespace": { + "type": "string", + "title": "命名空间", + "required": [ + "namespace" + ] + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshGateway" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/metrics/grafana-dashboards/global": { + "get": { + "tags": [ + "MetricsService" + ], + "summary": "获取网格全局监控 Grafana 地址", + "operationId": "MetricsService_GetGlobalGrafanaDashboard", + "parameters": [ + { + "type": "string", + "description": "所属网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "官方参考文档:\nhttps://grafana.com/docs/grafana/latest/dashboards/manage-dashboards/#configure-dashboard-time-range-controls\n\nGrafana 时间选择器,支持相对时间与绝对时间戳两种格式\n相对时间举例:now-30s, now-5m, now-24h,\nnow-3d, now/d, now/w, now-1y/fy 等示例,具体查看官方参考文档。\n绝对时间,使用时间戳,单位:秒(s)\n开始时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "from", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "结束时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "to", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1GrafanaDashboardResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/metrics/grafana-dashboards/performance": { + "get": { + "tags": [ + "MetricsService" + ], + "summary": "获取网格性能监控 Grafana 地址", + "operationId": "MetricsService_GetPerformanceGrafanaDashboard", + "parameters": [ + { + "type": "string", + "description": "所属网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "官方参考文档:\nhttps://grafana.com/docs/grafana/latest/dashboards/manage-dashboards/#configure-dashboard-time-range-controls\n\nGrafana 时间选择器,支持相对时间与绝对时间戳两种格式\n相对时间举例:now-30s, now-5m, now-24h,\nnow-3d, now/d, now/w, now-1y/fy 等示例,具体查看官方参考文档。\n绝对时间,使用时间戳,单位:秒(s)\n开始时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "from", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "结束时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "to", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1GrafanaDashboardResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/metrics/grafana-dashboards/services/{service}": { + "get": { + "tags": [ + "MetricsService" + ], + "summary": "获取网格服务监控 Grafana 地址", + "operationId": "MetricsService_GetServiceGrafanaDashboard", + "parameters": [ + { + "type": "string", + "description": "目标所属网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "目标服务", + "name": "service", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "目标命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "开始时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "from", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "结束时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "to", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1GrafanaDashboardResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/metrics/grafana-dashboards/workloads/{workload}": { + "get": { + "tags": [ + "MetricsService" + ], + "summary": "获取网格工作负载监控 Grafana 地址", + "operationId": "MetricsService_GetWorkloadGrafanaDashboard", + "parameters": [ + { + "type": "string", + "description": "目标所属网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "目标工作负载", + "name": "workload", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "目标命名空间", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "目标服务", + "name": "service", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "目标集群", + "name": "cluster", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "开始时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "from", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "结束时间;支持绝对时间戳,单位:秒(s);支持相对时间格式;", + "name": "to", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1GrafanaDashboardResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/metrics/{type}": { + "get": { + "tags": [ + "MetricsService" + ], + "summary": "查询指标数据", + "operationId": "MetricsService_GetMetrics", + "parameters": [ + { + "type": "string", + "description": "所属网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "enum": [ + "METRIC_TYPE_UNSPECIFIED", + "ISTIO_PROXY_VCPU", + "ISTIO_PROXY_MEMORY_USAGE", + "ISTIO_PROXY_BYTES_TRANSFERRED", + "TOP_5_SERVICES_BY_RPM", + "TOP_5_SERVICES_BY_ERRORS_RATE", + "TOP_5_SERVICES_BY_AVG_LATENCY" + ], + "type": "string", + "description": "指标类型", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "int64", + "description": "数据范围, 待定", + "name": "start", + "in": "query", + "required": true + }, + { + "type": "string", + "format": "int64", + "name": "end", + "in": "query", + "required": true + }, + { + "type": "string", + "format": "int64", + "description": "+Optional Matrix 输入默认间隔, 单位 s", + "name": "step", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MetricsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取多网络互联配置,如果未开启 MultiNetworksConfig.Enabled = false", + "operationId": "MeshManagementService_GetMultiNetworksConfig", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MultiNetworksConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "开启多网络互联配置", + "operationId": "MeshManagementService_EnableMultiNetworksConfig", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MultiNetworksConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "禁用多网络互联配置", + "operationId": "MeshManagementService_DisableMultiNetworksConfig", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MultiNetworksConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks/connected-networks": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取所有网格互联网络", + "operationId": "MeshManagementService_GetMeshConnectedNetworks", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ConnectedNetworks" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "更新互联网络(加入互联或者更新互联网络地址)", + "operationId": "MeshManagementService_JoinOrUpdateConnectedNetworks", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "networks" + ], + "properties": { + "networks": { + "type": "array", + "title": "成员网络分组信息", + "required": [ + "networks" + ], + "items": { + "$ref": "#/definitions/v3alpha1MeshConnectedNetwork" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ConnectedNetworks" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "分组移除互联网络", + "operationId": "MeshManagementService_RemoveConnectedNetworks", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "networks" + ], + "properties": { + "networks": { + "type": "array", + "title": "成员网络分组信息", + "required": [ + "networks" + ], + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ConnectedNetworks" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks/delete-permissions": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "禁用多网络互联配置前置检测", + "operationId": "MeshManagementService_DisableMultiNetworksConfigPermissions", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1DeletePermissionsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks/groups": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "分组列表接口", + "operationId": "MeshManagementService_ListMeshNetworks", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListMeshNetworksResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks/groups/{networkId}": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取分组详情", + "operationId": "MeshManagementService_GetMeshNetwork", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网络ID", + "name": "networkId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshNetwork" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "集群批量绑定网络分组(如果分组不存在相当于创建一个新的分组)", + "operationId": "MeshManagementService_BindClustersMeshNetwork", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网络ID", + "name": "networkId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "clusters" + ], + "properties": { + "clusters": { + "type": "array", + "title": "成员集群,必传且大于 1", + "required": [ + "clusters" + ], + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshNetwork" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "删除网络分组", + "operationId": "MeshManagementService_DeleteMeshNetwork", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网络ID", + "name": "networkId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshNetwork" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks/groups/{networkId}/clusters": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "分组集群列表接口", + "operationId": "MeshManagementService_ListMeshNetworkClusters", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网络ID", + "name": "networkId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListMeshNetworkClustersResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + }, + "post": { + "tags": [ + "MeshManagementService" + ], + "summary": "集群加入分组", + "operationId": "MeshManagementService_BindClusterMeshNetwork", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网络ID", + "name": "networkId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "title": "集群", + "required": [ + "cluster" + ] + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1BindClusterMeshNetworkRequest" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks/groups/{networkId}/clusters/{cluster}": { + "delete": { + "tags": [ + "MeshManagementService" + ], + "summary": "移除集群", + "operationId": "MeshManagementService_CleanClusterMeshNetwork", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网络ID", + "name": "networkId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "集群", + "name": "cluster", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ClusterMeshNetworkName" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/multi-networks/groups/{networkId}/delete-permissions": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "删除网络分组检测", + "operationId": "MeshManagementService_DeleteMeshNetworkPermissions", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "网络ID", + "name": "networkId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1DeletePermissionsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/namespace-injection/-/actions": { + "post": { + "tags": [ + "SidecarManagementService" + ], + "summary": "集群中命名空间边车管理信息", + "operationId": "SidecarManagementService_ControlClusterNamespaecsInjectionManagement", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "action": { + "title": "动作类型", + "$ref": "#/definitions/v3alpha1ControlNamespaceInjectionAction" + }, + "clusterInjections": { + "type": "array", + "title": "不同集群需要命名空间注入的集合", + "items": { + "$ref": "#/definitions/ControlNamespaceInjectionClusterInjections" + } + }, + "needsRestart": { + "type": "boolean", + "title": "需要立即重启" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ControlNamespaceInjection" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/service-metrics/{service}/{type}": { + "get": { + "tags": [ + "MetricsService" + ], + "summary": "查询指标数据", + "operationId": "MetricsService_GetServiceMetrics", + "parameters": [ + { + "type": "string", + "description": "所属网格 ID", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "service", + "in": "path", + "required": true + }, + { + "enum": [ + "UNSPECIFIED", + "ERROR_CODE_PERCENTAGE", + "REQUESTS_PER_MINUTE", + "AVG_LATENCY", + "RECEIVE_BYTES", + "SEND_BYTES", + "TCP_CONNECTING_COUNT" + ], + "type": "string", + "description": "指标类型", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "namespace", + "in": "query", + "required": true + }, + { + "type": "string", + "format": "int64", + "description": "数据范围, 待定", + "name": "start", + "in": "query", + "required": true + }, + { + "type": "string", + "format": "int64", + "name": "end", + "in": "query", + "required": true + }, + { + "type": "string", + "format": "int64", + "description": "+Optional Matrix 输入默认间隔, 单位 s", + "name": "step", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MetricsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/sidecar-management": { + "get": { + "tags": [ + "SidecarManagementService" + ], + "summary": "获取全局边车配置情况", + "operationId": "SidecarManagementService_ListMeshSidecarManagementClusterWideConfigs", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1SidecarManagementClusterWideConfigListResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/sidecar-management/-/actions": { + "post": { + "tags": [ + "SidecarManagementService" + ], + "summary": "设置全局边车配置", + "operationId": "SidecarManagementService_ControlMeshSidecarManagementClusterWideConfigs", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "action": { + "title": "是否全局自动注入边车", + "$ref": "#/definitions/ControlClusterSidecarConfigAutoInjection" + }, + "clusters": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1ControlClusterSidecarConfigClusterConfig" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ControlClusterSidecarConfig" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/sidecar-management/-/supported-hot-upgrade-versions": { + "get": { + "tags": [ + "SidecarManagementService" + ], + "summary": "获取 Sidecar 热升级可用 Istio 版本列表", + "operationId": "SidecarManagementService_ListSidecarSupportedHotUpgradeIstioVersions", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListSupportedIstioHotUpgradeVersionsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/sidecar-management/-/upgrader": { + "post": { + "tags": [ + "SidecarManagementService" + ], + "summary": "边车升级", + "operationId": "SidecarManagementService_UpgradeSidecars", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "required": [ + "cluster" + ] + }, + "concurrency": { + "type": "integer", + "format": "int32", + "title": "处理边车升级的并发数,默认 1" + }, + "inPlaceUpgrades": { + "type": "boolean", + "title": "native to upgrade" + }, + "namespace": { + "type": "string" + }, + "pods": { + "type": "array", + "title": "字段 `pods` `workloads` 二选一\n如果同时没有设置 `pods` and `workloads`, 将会升级整个命名空间。\n支持格式:1. 同命名空间, 只需要传 pod_name; 2. 多命名空间:ns/pod_name,\n且字段 `namespace` 不传", + "items": { + "type": "string" + } + }, + "reinject": { + "type": "boolean", + "title": "hot reinject" + }, + "version": { + "type": "string", + "title": "hot upgrade, need set version" + }, + "waitPerPodSeconds": { + "type": "integer", + "format": "int32", + "title": "等待每个边车升级的花费时间,默认 5s" + }, + "workloads": { + "type": "array", + "title": "字段 `pods` `workloads` 二选一\n如果同时没有设置 `pods` and `workloads`, 将会升级整个命名空间。\n支持格式:\n 1. 同命名空间, 只需要传 workload(非workload_id);\n 2. 多命名空间:ns/workload、ns2/workload2, 且字段 `namespace` 不传", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "title": "Stream result of v3alpha1SidecarUpgraderProcess", + "properties": { + "error": { + "$ref": "#/definitions/googlerpcStatus" + }, + "result": { + "$ref": "#/definitions/v3alpha1SidecarUpgraderProcess" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/summary": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取网格统计信息", + "operationId": "MeshManagementService_GetMeshResourceSummary", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1MeshResourceSummary" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/supported-upgrade-versions": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "获取网格可升级 Istio 版本列表", + "operationId": "MeshManagementService_ListSupportedUpgradeIstioVersions", + "parameters": [ + { + "type": "string", + "name": "meshId", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListSupportedIstioUpgradeVersionsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/meshes/{meshId}/upgrade-progress": { + "get": { + "tags": [ + "MeshManagementService" + ], + "summary": "网格升级过程信息", + "operationId": "MeshManagementService_UpgradeProgress", + "parameters": [ + { + "type": "string", + "description": "网格名称", + "name": "meshId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1UpgradeProgressResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/settings/supported-istio-versions": { + "get": { + "tags": [ + "GlobalSettingsService" + ], + "summary": "获取 Istio 版本列表", + "operationId": "GlobalSettingsService_ListSupportedIstioVersions", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListSupportedIstioVersionsResp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/workspace-management/meshes": { + "get": { + "tags": [ + "WorkspaceService" + ], + "operationId": "WorkspaceService_ListMeshInstances", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListMeshInstancesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/workspace-management/meshes/-/actions": { + "post": { + "tags": [ + "WorkspaceService" + ], + "operationId": "WorkspaceService_BindMeshInstances", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v3alpha1BindMeshInstancesAction" + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1BindMeshInstancesAction" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/workspace-management/namespaces": { + "get": { + "tags": [ + "WorkspaceService" + ], + "operationId": "WorkspaceService_ListMeshNamespaceInstances", + "parameters": [ + { + "type": "string", + "description": "所属网格实例,不填写就是所有网格中的命名空间信息", + "name": "meshId", + "in": "query", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListMeshNamespaceInstancesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/workspace-management/namespaces/-/actions": { + "post": { + "tags": [ + "WorkspaceService" + ], + "operationId": "WorkspaceService_BindMeshNamespaceInstances", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v3alpha1BindMeshNamespaceInstancesAction" + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1BindMeshNamespaceInstancesAction" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/apis/mspider.io/v3alpha1/workspace-management/workspaces": { + "get": { + "tags": [ + "WorkspaceService" + ], + "operationId": "WorkspaceService_ListWorkspaces", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "总共有多少条目,请求时可以不用传递", + "name": "page.total", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", + "name": "page.page", + "in": "query" + }, + { + "type": "integer", + "format": "int32", + "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", + "name": "page.pageSize", + "in": "query" + }, + { + "type": "string", + "description": "排序规则,支持字符串和数字类型的字段进行排序", + "name": "page.sort", + "in": "query" + }, + { + "type": "string", + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "name": "page.search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v3alpha1ListWorkspacesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + } + } + }, + "/hello": { + "get": { + "tags": [ + "Greeter" + ], + "summary": "Sends a greeting", + "operationId": "Greeter_SayHello", + "parameters": [ + { + "type": "string", + "name": "name", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + } + }, + "definitions": { + "BindMeshNamespaceInstancesActionNamespace": { + "type": "object", + "required": [ + "namespace", + "meshId" + ], + "properties": { + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + }, + "namespace": { + "type": "string", + "title": "命名空间名称", + "required": [ + "namespace" + ] + } + } + }, + "CloudShellStatusPhase": { + "description": " - UNSPECIFIED: Unspecified type.", + "type": "string", + "default": "UNSPECIFIED", + "enum": [ + "UNSPECIFIED", + "RECONCILING", + "READY", + "FAILED" + ] + }, + "ClusterNamespaceInjectionManagement": { + "type": "object", + "properties": { + "injectionStatus": { + "$ref": "#/definitions/ClusterNamespaceNamespaceInjectionStatus" + }, + "injectionsTotal": { + "type": "integer", + "format": "int64", + "title": "工作负载边车注入量" + }, + "replicasTotal": { + "type": "integer", + "format": "int64", + "title": "工作负载实例总数" + }, + "workloadsTotal": { + "type": "integer", + "format": "int64", + "title": "命名空间下工作负载数量" + } + } + }, + "ClusterNamespaceNamespaceInjectionStatus": { + "type": "string", + "title": "- NAMESPACE_INJECTION_STATUS_UNSPECIFIED: 未设置\n - ENABLED: 已启用\n - DISABLED: 禁用\n - ENABLED_WAIT: 已启用,等待重启\n - DISABLED_WAIT: 禁用,等待重启", + "default": "NAMESPACE_INJECTION_STATUS_UNSPECIFIED", + "enum": [ + "NAMESPACE_INJECTION_STATUS_UNSPECIFIED", + "ENABLED", + "DISABLED", + "ENABLED_WAIT", + "DISABLED_WAIT" + ] + }, + "ControlClusterSidecarConfigAutoInjection": { + "type": "string", + "default": "ACTION_UNSPECIFIED", + "enum": [ + "ACTION_UNSPECIFIED", + "ENABLE", + "DISABLE" + ] + }, + "ControlNamespaceInjectionClusterInjections": { + "type": "object", + "required": [ + "cluster", + "namespaces" + ], + "properties": { + "cluster": { + "type": "string", + "title": "集群名称", + "required": [ + "cluster" + ] + }, + "namespaces": { + "type": "array", + "title": "需操作的命名空间", + "required": [ + "namespaces" + ], + "items": { + "type": "string" + } + } + } + }, + "ControlWorkloadInjectionWorkloadMeta": { + "type": "object", + "required": [ + "namespace", + "workloadId" + ], + "properties": { + "namespace": { + "type": "string", + "title": "命名空间", + "required": [ + "namespace" + ] + }, + "sidecarResource": { + "title": "边车资源管理情况", + "$ref": "#/definitions/commonResources" + }, + "trafficRules": { + "type": "array", + "title": "流量透传规则,当 Action 为 TRAFFIC_PASS_RULE 时必传。", + "items": { + "$ref": "#/definitions/v3alpha1TrafficPassRule" + } + }, + "workloadId": { + "type": "string", + "title": "工作负载 ID", + "required": [ + "workloadId" + ] + } + } + }, + "LabelsOPOPType": { + "description": "- OVERRIDE_SET: 覆盖 + 设置,如果已经存在,会覆盖,不存在则设置\n - DEL: 删除", + "type": "string", + "title": "操作类型", + "default": "OP_UNSPECIFIED", + "enum": [ + "OP_UNSPECIFIED", + "OVERRIDE_SET", + "DEL" + ] + }, + "LocalityLoadBalancerSettingDistribute": { + "description": "`*` - matches all localities\n\n`us-west/*` - all zones and sub-zones within the us-west region\n\n`us-west/zone-1/*` - all sub-zones within us-west/zone-1", + "type": "object", + "title": "Describes how traffic originating in the 'from' zone or sub-zone is\ndistributed over a set of 'to' zones. Syntax for specifying a zone is\n{region}/{zone}/{sub-zone} and terminal wildcards are allowed on any\nsegment of the specification. Examples:", + "properties": { + "from": { + "description": "Originating locality, '/' separated, e.g. 'region/zone/sub_zone'.", + "type": "string" + }, + "to": { + "description": "Map of upstream localities to traffic distribution weights. The sum\nof all weights should be 100. Any locality not present will receive\nno traffic.", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + } + } + }, + "LocalityLoadBalancerSettingFailover": { + "description": "Specify the traffic failover policy across regions. Since zone and\nsub-zone failover is supported by default this only needs to be specified\nfor regions when the operator needs to constrain traffic failover so that\nthe default behavior of failing over to any endpoint globally does not\napply. This is useful when failing over traffic across regions would not\nimprove service health or may need to be restricted for other reasons\nlike regulatory controls.", + "type": "object", + "properties": { + "from": { + "description": "Originating region.", + "type": "string" + }, + "to": { + "description": "Destination region the traffic will fail over to when endpoints in\nthe 'from' region becomes unhealthy.", + "type": "string" + } + } + }, + "MeshEnvironmentStatusRespKubernetes": { + "type": "object", + "properties": { + "isVersionSupported": { + "type": "boolean", + "title": "版本是否被支持" + }, + "version": { + "type": "string", + "title": "kubernetes 版本" + } + } + }, + "MeshNetworkClustersInfo": { + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "type": "string" + } + }, + "running": { + "type": "integer", + "format": "int32", + "title": "正在运行中的 Cluster 数量" + }, + "total": { + "type": "integer", + "format": "int32", + "title": "Clusters 总数" + } + } + }, + "Metadata": { + "type": "object", + "properties": { + "clientIp": { + "type": "string" + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "type": "string" + } + } + }, + "MultiNetworksConfigGatewayRule": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "名称,default cross-networks-gateway" + }, + "spec": { + "$ref": "#/definitions/v1beta1Gateway" + } + } + }, + "NodeMetadata": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "layer": { + "title": "所述层级", + "$ref": "#/definitions/v1alpha1Layer" + }, + "name": { + "type": "string", + "title": "当前节点需要显示的名字。" + }, + "namespace": { + "type": "string" + }, + "properties": { + "type": "object", + "title": "存储额外的信息,比如版本信息之类的。", + "additionalProperties": { + "type": "string" + } + }, + "service": { + "type": "string", + "title": "预定义的所属服务信息,可以为空。" + } + } + }, + "NodePosition": { + "type": "object", + "title": "Position 可用于标记节点在画布中的位置。\n如果存在此值,那么就是后端计算出位置之后前端直接渲染。\n如果不需要,也可以不实现,由前端选择合适的方式进行展现,或者自己实现。", + "properties": { + "x": { + "type": "number", + "format": "float" + }, + "y": { + "type": "number", + "format": "float" + } + } + }, + "OutboundTrafficPolicyMode": { + "type": "string", + "title": "- MODE_UNSPECIFIED: Unspecified type.\n - REGISTRY_ONLY: outbound traffic will be restricted to services defined in the\nservice registry as well as those defined through ServiceEntries\n - ALLOW_ANY: outbound traffic to unknown destinations will be allowed, in case\nthere are no services or ServiceEntries for the destination port", + "default": "MODE_UNSPECIFIED", + "enum": [ + "MODE_UNSPECIFIED", + "REGISTRY_ONLY", + "ALLOW_ANY" + ] + }, + "Payload": { + "type": "object", + "properties": { + "body": { + "$ref": "#/definitions/protobufAny" + }, + "metadata": { + "$ref": "#/definitions/Metadata" + } + } + }, + "ServerTLSSettingsTLSProtocol": { + "description": "TLS protocol versions.\n\n - TLS_AUTO: Automatically choose the optimal TLS version.\n - TLSV1_0: TLS version 1.0\n - TLSV1_1: TLS version 1.1\n - TLSV1_2: TLS version 1.2\n - TLSV1_3: TLS version 1.3", + "type": "string", + "default": "TLS_AUTO", + "enum": [ + "TLS_AUTO", + "TLSV1_0", + "TLSV1_1", + "TLSV1_2", + "TLSV1_3" + ] + }, + "SidecarManagementWorkloadInjectionStatus": { + "description": " - INJECTION_STATUS_UNSPECIFIED: Unspecified type.\n - INJECTED: The workload is already in injected status.\n - UN_INJECTED: The workload is un-injected.\n - NEED_RESTART: The workload is injected or un-injected, but needs to restart to take\neffect.", + "type": "string", + "default": "INJECTION_STATUS_UNSPECIFIED", + "enum": [ + "INJECTION_STATUS_UNSPECIFIED", + "INJECTED", + "UN_INJECTED", + "NEED_RESTART" + ] + }, + "SidecarUpgraderProcessTarget": { + "type": "object", + "properties": { + "kind": { + "$ref": "#/definitions/TargetKind" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "result": { + "$ref": "#/definitions/v3alpha1SidecarUpgraderProcessResult" + } + } + }, + "TargetKind": { + "type": "string", + "default": "KIND_UNSPECIFIED", + "enum": [ + "KIND_UNSPECIFIED", + "WORKLOAD", + "POD" + ] + }, + "TrafficPassRuleDirection": { + "type": "string", + "title": "- IN: 入站流量\n - OUT: 出站流量", + "default": "DIRECTION_UNSPECIFIED", + "enum": [ + "DIRECTION_UNSPECIFIED", + "IN", + "OUT" + ] + }, + "TrafficPassRuleIPRange": { + "type": "object", + "required": [ + "network", + "prefix" + ], + "properties": { + "network": { + "type": "string", + "required": [ + "network" + ] + }, + "prefix": { + "type": "integer", + "format": "int64", + "required": [ + "prefix" + ] + } + } + }, + "TrafficPassRuleMatchType": { + "type": "string", + "title": "- INCLUDE: 匹配\n - EXCLUDE: 不匹配, 按照目前的设计,应该全部为 EXCLUDE,表示流量透传。", + "default": "MATCH_TYPE_UNSPECIFIED", + "enum": [ + "MATCH_TYPE_UNSPECIFIED", + "INCLUDE", + "EXCLUDE" + ] + }, + "UpgradeProgressRespCondition": { + "type": "object", + "properties": { + "description": { + "type": "string", + "title": "对于升级条件的一些信息补充" + }, + "name": { + "type": "string", + "title": "升级条件名称" + }, + "result": { + "title": "升级条件结果", + "$ref": "#/definitions/UpgradeProgressRespResult" + } + } + }, + "UpgradeProgressRespResult": { + "type": "string", + "title": "- UNSPECIFIED: Unspecified type.\n - UPGRADING: 升级中\n - FAILED: 失败\n - READY: 就绪", + "default": "UNSPECIFIED", + "enum": [ + "UNSPECIFIED", + "UPGRADING", + "FAILED", + "READY" + ] + }, + "WorkloadSidecarInfoSidecarStatus": { + "description": " - SIDECAR_STATUS_UNSPECIFIED: Unspecified type.\n - NOT_INJECTED: The sidedcar is not injected.\n - RUNNING: The sidecar is injected, and the pod is running.\n - FAILED: The sidecar injection is failed.", + "type": "string", + "default": "SIDECAR_STATUS_UNSPECIFIED", + "enum": [ + "SIDECAR_STATUS_UNSPECIFIED", + "NOT_INJECTED", + "RUNNING", + "FAILED" + ] + }, + "commonPagination": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32", + "title": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage" + }, + "pageSize": { + "type": "integer", + "format": "int32", + "title": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize" + }, + "search": { + "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", + "type": "string" + }, + "sort": { + "type": "string", + "title": "排序规则,支持字符串和数字类型的字段进行排序" + }, + "total": { + "type": "integer", + "format": "int64", + "title": "总共有多少条目,请求时可以不用传递" + } + } + }, + "commonResourceTypes": { + "type": "object", + "properties": { + "cpu": { + "type": "string", + "title": "cpu" + }, + "memory": { + "type": "string", + "title": "memory" + } + } + }, + "commonResources": { + "type": "object", + "properties": { + "limits": { + "title": "限制资源", + "$ref": "#/definitions/commonResourceTypes" + }, + "requests": { + "title": "请求资源", + "$ref": "#/definitions/commonResourceTypes" + } + } + }, + "googlerpcStatus": { + "type": "object", + "properties": { + "id": { + "description": "错误 ID,用于判断错误类型", + "type": "string" + }, + "message": { + "description": "错误消息,会自动切换中英文", + "type": "string" + } + } + }, + "graphv1alpha1Status": { + "type": "object", + "title": "Status 用于定义节点或连线的状态。\n比如希望展示当前服务的 QPS,那么可以如下:\n{ name: qps, value: 100, properties: {protocol: http}}\n如果想要展示命名空间的服务数量:\n{ name: service_count, value: 5}\n具体的释义可以根据各个产品决定。", + "properties": { + "name": { + "type": "string", + "title": "可以定义一些初步的 name 共识:\nreplicas 表示副本数\navailableReplicas 表示可用副本数\nrequestsPerMinute 请求速率(RPM)\nerrorRate 错误率(%)\navgLatency 平均延迟(ms)\nconnections 连接数\nreceiveBytes 接收吞吐(B/S)\nsendBytes 发送吞吐(B/S)\nhealthyStatus 健康状态;0(未知) | 1(健康) | 2(告警) | 3(异常)" + }, + "properties": { + "type": "object", + "title": "properties 可以给这个 Status 增加一些扩展的参数,\n比如在网格中,流量可能可以分为入口或者出口流量。", + "additionalProperties": { + "type": "string" + } + }, + "value": { + "type": "number", + "format": "float", + "title": "具体的值,只能用浮点数来表示状态。" + } + } + }, + "helloworldHelloReply": { + "type": "object", + "title": "The response message containing the greetings", + "properties": { + "message": { + "type": "string" + } + } + }, + "management_apisidecarv3alpha1IstioVersion": { + "type": "object", + "properties": { + "isControlPlaneVersion": { + "type": "boolean", + "title": "是否是控制面版本" + }, + "version": { + "type": "string", + "title": "istio 版本" + } + } + }, + "mesh_gatewayv3alpha1Status": { + "description": "Status describes the current state of a component.\n\n - STATUS_UNSPECIFIED: Component is not present.\n - RUNNING: 运行中\n - ERROR: 异常\n - UPDATING: 更新中\n - CREATING: 创建中\n - DELETING: 删除中", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "RUNNING", + "ERROR", + "UPDATING", + "CREATING", + "DELETING" + ] + }, + "meshv3alpha1ClusterInfo": { + "type": "object", + "properties": { + "healthyTotal": { + "type": "integer", + "format": "int32", + "title": "健康集群总数" + }, + "total": { + "type": "integer", + "format": "int32", + "title": "总数" + } + } + }, + "monitorv3alpha1MetricType": { + "type": "string", + "title": "- METRIC_TYPE_UNSPECIFIED: Unspecified type.\n - ISTIO_PROXY_VCPU: vCPU: 边车代理 vCPU 指标\n - ISTIO_PROXY_MEMORY_USAGE: Memory Usage: 边车代理内存使用率\n - ISTIO_PROXY_BYTES_TRANSFERRED: Bytes transferred / sec:\n - TOP_5_SERVICES_BY_RPM: 服务请求速率 TOP5\n - TOP_5_SERVICES_BY_ERRORS_RATE: 服务错误率 TOP5\n - TOP_5_SERVICES_BY_AVG_LATENCY: 服务平均时延 TOP5", + "default": "METRIC_TYPE_UNSPECIFIED", + "enum": [ + "METRIC_TYPE_UNSPECIFIED", + "ISTIO_PROXY_VCPU", + "ISTIO_PROXY_MEMORY_USAGE", + "ISTIO_PROXY_BYTES_TRANSFERRED", + "TOP_5_SERVICES_BY_RPM", + "TOP_5_SERVICES_BY_ERRORS_RATE", + "TOP_5_SERVICES_BY_AVG_LATENCY" + ] + }, + "monitorv3alpha1Sample": { + "type": "object", + "properties": { + "metric": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "values": { + "$ref": "#/definitions/v3alpha1SamplePair" + } + } + }, + "monitorv3alpha1SampleStream": { + "type": "object", + "properties": { + "metric": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "values": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1SamplePair" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": false + }, + "rpcStatus": { + "type": "object", + "properties": { + "id": { + "description": "错误 ID,用于判断错误类型", + "type": "string" + }, + "message": { + "description": "错误消息,会自动切换中英文", + "type": "string" + } + } + }, + "v1alpha1Edge": { + "type": "object", + "title": "Edge 表示连线,用于连接两个 Node。", + "properties": { + "id": { + "type": "string", + "title": "与 Node.id 一致,一个唯一标志符,理论上,Edge 的 ID 可以为空。" + }, + "properties": { + "type": "object", + "title": "当前连线的一些扩展状态,比如可以展示当前协议,线的展示类型等。\n根据各个产品商议。", + "additionalProperties": { + "type": "string" + } + }, + "source": { + "type": "string", + "title": "source 表示当前连线的起始节点 ID" + }, + "statuses": { + "type": "array", + "title": "当前连线各种状态", + "items": { + "$ref": "#/definitions/graphv1alpha1Status" + } + }, + "target": { + "type": "string", + "title": "target 表示当前连线的目标节点 ID" + } + } + }, + "v1alpha1Graph": { + "description": "样例 2,根据服务网格的观测数据,画出拓扑图\n{\n\"nodes\": [\n{\n\"id\": \"test-cluster/test-ns\",\n\"type\": \"NAMESPACE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"name\": \"test-ns\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 10,\n\"properties\": {\n\"type\": \"pod\"\n}\n},\n{\n\"name\": \"service_count\",\n\"value\": 5\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 133.5,\n\"properties\": {\n\"direction\": \"in\"\n}\n},\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 2,\n\"properties\": {\n\"direction\": \"out\"\n}\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo-client\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo-client\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 100,\n\"properties\": {\n\"direction\": \"out\"\n}\n}\n]\n}\n],\n\"edges\": [\n{\n\"id\":\n\"test-cluster/test-ns/services/echo-client---test-cluster/test-ns/services/echo\"\n\"source\": \"test-cluster/test-ns/services/echo-client\",\n\"target\": \"test-cluster/test-ns/services/echo\",\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 100\n}\n],\n\"properties\": {\n\"protocol\": \"HTTP\"\n}\n}\n],\n\"type\": \"SERVICE_SCOPE\"\n}", + "type": "object", + "title": "样例 1,根据 Kubernetes 的资源结构,画出拓扑图(可能不存在节点连线)\n{\n\"nodes\": [\n{\n\"id\": \"test-cluster/test-ns\",\n\"type\": \"NAMESPACE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"name\": \"test-ns\",\n\"layer\": \"KUBERNETES\"\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 10,\n\"properties\": {\n\"type\": \"pod\"\n}\n},\n{\n\"name\": \"service_count\",\n\"value\": 5\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo\",\n\"layer\": \"KUBERNETES\"\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 3,\n\"properties\": {\n\"type\": \"pod\"\n}\n}\n]\n}\n],\n\"type\": \"SERVICE_SCOPE\"\n}", + "properties": { + "edges": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Edge" + } + }, + "graphType": { + "$ref": "#/definitions/v1alpha1GraphType" + }, + "layer": { + "$ref": "#/definitions/v1alpha1Layer" + }, + "nodes": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1Node" + } + } + } + }, + "v1alpha1GraphType": { + "description": "- CLUSTER_SCOPE: 用于展现集群之间的拓扑关系\n - NAMESPACE_SCOPE: 用于展示命名空间之间的拓扑关系", + "type": "string", + "title": "图的展示类型\n与节点类型 NodeType 不同的是,如果 GraphType 为 WORKLOAD,\n但是也可以在接口中返回 Namespace 的 Node 可能用于用户手动展开等场景。", + "default": "GRAPH_UNSPECIFIED", + "enum": [ + "GRAPH_UNSPECIFIED", + "CLUSTER_SCOPE", + "NAMESPACE_SCOPE", + "SERVICE_SCOPE", + "WORKLOAD_SCOPE", + "INSTANCE_SCOPE", + "MIXED" + ] + }, + "v1alpha1Layer": { + "description": "- KUBERNETES: 直接部署在 Kubernetes 上\n - MESH: 服务网格层级\n - OS_LINUX: 虚拟机或操作系统层级\n - INFRA: 基础设施层级,\n - GENERAL: 通用层级,可能是传统应用上报的数据", + "type": "string", + "title": "像 Skywalking 一样,表示当前所处的层级\n用于展示不同的视图模型,甚至可以展示不同层级之间的关系。", + "default": "LAYER_UNSPECIFIED", + "enum": [ + "LAYER_UNSPECIFIED", + "KUBERNETES", + "MESH", + "OS_LINUX", + "VM", + "INFRA", + "GENERAL" + ] + }, + "v1alpha1Node": { + "type": "object", + "title": "Node 表示图上的每一个实体点", + "properties": { + "id": { + "type": "string", + "title": "节点 ID,不可重复,可以按照一定规则生成。" + }, + "metadata": { + "$ref": "#/definitions/NodeMetadata" + }, + "parent": { + "type": "string", + "title": "父节点的 ID,可选实现,可能在做一些依赖关系的时候会用到。\n也可以用在,比如将多个服务放在一个 Namespace 的匡中这种场景。" + }, + "position": { + "title": "节点的位置标记", + "$ref": "#/definitions/NodePosition" + }, + "statuses": { + "type": "array", + "title": "当前节点各种状态", + "items": { + "$ref": "#/definitions/graphv1alpha1Status" + } + }, + "type": { + "title": "节点类型,可用于前端展现不同的图标,或者进行后一步操作。", + "$ref": "#/definitions/v1alpha1NodeType" + } + } + }, + "v1alpha1NodeType": { + "type": "string", + "title": "- WORKLOAD: 比如需要展示 Deployment 之类的 Workload\n - INSTANCE: 实例,比如 Pod 的时候可以展示\n - NODE: 节点,如果需要的话\n - CUSTOM: 自定义类型,如果需要的话,推荐通过 metadata.properties.type\n进行详细说明。", + "default": "NODE_TYPE_UNSPECIFIED", + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "CLUSTER", + "NAMESPACE", + "SERVICE", + "WORKLOAD", + "INSTANCE", + "NODE", + "CUSTOM" + ] + }, + "v1alpha3HTTPRetry": { + "description": "Describes the retry policy to use when a HTTP request fails. For\nexample, the following rule sets the maximum number of retries to 3 when\ncalling ratings:v1 service, with a 2s timeout per retry attempt.\nA retry will be attempted if there is a connect-failure, refused_stream\nor when the upstream server responds with Service Unavailable(503).\n\n{{\u003ctabset category-name=\"example\"\u003e}}\n{{\u003ctab name=\"v1alpha3\" category-value=\"v1alpha3\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: ratings-route\nspec:\n hosts:\n - ratings.prod.svc.cluster.local\n http:\n - route:\n - destination:\n host: ratings.prod.svc.cluster.local\n subset: v1\n retries:\n attempts: 3\n perTryTimeout: 2s\n retryOn: connect-failure,refused-stream,503\n```\n{{\u003c/tab\u003e}}\n\n{{\u003ctab name=\"v1beta1\" category-value=\"v1beta1\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1beta1\nkind: VirtualService\nmetadata:\n name: ratings-route\nspec:\n hosts:\n - ratings.prod.svc.cluster.local\n http:\n - route:\n - destination:\n host: ratings.prod.svc.cluster.local\n subset: v1\n retries:\n attempts: 3\n perTryTimeout: 2s\n retryOn: gateway-error,connect-failure,refused-stream\n```\n{{\u003c/tab\u003e}}\n{{\u003c/tabset\u003e}}", + "type": "object", + "required": [ + "attempts" + ], + "properties": { + "attempts": { + "description": "Number of retries to be allowed for a given request. The interval\nbetween retries will be determined automatically (25ms+). When request\n`timeout` of the [HTTP\nroute](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute)\nor `per_try_timeout` is configured, the actual number of retries\nattempted also depends on the specified request `timeout` and\n`per_try_timeout` values.", + "type": "integer", + "format": "int32", + "required": [ + "attempts" + ] + }, + "perTryTimeout": { + "description": "Timeout per attempt for a given request, including the initial call and\nany retries. Format: 1h/1m/1s/1ms. MUST BE \u003e=1ms. Default is same value\nas request `timeout` of the [HTTP\nroute](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute),\nwhich means no timeout.", + "type": "string" + }, + "retryOn": { + "description": "Specifies the conditions under which retry takes place.\nOne or more policies can be specified using a ‘,’ delimited list.\nIf `retry_on` specifies a valid HTTP status, it will be added to\nretriable_status_codes retry policy. See the [retry\npolicies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on)\nand [gRPC retry\npolicies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-grpc-on)\nfor more details.", + "type": "string" + }, + "retryRemoteLocalities": { + "description": "Flag to specify whether the retries should retry to other localities.\nSee the [retry plugin\nconfiguration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management#retry-plugin-configuration)\nfor more details.", + "type": "boolean" + } + } + }, + "v1alpha3LocalityLoadBalancerSetting": { + "description": "Locality-weighted load balancing allows administrators to control the\ndistribution of traffic to endpoints based on the localities of where the\ntraffic originates and where it will terminate. These localities are\nspecified using arbitrary labels that designate a hierarchy of localities in\n{region}/{zone}/{sub-zone} form. For additional detail refer to\n[Locality\nWeight](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight)\nThe following example shows how to setup locality weights mesh-wide.\n\nGiven a mesh with workloads and their service deployed to \"us-west/zone1/*\"\nand \"us-west/zone2/*\". This example specifies that when traffic accessing a\nservice originates from workloads in \"us-west/zone1/*\", 80% of the traffic\nwill be sent to endpoints in \"us-west/zone1/*\", i.e the same zone, and the\nremaining 20% will go to endpoints in \"us-west/zone2/*\". This setup is\nintended to favor routing traffic to endpoints in the same locality.\nA similar setting is specified for traffic originating in \"us-west/zone2/*\".\n\n```yaml\n distribute:\n - from: us-west/zone1/*\n to:\n \"us-west/zone1/*\": 80\n \"us-west/zone2/*\": 20\n - from: us-west/zone2/*\n to:\n \"us-west/zone1/*\": 20\n \"us-west/zone2/*\": 80\n```\n\nIf the goal of the operator is not to distribute load across zones and\nregions but rather to restrict the regionality of failover to meet other\noperational requirements an operator can set a 'failover' policy instead of\na 'distribute' policy.\n\nThe following example sets up a locality failover policy for regions.\nAssume a service resides in zones within us-east, us-west \u0026 eu-west\nthis example specifies that when endpoints within us-east become unhealthy\ntraffic should failover to endpoints in any zone or sub-zone within eu-west\nand similarly us-west should failover to us-east.\n\n```yaml\n failover:\n - from: us-east\n to: eu-west\n - from: us-west\n to: us-east\n```\nLocality load balancing settings.", + "type": "object", + "properties": { + "distribute": { + "description": "Optional: only one of distribute, failover or failoverPriority can be\nset. Explicitly specify loadbalancing weight across different zones and\ngeographical locations. Refer to [Locality weighted load\nbalancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight)\nIf empty, the locality weight is set according to the endpoints number\nwithin it.", + "type": "array", + "items": { + "$ref": "#/definitions/LocalityLoadBalancerSettingDistribute" + } + }, + "enabled": { + "description": "enable locality load balancing, this is DestinationRule-level and will\noverride mesh wide settings in entirety. e.g. true means that turn on\nlocality load balancing for this DestinationRule no matter what mesh wide\nsettings is.", + "type": "boolean" + }, + "failover": { + "description": "Optional: only one of distribute, failover or failoverPriority can be\nset. Explicitly specify the region traffic will land on when endpoints in\nlocal region becomes unhealthy. Should be used together with\nOutlierDetection to detect unhealthy endpoints. Note: if no\nOutlierDetection specified, this will not take effect.", + "type": "array", + "items": { + "$ref": "#/definitions/LocalityLoadBalancerSettingFailover" + } + }, + "failoverPriority": { + "description": "1. Endpoints matching all N labels with the client proxy have priority\nP(0) i.e. the highest priority.\n2. Endpoints matching the first N-1 labels with the client proxy have\npriority P(1) i.e. second highest priority.\n3. By extension of this logic, endpoints matching only the first label\nwith the client proxy has priority P(N-1) i.e. second lowest priority.\n4. All the other endpoints have priority P(N) i.e. lowest priority.\n\nNote: For a label to be considered for match, the previous labels must\nmatch, i.e. nth label would be considered matched only if first n-1\nlabels match.\n\nIt can be any label specified on both client and server workloads.\nThe following labels which have special semantic meaning are also\nsupported:\n\n - `topology.istio.io/network` is used to match the network metadata of\n an endpoint, which can be specified by pod/namespace label\n `topology.istio.io/network`, sidecar env `ISTIO_META_NETWORK` or\n MeshNetworks.\n - `topology.istio.io/cluster` is used to match the clusterID of an\n endpoint, which can be specified by pod label\n `topology.istio.io/cluster` or pod env `ISTIO_META_CLUSTER_ID`.\n - `topology.kubernetes.io/region` is used to match the region metadata\n of an endpoint, which maps to Kubernetes node label\n `topology.kubernetes.io/region` or the deprecated label\n `failure-domain.beta.kubernetes.io/region`.\n - `topology.kubernetes.io/zone` is used to match the zone metadata of\n an endpoint, which maps to Kubernetes node label\n `topology.kubernetes.io/zone` or the deprecated label\n `failure-domain.beta.kubernetes.io/zone`.\n - `topology.istio.io/subzone` is used to match the subzone metadata of\n an endpoint, which maps to Istio node label\n `topology.istio.io/subzone`.\n\nThe below topology config indicates the following priority levels:\n\n```yaml\nfailoverPriority:\n- \"topology.istio.io/network\"\n- \"topology.kubernetes.io/region\"\n- \"topology.kubernetes.io/zone\"\n- \"topology.istio.io/subzone\"\n```\n\n1. endpoints match same [network, region, zone, subzone] label with the\nclient proxy have the highest priority.\n2. endpoints have same [network, region, zone] label but different\n[subzone] label with the client proxy have the second highest priority.\n3. endpoints have same [network, region] label but different [zone] label\nwith the client proxy have the third highest priority.\n4. endpoints have same [network] but different [region] labels with the\nclient proxy have the fourth highest priority.\n5. all the other endpoints have the same lowest priority.\n\nOptional: only one of distribute, failover or failoverPriority can be\nset. And it should be used together with `OutlierDetection` to detect\nunhealthy endpoints, otherwise has no effect.", + "type": "array", + "title": "failoverPriority is an ordered list of labels used to sort endpoints to\ndo priority based load balancing. This is to support traffic failover\nacross different groups of endpoints. Suppose there are total N labels\nspecified:", + "items": { + "type": "string" + } + } + } + }, + "v1beta1Gateway": { + "description": "Gateway describes a load balancer operating at the edge of the mesh\nreceiving incoming or outgoing HTTP/TCP connections.\n\n\u003c!-- crd generation tags\n+cue-gen:Gateway:groupName:networking.istio.io\n+cue-gen:Gateway:version:v1beta1\n+cue-gen:Gateway:annotations:helm.sh/resource-policy=keep\n+cue-gen:Gateway:labels:app=istio-pilot,chart=istio,heritage=Tiller,release=istio\n+cue-gen:Gateway:subresource:status\n+cue-gen:Gateway:scope:Namespaced\n+cue-gen:Gateway:resource:categories=istio-io,networking-istio-io,shortNames=gw\n+cue-gen:Gateway:preserveUnknownFields:false\n--\u003e\n\n\u003c!-- go code generation tags\n+kubetype-gen\n+kubetype-gen:groupVersion=networking.istio.io/v1beta1\n+genclient\n+k8s:deepcopy-gen=true\n--\u003e\n\u003c!-- istio code generation tags\n+istio.io/sync-from:networking/v1alpha3/gateway.proto\n--\u003e", + "type": "object", + "required": [ + "servers", + "selector" + ], + "properties": { + "selector": { + "description": "One or more labels that indicate a specific set of pods/VMs\non which this gateway configuration should be applied.\nBy default workloads are searched across all namespaces based on label\nselectors. This implies that a gateway resource in the namespace \"foo\"\ncan select pods in the namespace \"bar\" based on labels. This behavior can\nbe controlled via the `PILOT_SCOPE_GATEWAY_TO_NAMESPACE` environment\nvariable in istiod. If this variable is set to true, the scope of label\nsearch is restricted to the configuration namespace in which the the\nresource is present. In other words, the Gateway resource must reside in\nthe same namespace as the gateway workload instance. If selector is nil,\nthe Gateway will be applied to all workloads.", + "type": "object", + "required": [ + "selector" + ], + "additionalProperties": { + "type": "string" + } + }, + "servers": { + "description": "A list of server specifications.", + "type": "array", + "required": [ + "servers" + ], + "items": { + "$ref": "#/definitions/v1beta1Server" + } + } + } + }, + "v1beta1Port": { + "description": "Port describes the properties of a specific port of a service.", + "type": "object", + "required": [ + "number", + "protocol", + "name" + ], + "properties": { + "name": { + "description": "Label assigned to the port.", + "type": "string", + "required": [ + "name" + ] + }, + "number": { + "description": "A valid non-negative integer port number.", + "type": "integer", + "format": "int64", + "required": [ + "number" + ] + }, + "protocol": { + "description": "The protocol exposed on the port.\nMUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS.\nTLS implies the connection will be routed based on the SNI header to\nthe destination without terminating the TLS connection.", + "type": "string", + "required": [ + "protocol" + ] + }, + "targetPort": { + "description": "The port number on the endpoint where the traffic will be\nreceived. Applicable only when used with ServiceEntries.", + "type": "integer", + "format": "int64" + } + } + }, + "v1beta1Server": { + "description": "{{\u003ctabset category-name=\"example\"\u003e}}\n{{\u003ctab name=\"v1alpha3\" category-value=\"v1alpha3\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n name: my-ingress\nspec:\n selector:\n app: my-ingressgateway\n servers:\n - port:\n number: 80\n name: http2\n protocol: HTTP2\n hosts:\n - \"*\"\n```\n{{\u003c/tab\u003e}}\n\n{{\u003ctab name=\"v1beta1\" category-value=\"v1beta1\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1beta1\nkind: Gateway\nmetadata:\n name: my-ingress\nspec:\n selector:\n app: my-ingressgateway\n servers:\n - port:\n number: 80\n name: http2\n protocol: HTTP2\n hosts:\n - \"*\"\n```\n{{\u003c/tab\u003e}}\n{{\u003c/tabset\u003e}}\n\nAnother example\n\n{{\u003ctabset category-name=\"example\"\u003e}}\n{{\u003ctab name=\"v1alpha3\" category-value=\"v1alpha3\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n name: my-tcp-ingress\nspec:\n selector:\n app: my-tcp-ingressgateway\n servers:\n - port:\n number: 27018\n name: mongo\n protocol: MONGO\n hosts:\n - \"*\"\n```\n{{\u003c/tab\u003e}}\n\n{{\u003ctab name=\"v1beta1\" category-value=\"v1beta1\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1beta1\nkind: Gateway\nmetadata:\n name: my-tcp-ingress\nspec:\n selector:\n app: my-tcp-ingressgateway\n servers:\n - port:\n number: 27018\n name: mongo\n protocol: MONGO\n hosts:\n - \"*\"\n```\n{{\u003c/tab\u003e}}\n{{\u003c/tabset\u003e}}\n\nThe following is an example of TLS configuration for port 443\n\n{{\u003ctabset category-name=\"example\"\u003e}}\n{{\u003ctab name=\"v1alpha3\" category-value=\"v1alpha3\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n name: my-tls-ingress\nspec:\n selector:\n app: my-tls-ingressgateway\n servers:\n - port:\n number: 443\n name: https\n protocol: HTTPS\n hosts:\n - \"*\"\n tls:\n mode: SIMPLE\n credentialName: tls-cert\n```\n{{\u003c/tab\u003e}}\n\n{{\u003ctab name=\"v1beta1\" category-value=\"v1beta1\"\u003e}}\n```yaml\napiVersion: networking.istio.io/v1beta1\nkind: Gateway\nmetadata:\n name: my-tls-ingress\nspec:\n selector:\n app: my-tls-ingressgateway\n servers:\n - port:\n number: 443\n name: https\n protocol: HTTPS\n hosts:\n - \"*\"\n tls:\n mode: SIMPLE\n credentialName: tls-cert\n```\n{{\u003c/tab\u003e}}\n{{\u003c/tabset\u003e}}", + "type": "object", + "title": "`Server` describes the properties of the proxy on a given load balancer\nport. For example,", + "required": [ + "hosts" + ], + "properties": { + "bind": { + "description": "The ip or the Unix domain socket to which the listener should be bound\nto. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar`\n(Linux abstract namespace). When using Unix domain sockets, the port\nnumber should be 0.\nThis can be used to restrict the reachability of this server to be\ngateway internal only. This is typically used when a gateway needs to\ncommunicate to another mesh service e.g. publishing metrics. In such\ncase, the server created with the specified bind will not be available to\nexternal gateway clients.", + "type": "string" + }, + "defaultEndpoint": { + "type": "string", + "title": "The loopback IP endpoint or Unix domain socket to which traffic should\nbe forwarded to by default. Format should be `127.0.0.1:PORT` or\n`unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace).\nNOT IMPLEMENTED.\n$hide_from_docs" + }, + "hosts": { + "description": "One or more hosts exposed by this gateway.\nWhile typically applicable to\nHTTP services, it can also be used for TCP services using TLS with SNI.\nA host is specified as a `dnsName` with an optional `namespace/` prefix.\nThe `dnsName` should be specified using FQDN format, optionally including\na wildcard character in the left-most component (e.g.,\n`prod/*.example.com`). Set the `dnsName` to `*` to select all\n`VirtualService` hosts from the specified namespace (e.g.,`prod/*`).\n\nThe `namespace` can be set to `*` or `.`, representing any or the current\nnamespace, respectively. For example, `*/foo.example.com` selects the\nservice from any available namespace while `./foo.example.com` only\nselects the service from the namespace of the sidecar. The default, if no\n`namespace/` is specified, is `*/`, that is, select services from any\nnamespace. Any associated `DestinationRule` in the selected namespace\nwill also be used.\n\nA `VirtualService` must be bound to the gateway and must have one or\nmore hosts that match the hosts specified in a server. The match\ncould be an exact match or a suffix match with the server's hosts. For\nexample, if the server's hosts specifies `*.example.com`, a\n`VirtualService` with hosts `dev.example.com` or `prod.example.com` will\nmatch. However, a `VirtualService` with host `example.com` or\n`newexample.com` will not match.\n\nNOTE: Only virtual services exported to the gateway's namespace\n(e.g., `exportTo` value of `*`) can be referenced.\nPrivate configurations (e.g., `exportTo` set to `.`) will not be\navailable. Refer to the `exportTo` setting in `VirtualService`,\n`DestinationRule`, and `ServiceEntry` configurations for details.", + "type": "array", + "required": [ + "hosts" + ], + "items": { + "type": "string" + } + }, + "name": { + "description": "An optional name of the server, when set must be unique across all\nservers. This will be used for variety of purposes like prefixing stats\ngenerated with this name etc.", + "type": "string" + }, + "port": { + "description": "The Port on which the proxy should listen for incoming\nconnections.", + "$ref": "#/definitions/v1beta1Port" + }, + "tls": { + "description": "Set of TLS related options that govern the server's behavior. Use\nthese options to control if all http requests should be redirected to\nhttps, and the TLS modes to use.", + "$ref": "#/definitions/v1beta1ServerTLSSettings" + } + } + }, + "v1beta1ServerTLSSettings": { + "type": "object", + "properties": { + "caCertificates": { + "description": "REQUIRED if mode is `MUTUAL`. The path to a file containing\ncertificate authority certificates to use in verifying a presented\nclient side certificate.", + "type": "string" + }, + "cipherSuites": { + "description": "Optional: If specified, only support the specified cipher list.\nOtherwise default to the default cipher list supported by Envoy.", + "type": "array", + "items": { + "type": "string" + } + }, + "credentialName": { + "description": "For gateways running on Kubernetes, the name of the secret that\nholds the TLS certs including the CA certificates. Applicable\nonly on Kubernetes. The secret (of type `generic`) should\ncontain the following keys and values: `key:\n\u003cprivateKey\u003e` and `cert: \u003cserverCert\u003e`. For mutual TLS,\n`cacert: \u003cCACertificate\u003e` can be provided in the same secret or\na separate secret named `\u003csecret\u003e-cacert`.\nSecret of type tls for server certificates along with\nca.crt key for CA certificates is also supported.\nOnly one of server certificates and CA certificate\nor credentialName can be specified.", + "type": "string" + }, + "httpsRedirect": { + "description": "If set to true, the load balancer will send a 301 redirect for\nall http connections, asking the clients to use HTTPS.", + "type": "boolean" + }, + "maxProtocolVersion": { + "description": "Optional: Maximum TLS protocol version.", + "$ref": "#/definitions/ServerTLSSettingsTLSProtocol" + }, + "minProtocolVersion": { + "description": "Optional: Minimum TLS protocol version. By default, it is `TLSV1_2`.\nTLS protocol versions below TLSV1_2 require setting compatible ciphers\nwith the `cipherSuites` setting as they no longer include compatible\nciphers.\n\nNote: Using TLS protocol versions below TLSV1_2 has serious security\nrisks.", + "$ref": "#/definitions/ServerTLSSettingsTLSProtocol" + }, + "mode": { + "description": "Optional: Indicates whether connections to this port should be\nsecured using TLS. The value of this field determines how TLS is\nenforced.", + "$ref": "#/definitions/v1beta1ServerTLSSettingsTLSmode" + }, + "privateKey": { + "description": "REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file\nholding the server's private key.", + "type": "string" + }, + "serverCertificate": { + "description": "REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file\nholding the server-side TLS certificate to use.", + "type": "string" + }, + "subjectAltNames": { + "description": "A list of alternate names to verify the subject identity in the\ncertificate presented by the client.", + "type": "array", + "items": { + "type": "string" + } + }, + "verifyCertificateHash": { + "description": "An optional list of hex-encoded SHA-256 hashes of the\nauthorized client certificates. Both simple and colon separated\nformats are acceptable.\nNote: When both verify_certificate_hash and verify_certificate_spki\nare specified, a hash matching either value will result in the\ncertificate being accepted.", + "type": "array", + "items": { + "type": "string" + } + }, + "verifyCertificateSpki": { + "description": "An optional list of base64-encoded SHA-256 hashes of the SPKIs of\nauthorized client certificates.\nNote: When both verify_certificate_hash and verify_certificate_spki\nare specified, a hash matching either value will result in the\ncertificate being accepted.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1beta1ServerTLSSettingsTLSmode": { + "description": "- PASSTHROUGH: The SNI string presented by the client will be used as the\nmatch criterion in a VirtualService TLS route to determine\nthe destination service from the service registry.\n - SIMPLE: Secure connections with standard TLS semantics.\n - MUTUAL: Secure connections to the downstream using mutual TLS by\npresenting server certificates for authentication.\n - AUTO_PASSTHROUGH: Similar to the passthrough mode, except servers with this TLS\nmode do not require an associated VirtualService to map from\nthe SNI value to service in the registry. The destination\ndetails such as the service/subset/port are encoded in the\nSNI value. The proxy will forward to the upstream (Envoy)\ncluster (a group of endpoints) specified by the SNI\nvalue. This server is typically used to provide connectivity\nbetween services in disparate L3 networks that otherwise do\nnot have direct connectivity between their respective\nendpoints. Use of this mode assumes that both the source and\nthe destination are using Istio mTLS to secure traffic.\n - ISTIO_MUTUAL: Secure connections from the downstream using mutual TLS by\npresenting server certificates for authentication. Compared\nto Mutual mode, this mode uses certificates, representing\ngateway workload identity, generated automatically by Istio\nfor mTLS authentication. When this mode is used, all other\nfields in `TLSOptions` should be empty.", + "type": "string", + "title": "TLS modes enforced by the proxy", + "default": "PASSTHROUGH", + "enum": [ + "PASSTHROUGH", + "SIMPLE", + "MUTUAL", + "AUTO_PASSTHROUGH", + "ISTIO_MUTUAL" + ] + }, + "v3alpha1AccessType": { + "description": " - ACCESS_TYPE_UNSPECIFIED: Unspecified type.\n - INTERNAL: Internal access type.\n - EXTERNAL: External access type.", + "type": "string", + "default": "ACCESS_TYPE_UNSPECIFIED", + "enum": [ + "ACCESS_TYPE_UNSPECIFIED", + "INTERNAL", + "EXTERNAL" + ] + }, + "v3alpha1Action": { + "type": "string", + "title": "- UNSPECIFIED: Unspecified\n - BIND: 绑定\n - UNBIND: 解绑", + "default": "UNSPECIFIED", + "enum": [ + "UNSPECIFIED", + "BIND", + "UNBIND" + ] + }, + "v3alpha1Address": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int32" + } + } + }, + "v3alpha1BindCluster": { + "type": "object", + "required": [ + "meshId", + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "title": "需要绑定的集群名称。", + "required": [ + "cluster" + ] + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + }, + "toInjectNamespaces": { + "type": "array", + "title": "需要注入 Sidecar 的命名空间列表。", + "items": { + "type": "string" + } + } + } + }, + "v3alpha1BindClusterMeshNetworkRequest": { + "type": "object", + "required": [ + "meshId", + "networkId", + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "title": "集群", + "required": [ + "cluster" + ] + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + }, + "networkId": { + "type": "string", + "title": "网络ID", + "required": [ + "networkId" + ] + } + } + }, + "v3alpha1BindMeshInstancesAction": { + "type": "object", + "required": [ + "meshes", + "workspaceId" + ], + "properties": { + "action": { + "title": "动作", + "$ref": "#/definitions/v3alpha1Action" + }, + "meshes": { + "type": "array", + "title": "网格实例 ID", + "required": [ + "meshes" + ], + "items": { + "type": "string" + } + }, + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "工作空间 ID", + "required": [ + "workspaceId" + ] + } + } + }, + "v3alpha1BindMeshNamespaceInstancesAction": { + "type": "object", + "required": [ + "namespaces", + "workspaceId" + ], + "properties": { + "action": { + "title": "动作", + "$ref": "#/definitions/v3alpha1Action" + }, + "namespaces": { + "type": "array", + "title": "网格命名空间", + "required": [ + "namespaces" + ], + "items": { + "$ref": "#/definitions/BindMeshNamespaceInstancesActionNamespace" + } + }, + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "工作空间 ID", + "required": [ + "workspaceId" + ] + } + } + }, + "v3alpha1CloudShell": { + "description": "CloudShell is the Schema for the cloudshells API.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "spec": { + "$ref": "#/definitions/v3alpha1CloudShellSpec" + }, + "status": { + "description": "CloudShellStatus defines the observed state of CloudShell.", + "$ref": "#/definitions/v3alpha1CloudShellStatus" + } + } + }, + "v3alpha1CloudShellSpec": { + "type": "object", + "properties": { + "once": { + "description": "custom config\naccept only one client and exit on disconnection. default true.", + "type": "boolean" + }, + "ttl": { + "description": "ttl specified a period time that the cloudshell server pod is\nstop. if not to set, default 1800s.", + "type": "integer", + "format": "int32" + } + } + }, + "v3alpha1CloudShellStatus": { + "type": "object", + "title": "CloudShellStatus defines the observed state of CloudShell.enum", + "properties": { + "accessUrl": { + "description": "access url is be set to expose cloudshell server.", + "type": "string" + }, + "phase": { + "description": "phase specified status of cloudshell server.", + "$ref": "#/definitions/CloudShellStatusPhase" + } + } + }, + "v3alpha1Cluster": { + "description": "Cluster is the UI interface of MeshCluster CRD.", + "type": "object", + "properties": { + "createdAt": { + "type": "string", + "format": "date-time", + "title": "集群创建时间" + }, + "customMeshConfig": { + "type": "object", + "title": "集群网络配置,可选(只在网格中才存在该信息)", + "additionalProperties": { + "type": "string" + } + }, + "failureReason": { + "type": "array", + "title": "失败原因", + "items": { + "type": "string" + } + }, + "meshId": { + "type": "string", + "title": "所属网格,如果为空,表示未绑定" + }, + "name": { + "type": "string", + "title": "集群名称" + }, + "network": { + "title": "集群网络信息", + "$ref": "#/definitions/v3alpha1MeshClusterStatusNetwork" + }, + "networkId": { + "type": "string", + "title": "所属网络 ID,如果为空,表示未绑定" + }, + "phase": { + "title": "集群所处阶段", + "$ref": "#/definitions/v3alpha1MeshClusterStatusPhase" + }, + "role": { + "title": "集群角色", + "$ref": "#/definitions/v3alpha1MeshClusterRole" + }, + "versions": { + "title": "集群版本信息", + "$ref": "#/definitions/v3alpha1MeshClusterStatusVersions" + } + } + }, + "v3alpha1ClusterConfig": { + "type": "object", + "required": [ + "name", + "meshId" + ], + "properties": { + "customMeshConfig": { + "description": "该字段允许为 nil,为空时清除集群自定义配置", + "type": "object", + "title": "自定义参数\n继承网格全局参数\n例如:\nistio.custom_params.values.global.proxy.resources.requests.cpu\nistio.custom_params.values.global.proxy.resources.requests.memory\nistio.custom_params.values.global.proxy.resources.limits.cpu\nistio.custom_params.values.global.proxy.resources.limits.memory", + "additionalProperties": { + "type": "string" + } + }, + "meshId": { + "type": "string", + "title": "网格ID", + "required": [ + "meshId" + ] + }, + "name": { + "type": "string", + "title": "集群名称。", + "required": [ + "name" + ] + } + } + }, + "v3alpha1ClusterEastWestGateway": { + "type": "object", + "required": [ + "cluster", + "meshId" + ], + "properties": { + "cluster": { + "type": "string", + "title": "集群", + "required": [ + "cluster" + ] + }, + "gateway": { + "title": "网关配置", + "$ref": "#/definitions/v3alpha1GatewayConfiguration" + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + } + } + }, + "v3alpha1ClusterListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1Cluster" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ClusterMeshNetworkName": { + "type": "object", + "required": [ + "meshId", + "networkId", + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "title": "集群", + "required": [ + "cluster" + ] + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + }, + "networkId": { + "type": "string", + "title": "网络ID", + "required": [ + "networkId" + ] + } + } + }, + "v3alpha1ClusterNamespace": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "includeIstioControlPlane": { + "type": "boolean", + "title": "是否包含 Istio 控制平面,仅当 query 时存在 with_istio_control_plane_info\n时生效。" + }, + "injectionInfo": { + "$ref": "#/definitions/ClusterNamespaceInjectionManagement" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string", + "title": "命名空间名称" + } + } + }, + "v3alpha1ClusterNamespaceListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1ClusterNamespace" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ConfigServicePort": { + "type": "object", + "required": [ + "service", + "namespace", + "meshId", + "port" + ], + "properties": { + "governProtocol": { + "title": "服务导入协议,也就是治理协议,如 TCP、HTTP、HTTPS、HTTP2", + "$ref": "#/definitions/v3alpha1GovernProtocol" + }, + "meshId": { + "type": "string", + "title": "服务所在网格", + "required": [ + "meshId" + ] + }, + "namespace": { + "type": "string", + "title": "命名空间", + "required": [ + "namespace" + ] + }, + "port": { + "type": "integer", + "format": "int64", + "title": "服务端口", + "required": [ + "port" + ] + }, + "service": { + "type": "string", + "title": "服务名称", + "required": [ + "service" + ] + } + } + }, + "v3alpha1ConnectedNetworks": { + "type": "object", + "required": [ + "meshId", + "networks" + ], + "properties": { + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + }, + "networks": { + "type": "array", + "title": "成员网络分组信息", + "required": [ + "networks" + ], + "items": { + "$ref": "#/definitions/v3alpha1MeshConnectedNetwork" + } + } + } + }, + "v3alpha1ControlClusterSidecarConfig": { + "type": "object", + "required": [ + "meshId" + ], + "properties": { + "action": { + "title": "是否全局自动注入边车", + "$ref": "#/definitions/ControlClusterSidecarConfigAutoInjection" + }, + "clusters": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1ControlClusterSidecarConfigClusterConfig" + } + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + } + } + }, + "v3alpha1ControlClusterSidecarConfigClusterConfig": { + "type": "object", + "required": [ + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "title": "集群名称", + "required": [ + "cluster" + ] + }, + "sidecarResource": { + "title": "边车资源管理情况", + "$ref": "#/definitions/commonResources" + } + } + }, + "v3alpha1ControlNamespaceInjection": { + "type": "object", + "required": [ + "meshId" + ], + "properties": { + "action": { + "title": "动作类型", + "$ref": "#/definitions/v3alpha1ControlNamespaceInjectionAction" + }, + "clusterInjections": { + "type": "array", + "title": "不同集群需要命名空间注入的集合", + "items": { + "$ref": "#/definitions/ControlNamespaceInjectionClusterInjections" + } + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + }, + "needsRestart": { + "type": "boolean", + "title": "需要立即重启" + } + } + }, + "v3alpha1ControlNamespaceInjectionAction": { + "description": " - ACTION_UNSPECIFIED: Unspecified type.\n - ENABLE: Enable namespace injection.\n - DISABLE: Disable namespace injection.", + "type": "string", + "default": "ACTION_UNSPECIFIED", + "enum": [ + "ACTION_UNSPECIFIED", + "ENABLE", + "DISABLE" + ] + }, + "v3alpha1ControlWorkloadInjection": { + "type": "object", + "required": [ + "meshId", + "cluster" + ], + "properties": { + "action": { + "title": "动作类型", + "$ref": "#/definitions/v3alpha1ControlWorkloadInjectionAction" + }, + "cluster": { + "type": "string", + "title": "集群名称", + "required": [ + "cluster" + ] + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + }, + "needsRestart": { + "type": "boolean", + "title": "需要立即重启" + }, + "workloads": { + "type": "array", + "title": "需操作的工作负载", + "items": { + "$ref": "#/definitions/ControlWorkloadInjectionWorkloadMeta" + } + } + } + }, + "v3alpha1ControlWorkloadInjectionAction": { + "description": " - ACTION_UNSPECIFIED: Unspecified type.\n - ENABLE: Enable workload injection.\n - DISABLE: Disable workload injection.\n - RESOURCE_MANAGEMENT: Control workload sidecar resource management.\n - TRAFFIC_PASS_RULE: Control workload sidecar traffic pass rule.", + "type": "string", + "default": "ACTION_UNSPECIFIED", + "enum": [ + "ACTION_UNSPECIFIED", + "ENABLE", + "DISABLE", + "RESOURCE_MANAGEMENT", + "TRAFFIC_PASS_RULE" + ] + }, + "v3alpha1CreateMeshRequest": { + "description": "Mesh is the UI interface of GlobalMesh CRD.", + "type": "object", + "required": [ + "name", + "ownerCluster" + ], + "properties": { + "customParams": { + "description": "网格出口流量策略类型,其值应该是`REGISTRY_ONLY`或`ALLOW_ANY`\nistio.custom_params.values.meshConfig.outboundTrafficPolicy.mode\n是否开启网格的`tracing`\nistio.custom_params.values.meshConfig.enableTracing\n\n地域负载均衡策略\n注:数组用[*]表示,*\n为大于等于0的数字,表示第几条策略;distribute和failover两个策略只能二选一。\n\n是否开启地域负载均衡\nistio.custom_params.values.meshConfig.localityLbSetting.enabled\n从哪个地域转发流量,值为 string 类型,如 \"region1/zone1/subzone1\"。\nistio.custom_params.values.meshConfig.localityLbSetting.distribute[*].from\n流量转发到哪个地域,值为map,如istio.custom_params.values.meshConfig.localityLbSetting.distribute[*].to.shanghai=50\nistio.custom_params.values.meshConfig.localityLbSetting.distribute[*].to\n\n从哪个地域转发流量,值为string类型,如 \"region1/zone1/subzone1\"。\nistio.custom_params.values.meshConfig.localityLbSetting.failover[*].from\n转发到哪个地域,值为string类型,如 \"region1/zone1/subzone1\"。\nistio.custom_params.values.meshConfig.localityLbSetting.failover[*].to\n\n默认重试策略\n重试次数\nistio.custom_params.values.meshConfig.defaultHttpRetryPolicy.attempts\n重试条件,值为 string\n类型,用逗号隔开,如\"5xx,gateway-error,connect-failure,refused-stream\"\nistio.custom_params.values.meshConfig.defaultHttpRetryPolicy.retryOn", + "type": "object", + "title": "自定义参数\n其中,Key 为自定义的,目前在界面上的参数如下:\nistio.custom_params.values.global.proxy.resources.requests.cpu\nistio.custom_params.values.global.proxy.resources.requests.memory\nistio.custom_params.values.global.proxy.resources.limits.cpu\nistio.custom_params.values.global.proxy.resources.limits.memory\nistio.custom_params.values.sidecarInjectorWebhook.enableNamespacesByDefault\nglobal.mesh_capacity 网格规模,其值应该是 MeshCapacity 枚举类型中的值.\nglobal.mesh_capacity 目前可以是 S50P200 S200P1000 S500P2000 CUSTOM", + "additionalProperties": { + "type": "string" + } + }, + "deployNamespace": { + "type": "string", + "title": "需要将网格部署的命名空间,如果为空,将部署到 istio-system" + }, + "hub": { + "type": "string", + "title": "镜像仓库地址" + }, + "loadBalancerIp": { + "type": "string", + "title": "负载均衡 IP;" + }, + "meshId": { + "type": "string", + "title": "deprecated use name instead\n网格 ID,暂时和 name 相同" + }, + "meshVersion": { + "type": "string", + "title": "网格的 Istio 版本" + }, + "mode": { + "title": "网格模式", + "$ref": "#/definitions/v3alpha1MeshMode" + }, + "name": { + "type": "string", + "title": "网格名称", + "required": [ + "name" + ] + }, + "ownerCluster": { + "type": "string", + "title": "所属集群", + "required": [ + "ownerCluster" + ] + } + } + }, + "v3alpha1DeleteClusterRequest": { + "type": "object", + "required": [ + "meshId", + "cluster" + ], + "properties": { + "cluster": { + "type": "string", + "title": "需要绑定的集群名称。", + "required": [ + "cluster" + ] + }, + "meshId": { + "type": "string", + "title": "网格名称", + "required": [ + "meshId" + ] + } + } + }, + "v3alpha1DeleteCondition": { + "type": "object", + "properties": { + "message": { + "type": "string", + "title": "检测提示" + }, + "protected": { + "type": "boolean", + "title": "资源是否被保护,protected = true 下不建议移除网格" + }, + "remainingResourcesCount": { + "type": "integer", + "format": "int32", + "title": "遗留资源总数" + }, + "type": { + "title": "检测条件类型", + "$ref": "#/definitions/v3alpha1DeleteConditionType" + } + } + }, + "v3alpha1DeleteConditionType": { + "type": "string", + "title": "- CONDITION_TYPE_UNSPECIFIED: Unspecified type.\n - ISTIO_SIDECARS: 检测网格注入边车资源\n - ISTIO_GATEWAYS: 检测网格网关资源\n - MESH_CLUSTERS: 检测网格集群\n - CROSS_NET_POOLS: 互联配置条件:检测跨网络互联池\n - NET_CLUSTERS: 网络分组条件:检测分组成员集群", + "default": "CONDITION_TYPE_UNSPECIFIED", + "enum": [ + "CONDITION_TYPE_UNSPECIFIED", + "ISTIO_SIDECARS", + "ISTIO_GATEWAYS", + "MESH_CLUSTERS", + "CROSS_NET_POOLS", + "NET_CLUSTERS" + ] + }, + "v3alpha1DeleteConstraintResponse": { + "type": "object", + "properties": { + "canDelete": { + "type": "boolean", + "title": "是否可以被删除" + }, + "relatedDestinationRules": { + "type": "array", + "title": "与 secret 有关的目标规则", + "items": { + "type": "string" + } + }, + "relatedGateways": { + "type": "array", + "title": "与 secret 有关的网关规则", + "items": { + "type": "string" + } + } + } + }, + "v3alpha1DeletePermissionsResp": { + "type": "object", + "properties": { + "canDelete": { + "type": "boolean", + "title": "是否可以被删除" + }, + "conditions": { + "type": "array", + "title": "检测条件", + "items": { + "$ref": "#/definitions/v3alpha1DeleteCondition" + } + } + } + }, + "v3alpha1DeployType": { + "description": " - DEPLOY_TYPE_UNSPECIFIED: Unspecified type.\n - CONTAINER: Container type.\n - VM: VM type.\n - UNKNOWN_DEPLOY: Unknown type.", + "type": "string", + "default": "DEPLOY_TYPE_UNSPECIFIED", + "enum": [ + "DEPLOY_TYPE_UNSPECIFIED", + "CONTAINER", + "VM", + "UNKNOWN_DEPLOY" + ] + }, + "v3alpha1EastWestGateway": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "name": { + "type": "string" + }, + "replicas": { + "type": "integer", + "format": "int32" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "status": { + "$ref": "#/definitions/v3alpha1EastWestGatewayStatus" + } + } + }, + "v3alpha1EastWestGatewayStatus": { + "type": "object", + "properties": { + "externalAddress": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1Address" + } + }, + "running": { + "type": "integer", + "format": "int32" + } + } + }, + "v3alpha1FailedMessage": { + "type": "object", + "title": "FailedMessage 显示导入服务失败后的失败原因,包括 deployment、pod、container\n的原因 pod 和 container 的原因都在 instances_info 中", + "properties": { + "instancesInfo": { + "type": "array", + "title": "Service 所选 Pod 的状态详细信息", + "items": { + "type": "string" + } + }, + "serviceInfo": { + "type": "array", + "title": "Service 自身配置原因", + "items": { + "type": "string" + } + }, + "workloadsInfo": { + "type": "array", + "title": "Workload 相关的信息,不可靠,不建议使用。", + "items": { + "type": "string" + } + } + } + }, + "v3alpha1FeatureGate": { + "type": "object", + "properties": { + "description": { + "type": "string", + "title": "关于此 FeatureGate 的描述" + }, + "enabled": { + "type": "boolean", + "title": "是否启用" + }, + "id": { + "title": "唯一标志符", + "$ref": "#/definitions/v3alpha1FeatureGateIDEnum" + }, + "name": { + "type": "string", + "title": "名字" + } + } + }, + "v3alpha1FeatureGateIDEnum": { + "description": " - FEATURE_GATE_ID_ENUM_UNSPECIFIED: Unspecified type.\n - SPRING_CLOUD: SPRING_CLOUD described that mesh support govern native apps which work in\nspring cloud framework.\n - DUBBO: Dubbo described that mesh support govern native apps which work in Dubbo\nframework and Dubbo protocol.", + "type": "string", + "default": "FEATURE_GATE_ID_ENUM_UNSPECIFIED", + "enum": [ + "FEATURE_GATE_ID_ENUM_UNSPECIFIED", + "SPRING_CLOUD", + "DUBBO" + ] + }, + "v3alpha1FeatureGatesResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1FeatureGate" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1GatewayConfiguration": { + "type": "object", + "properties": { + "labels": { + "type": "object", + "title": "Labels for the gateway", + "additionalProperties": { + "type": "string" + } + }, + "replicas": { + "type": "integer", + "format": "int64", + "title": "副本数" + }, + "resources": { + "title": "资源配置", + "$ref": "#/definitions/commonResources" + }, + "service": { + "title": "Service 配置", + "$ref": "#/definitions/v3alpha1ServiceConfiguration" + }, + "serviceAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v3alpha1GatewayType": { + "type": "string", + "title": "- GATEWAY_TYPE_UNSPECIFIED: Unspecified type.\n - INGRESS: 入口\n - EGRESS: 出口", + "default": "GATEWAY_TYPE_UNSPECIFIED", + "enum": [ + "GATEWAY_TYPE_UNSPECIFIED", + "INGRESS", + "EGRESS" + ] + }, + "v3alpha1GovernProtocol": { + "description": " - GOVERN_PROTOCOL_UNSPECIFIED: Unspecified type.\n - GOVERN_TCP: TCP declares the the port uses TCP.\nThis is the default protocol for a service port.\n - GOVERN_HTTP: HTTP declares that the port carries HTTP/1.1 traffic.\nNote that HTTP/1.0 or earlier may not be supported by the proxy.\n - GOVERN_HTTP2: HTTP2 declares that the port carries HTTP/2 traffic.\n - GOVERN_HTTPS: HTTPS declares that the port carries HTTPS traffic.\n - GOVERN_TLS: TLS declares that the port carries TLS traffic.\nTLS traffic is assumed to contain SNI as part of the handshake.\n - GOVERN_GRPC: GRPC declares that the port carries gRPC traffic.\n - GOVERN_UNSUPPORTED: UNSUPPORTED - value to signify that the protocol is unsupported.", + "type": "string", + "default": "GOVERN_PROTOCOL_UNSPECIFIED", + "enum": [ + "GOVERN_PROTOCOL_UNSPECIFIED", + "GOVERN_TCP", + "GOVERN_HTTP", + "GOVERN_HTTP2", + "GOVERN_HTTPS", + "GOVERN_TLS", + "GOVERN_GRPC", + "GOVERN_UNSUPPORTED" + ] + }, + "v3alpha1GovernType": { + "description": " - GOVERN_TYPE_UNSPECIFIED: Unspecified type.\n - NORMAL: Normal app.\n - SPRING_CLOUD: SpringCloud app.\n - DUBBO: Dubbo app.", + "type": "string", + "default": "GOVERN_TYPE_UNSPECIFIED", + "enum": [ + "GOVERN_TYPE_UNSPECIFIED", + "NORMAL", + "SPRING_CLOUD", + "DUBBO" + ] + }, + "v3alpha1GrafanaDashboardResponse": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "英文地址" + }, + "zhUrl": { + "type": "string", + "title": "中文地址" + } + } + }, + "v3alpha1InjectionStatus": { + "description": " - INJECTION_STATUS_UNSPECIFIED: Unspecified type.\n - INJECTED: The workload is injected.\n - UN_INJECTED: The workload is un-injected.", + "type": "string", + "default": "INJECTION_STATUS_UNSPECIFIED", + "enum": [ + "INJECTION_STATUS_UNSPECIFIED", + "INJECTED", + "UN_INJECTED" + ] + }, + "v3alpha1IstioResource": { + "type": "object", + "properties": { + "activePolices": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1PolicyType" + } + }, + "createTime": { + "type": "string", + "format": "date-time", + "title": "创建时间" + }, + "meshId": { + "type": "string" + }, + "name": { + "type": "string", + "title": "资源名称" + }, + "namespace": { + "type": "string", + "title": "所在 namespace" + }, + "spec": { + "$ref": "#/definitions/protobufAny" + }, + "type": { + "title": "type 表示资源类型。", + "$ref": "#/definitions/v3alpha1ResourceType" + }, + "yaml": { + "type": "string" + } + } + }, + "v3alpha1IstioVersion": { + "type": "object", + "properties": { + "version": { + "type": "string", + "title": "istio 版本" + } + } + }, + "v3alpha1LabelsOP": { + "type": "object", + "properties": { + "key": { + "type": "string", + "title": "标签名称" + }, + "op": { + "title": "操作类型", + "$ref": "#/definitions/LabelsOPOPType" + }, + "value": { + "type": "string", + "title": "标签值" + } + } + }, + "v3alpha1ListMeshInstancesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "工作空间网格实例情况", + "items": { + "$ref": "#/definitions/v3alpha1MeshInstance" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListMeshNamespaceInstancesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "命名空间情况", + "items": { + "$ref": "#/definitions/v3alpha1MeshNamespaceInstance" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListMeshNetworkClustersResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1MeshNetworkCluster" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListMeshNetworksResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1MeshNetwork" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListRegProxiesResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1RegProxyResp" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListResourceResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "服务地址列表", + "items": { + "$ref": "#/definitions/v3alpha1IstioResource" + } + }, + "page": { + "title": "page 信息", + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListSecretsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1Secret" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListServiceVersionResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "服务版本列表", + "items": { + "$ref": "#/definitions/v3alpha1Subset" + } + }, + "page": { + "title": "page 信息", + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListSupportedIstioHotUpgradeVersionsResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/management_apisidecarv3alpha1IstioVersion" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListSupportedIstioUpgradeVersionsResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1IstioVersion" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListSupportedIstioVersionsResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1IstioVersion" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ListWorkspacesResponse": { + "type": "object", + "properties": { + "page": { + "$ref": "#/definitions/commonPagination" + }, + "workspaces": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1Workspace" + } + } + } + }, + "v3alpha1Matrix": { + "type": "object", + "properties": { + "matrix": { + "type": "array", + "items": { + "$ref": "#/definitions/monitorv3alpha1SampleStream" + } + } + } + }, + "v3alpha1Mesh": { + "description": "Mesh is the UI interface of GlobalMesh CRD.", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "title": "网格集群", + "items": { + "$ref": "#/definitions/v3alpha1Cluster" + } + }, + "createdAt": { + "type": "string", + "format": "date-time", + "title": "网格创建时间" + }, + "customParams": { + "type": "object", + "title": "自定义参数", + "additionalProperties": { + "type": "string" + } + }, + "deployNamespace": { + "type": "string", + "title": "网格所在命名空间" + }, + "failureReason": { + "type": "array", + "title": "失败原因", + "items": { + "type": "string" + } + }, + "hub": { + "type": "string", + "title": "镜像仓库地址" + }, + "isMeshWideAutoInjection": { + "type": "boolean", + "title": "是否已开启全局自动注入边车" + }, + "isUpgradable": { + "type": "boolean", + "title": "是否有可用升级版本" + }, + "isUpgrading": { + "type": "boolean", + "title": "网格是否正在升级中" + }, + "loadBalancerIp": { + "type": "string", + "title": "负载均衡 IP" + }, + "meshId": { + "type": "string", + "title": "网格 ID,暂时和 name 相同" + }, + "mode": { + "title": "网格模式", + "$ref": "#/definitions/v3alpha1MeshMode" + }, + "name": { + "type": "string", + "title": "网格名称" + }, + "ownerCluster": { + "type": "string", + "title": "所属集群" + }, + "status": { + "$ref": "#/definitions/v3alpha1MeshStatus" + } + } + }, + "v3alpha1MeshClusterRole": { + "description": " - MESH_CLUSTER_ROLE_UNSPECIFIED: Unspecified type.\n - FREE_CLUSTER: FreeCluster means that a cluster was been created, but no mesh\ninstalled yet.\n - HOSTED_WORKLOAD_CLUSTER: HostedWorkloadCluster means that this cluster was an workload\ncluster.\n - INTEGRATED_CLUSTER: IntegratedCluster means that this is an integrated cluster, which\ncontains a istio control plane.\n - EXTERNAL_MESH_CLUSTER: ExternalMeshCluster means that this cluster contains a istio control\nplane, but which was not create by us.\n - VIRTUAL_CLUSTER: VirtualCluster means that this cluster is created by us, NOT from\ninfra like kpanda. which CAN NOT shown on ui.\n - HOSTED_CLUSTER: Deprecated: HOSTED_CLUSTER\nHostedCluster means that this cluster is some meshes' ownerCluster.\nwe will create mspider mcpc components on this cluster.", + "type": "string", + "default": "MESH_CLUSTER_ROLE_UNSPECIFIED", + "enum": [ + "MESH_CLUSTER_ROLE_UNSPECIFIED", + "FREE_CLUSTER", + "HOSTED_WORKLOAD_CLUSTER", + "INTEGRATED_CLUSTER", + "EXTERNAL_MESH_CLUSTER", + "VIRTUAL_CLUSTER", + "HOSTED_CLUSTER" + ] + }, + "v3alpha1MeshClusterStatusNetwork": { + "type": "object", + "properties": { + "cni": { + "description": "cni defines the cni name of current cluster used, like parcel, calico\nand etc.", + "type": "string" + }, + "podCIDRs": { + "type": "array", + "items": { + "type": "string" + } + }, + "svcCIDRs": { + "description": "svcCIDRs defines the k8s service's CIDRs, include ipv4 and ipv6.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v3alpha1MeshClusterStatusPhase": { + "description": " - MESH_CLUSTER_STATUS_PHASE_UNSPECIFIED: Unspecified type.\n - CLUSTER_CREATING: CLUSTER_CREATING describe cluster is creating, which was an state from\ninfra like kpanda. We CAN NOT do any actions on this cluster, just\nwaiting it gets Running state.\n - CLUSTER_UPDATING: CLUSTER_UPDATING similar to Creating, but that means infra is updating\nsomething of this cluster.\n - CLUSTER_DELETING: CLUSTER_DELETING means this cluster is going to be deleted.\nWe should remove this cluster from our system.\n - CLUSTER_RUNNING: CLUSTER_RUNNING describe is running now, that means we can do install\nistio and others actions.\n - MANAGED_FAILED: MANAGED_FAILED described that Cluster config or others are invalid, we\ncan not perform out actions.\n - MANAGED_SUCCEED: MANAGED_SUCCEED means we installed istio on this cluster.\n - MANAGED_RECONCILING: MANAGED_RECONCILING described that mesh cluster is reconciling.\n - MANAGED_EVICTING: MANAGED_EVICTING describe that the cluster is going to be evicted.", + "type": "string", + "default": "MESH_CLUSTER_STATUS_PHASE_UNSPECIFIED", + "enum": [ + "MESH_CLUSTER_STATUS_PHASE_UNSPECIFIED", + "CLUSTER_CREATING", + "CLUSTER_UPDATING", + "CLUSTER_DELETING", + "CLUSTER_RUNNING", + "MANAGED_FAILED", + "MANAGED_SUCCEED", + "MANAGED_RECONCILING", + "MANAGED_EVICTING" + ] + }, + "v3alpha1MeshClusterStatusVersions": { + "type": "object", + "properties": { + "kube": { + "description": "kube defines the version of kube api-server.", + "type": "string" + }, + "mesh": { + "description": "mesh defines the version of istio in current cluster.", + "type": "string" + }, + "type": { + "title": "type defines the cluster type.\n+kubebuilder:validation:Enum=KUBERNETES;OPENSHIFT;OTHER\n+kubebuilder:validation:Format:type=string", + "$ref": "#/definitions/v3alpha1MeshClusterStatusVersionsType" + } + } + }, + "v3alpha1MeshClusterStatusVersionsType": { + "description": " - TYPE_UNSPECIFIED: Unspecified type.\n - KUBERNETES: Kubernetes type.\n - OPENSHIFT: Openshift type.\n - OTHER: Other type.", + "type": "string", + "default": "TYPE_UNSPECIFIED", + "enum": [ + "TYPE_UNSPECIFIED", + "KUBERNETES", + "OPENSHIFT", + "OTHER" + ] + }, + "v3alpha1MeshConfig": { + "type": "object", + "properties": { + "defaultHttpRetryPolicy": { + "title": "HTTP 重试策略", + "$ref": "#/definitions/v1alpha3HTTPRetry" + }, + "enableTracing": { + "type": "boolean", + "title": "是否启用链路追踪" + }, + "localityLbSetting": { + "title": "地域负载均衡,注意:failover 和 distribute 只能设置一种", + "$ref": "#/definitions/v1alpha3LocalityLoadBalancerSetting" + }, + "outboundTrafficPolicy": { + "description": "出站策略", + "title": "NOTE:新增配置时,配置名需要和`Istio`的`MeshConfig`中的配置名相同。", + "$ref": "#/definitions/v3alpha1OutboundTrafficPolicy" + } + } + }, + "v3alpha1MeshConnectedNetwork": { + "type": "object", + "required": [ + "networkId", + "addresses" + ], + "properties": { + "addresses": { + "type": "array", + "required": [ + "addresses" + ], + "items": { + "$ref": "#/definitions/v3alpha1Address" + } + }, + "networkId": { + "type": "string", + "required": [ + "networkId" + ] + } + } + }, + "v3alpha1MeshEnvironmentStatusResp": { + "type": "object", + "properties": { + "clusters": { + "type": "array", + "title": "集群检测信息", + "items": { + "$ref": "#/definitions/v3alpha1MeshEnvironmentStatusRespClusterInfo" + } + }, + "isUpgradable": { + "type": "boolean", + "title": "集群是否可以被升级" + }, + "supportedKubernetesVersions": { + "type": "array", + "title": "网格支持的 Kubernetes 版本,升序", + "items": { + "type": "string" + } + } + } + }, + "v3alpha1MeshEnvironmentStatusRespClusterInfo": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "kubernetes": { + "$ref": "#/definitions/MeshEnvironmentStatusRespKubernetes" + } + } + }, + "v3alpha1MeshGateway": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "所属集群" + }, + "configuration": { + "title": "网关配置", + "$ref": "#/definitions/v3alpha1GatewayConfiguration" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "title": "网格创建时间" + }, + "failureReason": { + "type": "array", + "title": "失败原因", + "items": { + "type": "string" + } + }, + "gatewayType": { + "title": "网关类型", + "$ref": "#/definitions/v3alpha1GatewayType" + }, + "meshId": { + "type": "string", + "title": "网格 ID" + }, + "name": { + "type": "string", + "title": "网关名称" + }, + "namespace": { + "type": "string", + "title": "所属命名空间" + }, + "status": { + "title": "Status", + "$ref": "#/definitions/mesh_gatewayv3alpha1Status" + } + } + }, + "v3alpha1MeshGatewayListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1MeshGateway" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1MeshInstance": { + "type": "object", + "properties": { + "meshId": { + "type": "string", + "title": "网格 ID" + }, + "workspace": { + "type": "string", + "title": "工作空间名称" + } + } + }, + "v3alpha1MeshListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1Mesh" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1MeshMode": { + "description": " - MESH_MODE_UNSPECIFIED: Unspecified type.\n - HOSTED: Hosted means that the mesh control plane was hosted by us.\nwhich works as primary-remote mode, other workload cluster can\nconnect to this control plane cluster as a remote cluster role.\n - DEDICATED: Dedicated means that the mesh control plane are installed directly,\nwhich can only manage the resources of current cluster,\nCAN NOT work with primary-remote mode.\n - EXTERNAL: External means that the mesh is create managed by user manually,\nwe just connect to it.", + "type": "string", + "default": "MESH_MODE_UNSPECIFIED", + "enum": [ + "MESH_MODE_UNSPECIFIED", + "HOSTED", + "DEDICATED", + "EXTERNAL" + ] + }, + "v3alpha1MeshNamespaceInstance": { + "type": "object", + "properties": { + "meshId": { + "type": "string", + "title": "网格名称" + }, + "namespace": { + "type": "string", + "title": "命名空间名称" + }, + "workspace": { + "type": "string", + "title": "工作空间名称" + } + } + }, + "v3alpha1MeshNetwork": { + "type": "object", + "properties": { + "clusters": { + "$ref": "#/definitions/MeshNetworkClustersInfo" + }, + "gateways": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1EastWestGateway" + } + }, + "meshId": { + "type": "string", + "title": "网格名称" + }, + "networkId": { + "type": "string", + "title": "网络ID" + } + } + }, + "v3alpha1MeshNetworkCluster": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "gateway": { + "$ref": "#/definitions/v3alpha1EastWestGateway" + }, + "meshId": { + "type": "string" + }, + "networkId": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/v3alpha1MeshNetworkClusterStatus" + } + } + }, + "v3alpha1MeshNetworkClusterStatus": { + "type": "string", + "default": "UNSPECIFIED", + "enum": [ + "UNSPECIFIED", + "HEALTHY", + "ERROR" + ] + }, + "v3alpha1MeshResourceSummary": { + "type": "object", + "properties": { + "clusters": { + "title": "集群信息", + "$ref": "#/definitions/meshv3alpha1ClusterInfo" + }, + "pods": { + "title": "Pod信息", + "$ref": "#/definitions/v3alpha1PodInfo" + }, + "resources": { + "title": "资源信息", + "$ref": "#/definitions/v3alpha1ResourceInfo" + }, + "services": { + "title": "服务信息", + "$ref": "#/definitions/v3alpha1ServiceInfo" + } + } + }, + "v3alpha1MeshStatus": { + "type": "object", + "properties": { + "meshVersion": { + "type": "string", + "title": "网格的 Istio 版本" + }, + "phase": { + "title": "当前所处阶段", + "$ref": "#/definitions/v3alpha1MeshStatusPhase" + }, + "pods": { + "title": "Pods 的信息", + "$ref": "#/definitions/v3alpha1PodInfo" + } + } + }, + "v3alpha1MeshStatusPhase": { + "description": " - MESH_STATUS_UNSPECIFIED: Unspecified type.\n - CREATING: Creating describe mesh is creating.\n - UPDATING: Updating similar to Creating, but that means mesh is updating\nsomething.\n - FAILED: Failed described that Mesh config or others are invalid, we can\nnot perform out actions.\n - SUCCEEDED: Succeed means that the mesh control-plane has been installed\nsuccessfully.\n - TERMINATING: Terminating mesh that the mesh is deleting.", + "type": "string", + "default": "MESH_STATUS_UNSPECIFIED", + "enum": [ + "MESH_STATUS_UNSPECIFIED", + "CREATING", + "UPDATING", + "FAILED", + "SUCCEEDED", + "TERMINATING" + ] + }, + "v3alpha1MetricsResponse": { + "type": "object", + "properties": { + "matrix": { + "$ref": "#/definitions/v3alpha1Matrix" + }, + "meshId": { + "type": "string", + "title": "所属网格 ID" + }, + "sample": { + "$ref": "#/definitions/monitorv3alpha1Sample" + }, + "sampleStream": { + "$ref": "#/definitions/monitorv3alpha1SampleStream" + }, + "vector": { + "$ref": "#/definitions/v3alpha1Vector" + } + } + }, + "v3alpha1MultiNetworksConfig": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "如果开启互联配置,将为 true" + }, + "gateway": { + "title": "gateway rule", + "$ref": "#/definitions/MultiNetworksConfigGatewayRule" + }, + "meshId": { + "type": "string", + "title": "网格名称" + } + } + }, + "v3alpha1NamespaceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "命名空间列表", + "items": { + "type": "string" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1NetworkProtocol": { + "description": " - NETWORK_PROTOCOL_UNSPECIFIED: Unspecified type.\n - TCP: TCP protocol.\n - UDP: UDP protocol.\n - SCTP: SCTP protocol.", + "type": "string", + "default": "NETWORK_PROTOCOL_UNSPECIFIED", + "enum": [ + "NETWORK_PROTOCOL_UNSPECIFIED", + "TCP", + "UDP", + "SCTP" + ] + }, + "v3alpha1OutboundTrafficPolicy": { + "type": "object", + "title": "当前未引入 Istio MeshConfig\nproto,会增加一些复杂度,所以完全将如下字段拷贝过来,后续可以考虑引入 Istio\nMeshConfig proto。", + "properties": { + "mode": { + "$ref": "#/definitions/OutboundTrafficPolicyMode" + } + } + }, + "v3alpha1OutputFormat": { + "description": "- OUTPUT_FORMAT_UNSPECIFIED: Unspecified type.\n - YAML: yaml type, 输出对象会包含 yaml 字段,没有 spec 字段。\n - SPEC: spec type, 输出对象会包含 spec 字段,没有 yaml 字段。", + "type": "string", + "title": "在 Yaml 的情况下,后端会使用 yaml marshal 进行序列化,将序列化的结果放在 yaml\n字段中(字符串)。 在 Spec\n的情况下,后端会返回结构体本身,不会对其进行序列化,前端可以直接使用。", + "default": "OUTPUT_FORMAT_UNSPECIFIED", + "enum": [ + "OUTPUT_FORMAT_UNSPECIFIED", + "YAML", + "SPEC" + ] + }, + "v3alpha1PodInfo": { + "type": "object", + "properties": { + "injected": { + "type": "integer", + "format": "int32", + "title": "被网格纳管的 Pod 总数" + }, + "running": { + "type": "integer", + "format": "int32", + "title": "正在运行中的 Pod 数量" + }, + "sidecarVersions": { + "type": "array", + "title": "边车版本列表,\n按照递增排序,第一个元素为最低版本,最后一个元素为最高版本。", + "items": { + "type": "string" + } + }, + "total": { + "type": "integer", + "format": "int32", + "title": "Pod 总数" + } + } + }, + "v3alpha1PolicyType": { + "type": "string", + "title": "- UNSPECIFIED: Unspecified type.\n - HTTP_ROUTE: HTTP 路由\n - TCP_ROUTE: TCP 路由\n - TLS_ROUTE: TLS路由\n - REDIRECT: 重定向\n - REWRITE: 重写\n - RETRIES: 重试\n - FAULT: 故障注入\n - TIMEOUT: 超时\n - MIRROR: 流量镜像\n - DELEGATE: 代理服务\n - SUBSETS: DR\n服务版本\n - LOAD_BALANCER: 负载均衡\n - OUTLIER_DETECTION: 连接池\n - TCP_CONNECTION_POOL: TCP 连接池\n - HTTP_CONNECTION_POOL: HTTP 连接池\n - CLIENT_TLS: 客户端 TLS\n - LOCALITY_LB: 位置感知负载均衡\n - SERVER_TLS: GW\n服务端 TLS", + "default": "UNSPECIFIED", + "enum": [ + "UNSPECIFIED", + "HTTP_ROUTE", + "TCP_ROUTE", + "TLS_ROUTE", + "REDIRECT", + "REWRITE", + "RETRIES", + "FAULT", + "TIMEOUT", + "MIRROR", + "DELEGATE", + "SUBSETS", + "LOAD_BALANCER", + "OUTLIER_DETECTION", + "TCP_CONNECTION_POOL", + "HTTP_CONNECTION_POOL", + "CLIENT_TLS", + "LOCALITY_LB", + "SERVER_TLS" + ] + }, + "v3alpha1RegProxyResp": { + "type": "object", + "properties": { + "addresses": { + "type": "array", + "title": "真实注册中心访问信息", + "items": { + "$ref": "#/definitions/v3alpha1RegistryAddress" + } + }, + "listenPort": { + "type": "integer", + "format": "int32", + "title": "分配的内部端口,仅供内部逻辑使用,如果此端口号为\n0,表示存在问题,需要检查。" + }, + "meshId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "title": "注册中心类型", + "$ref": "#/definitions/v3alpha1RegProxyType" + } + } + }, + "v3alpha1RegProxyType": { + "type": "string", + "default": "REG_PROXY_TYPE_UNSPECIFIED", + "enum": [ + "REG_PROXY_TYPE_UNSPECIFIED", + "NACOS", + "EUREKA", + "ZOOKEEPER" + ] + }, + "v3alpha1RegistryAddress": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "type": "string", + "title": "真实注册中心的域名,host 和 ip 至少填一个,可以为 k8s 服务的 FDNQ" + }, + "ip": { + "type": "string", + "title": "真实注册中心的地址,host 和 ip 至少填一个" + }, + "port": { + "type": "integer", + "format": "int32", + "title": "端口号,如果是 Nacos,只填较小的端口号,如 8848", + "required": [ + "port" + ] + } + } + }, + "v3alpha1ResourceInfo": { + "type": "object", + "properties": { + "egressTotal": { + "type": "integer", + "format": "int32", + "title": "Egress 网关总数" + }, + "ingressTotal": { + "type": "integer", + "format": "int32", + "title": "Ingress 网关总数" + } + } + }, + "v3alpha1ResourceType": { + "description": " - RESOURCE_TYPE_UNSPECIFIED: Unspecified type.\n - VIRTUAL_SERVICE: 虚拟服务\n - DESTINATION_RULE: 目标规则\n - GATEWAY: 网关规则\n - SERVICE_ENTRY: ServiceEntry type.\n - ENVOY_FILTER: EnvoyFilter type.\n - PROXY_CONFIG: ProxyConfig type.\n - SIDECAR: Sidecar type.\n - WORKLOAD_GROUP: WorkloadGroup type.\n - WORKLOAD_ENTRY: WorkloadEntry type.\n - AUTHORIZATION_POLICY: 授权策略\n - PEER_AUTHENTICATION: 对等认证\n - REQUEST_AUTHENTICATION: 请求身份认证\n - WASM_PLUGIN: WasmPlugin type.\n - TELEMETRY: Telemetry type.", + "type": "string", + "default": "RESOURCE_TYPE_UNSPECIFIED", + "enum": [ + "RESOURCE_TYPE_UNSPECIFIED", + "VIRTUAL_SERVICE", + "DESTINATION_RULE", + "GATEWAY", + "SERVICE_ENTRY", + "ENVOY_FILTER", + "PROXY_CONFIG", + "SIDECAR", + "WORKLOAD_GROUP", + "WORKLOAD_ENTRY", + "AUTHORIZATION_POLICY", + "PEER_AUTHENTICATION", + "REQUEST_AUTHENTICATION", + "WASM_PLUGIN", + "TELEMETRY" + ] + }, + "v3alpha1RunningStatus": { + "description": " - RUNNING_STATUS_UNSPECIFIED: Unspecified type.\n - RUNNING: The workload is in running status.\n - ERROR: The workload has error running statuses.", + "type": "string", + "default": "RUNNING_STATUS_UNSPECIFIED", + "enum": [ + "RUNNING_STATUS_UNSPECIFIED", + "RUNNING", + "ERROR" + ] + }, + "v3alpha1SamplePair": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "int64" + }, + "value": { + "type": "string" + } + } + }, + "v3alpha1Secret": { + "type": "object", + "properties": { + "createdAt": { + "type": "string", + "format": "date-time", + "title": "创建时间" + }, + "meshId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "spec": { + "title": "秘钥内容", + "$ref": "#/definitions/v3alpha1SimpleTLSSecretSpec" + }, + "yaml": { + "type": "string", + "title": "yaml 资源信息" + } + } + }, + "v3alpha1SecretOutPutFormat": { + "type": "string", + "title": "- UNSPECIFIED: 默认为基本的数据结构类型\n - YAML: 输出为 YAML 格式的信息", + "default": "UNSPECIFIED", + "enum": [ + "UNSPECIFIED", + "YAML" + ] + }, + "v3alpha1Service": { + "type": "object", + "properties": { + "availableReplicas": { + "type": "integer", + "format": "int64", + "title": "健康实例数" + }, + "createTime": { + "type": "string", + "format": "date-time", + "title": "创建时间" + }, + "deployType": { + "title": "部署类型,vm or container", + "$ref": "#/definitions/v3alpha1DeployType" + }, + "failedReason": { + "title": "导入服务失败后的失败原因", + "$ref": "#/definitions/v3alpha1FailedMessage" + }, + "governType": { + "title": "服务类型", + "$ref": "#/definitions/v3alpha1GovernType" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTime": { + "type": "string", + "format": "date-time", + "title": "修改时间" + }, + "meshId": { + "type": "string", + "title": "所属网格" + }, + "name": { + "type": "string", + "title": "服务名称" + }, + "namespace": { + "type": "string", + "title": "命名空间" + }, + "ports": { + "type": "array", + "title": "服务导入端口对应的协议配置", + "items": { + "$ref": "#/definitions/v3alpha1ServicePort" + } + }, + "replicas": { + "type": "integer", + "format": "int64", + "title": "实例总数" + }, + "status": { + "title": "导入状态", + "$ref": "#/definitions/v3alpha1ServiceStatus" + }, + "type": { + "title": "service type", + "$ref": "#/definitions/v3alpha1ServiceType" + }, + "version": { + "type": "string", + "title": "版本" + } + } + }, + "v3alpha1ServiceAddress": { + "type": "object", + "properties": { + "accessIps": { + "type": "array", + "title": "访问 IP", + "items": { + "type": "string" + } + }, + "accessType": { + "title": "访问方式", + "$ref": "#/definitions/v3alpha1AccessType" + }, + "containerPort": { + "type": "integer", + "format": "int64", + "title": "容器端口" + }, + "domainAddress": { + "type": "string", + "title": "域名访问地址" + }, + "governProtocol": { + "title": "服务导入协议,也就是治理协议,如 TCP、HTTP、HTTPS、HTTP2", + "$ref": "#/definitions/v3alpha1GovernProtocol" + }, + "port": { + "type": "integer", + "format": "int64", + "title": "服务端口" + }, + "protocol": { + "title": "协议,如 TCP、UDP", + "$ref": "#/definitions/v3alpha1NetworkProtocol" + } + } + }, + "v3alpha1ServiceAddressListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "服务地址列表", + "items": { + "$ref": "#/definitions/v3alpha1ServiceAddress" + } + }, + "page": { + "title": "page 信息", + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ServiceConfiguration": { + "type": "object", + "properties": { + "clusterIp": { + "type": "string", + "title": "集群 IP" + }, + "externalIps": { + "type": "array", + "title": "外部 IP", + "items": { + "type": "string" + } + }, + "loadBalancerIp": { + "type": "string", + "title": "负载均衡 IP" + }, + "ports": { + "type": "array", + "title": "服务端口配置", + "items": { + "$ref": "#/definitions/v3alpha1ServicePort" + } + }, + "selector": { + "type": "object", + "title": "service selector", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "title": "服务类型", + "$ref": "#/definitions/v3alpha1ServiceType" + } + } + }, + "v3alpha1ServiceInfo": { + "type": "object", + "properties": { + "healthyTotal": { + "type": "integer", + "format": "int32", + "title": "健康服务总数" + }, + "total": { + "type": "integer", + "format": "int32", + "title": "服务总数" + } + } + }, + "v3alpha1ServiceInstanceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "工作负载实例列表", + "items": { + "$ref": "#/definitions/v3alpha1WorkloadInstance" + } + }, + "page": { + "title": "page 信息", + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ServiceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "服务列表", + "items": { + "$ref": "#/definitions/v3alpha1Service" + } + }, + "page": { + "title": "page 信息", + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1ServiceMetricsQueryMetricType": { + "type": "string", + "title": "- UNSPECIFIED: Unspecified type.\n - ERROR_CODE_PERCENTAGE: HTTP\n错误率(%)\n结果类型为 Vector\n{\n \"vector\": {\n \"vector\": [\n {\n \"metric\": {\n \"response_code\": \"2XX\"\n },\n \"values\": {\n \"timestamp\": \"0\",\n \"value\": \"99.9998677654555\"\n }\n },\n {\n \"metric\": {\n \"response_code\": \"3XX\"\n },\n \"values\": {\n \"timestamp\": \"0\",\n \"value\": \"0\"\n }\n },\n {\n \"metric\": {\n \"response_code\": \"4XX\"\n },\n \"values\": {\n \"timestamp\": \"0\",\n \"value\": \"0\"\n }\n },\n {\n \"metric\": {\n \"response_code\": \"5XX\"\n },\n \"values\": {\n \"timestamp\": \"0\",\n \"value\": \"0\"\n }\n },\n {\n \"metric\": {\n \"response_code\": \"XXX\" 其他响应码\n },\n \"values\": {\n \"timestamp\": \"0\",\n \"value\": \"0.00013223454449473593\"\n }\n }\n ]\n },\n \"meshId\": \"demo-dev-52\"\n}\n - REQUESTS_PER_MINUTE: 请求速率(RPM)\n - AVG_LATENCY: 平均延时(ms)\n - RECEIVE_BYTES: TCP\n接收吞吐量(B/S)\n - SEND_BYTES: 发送吞吐量(B/S)\n - TCP_CONNECTING_COUNT: 连接数", + "default": "UNSPECIFIED", + "enum": [ + "UNSPECIFIED", + "ERROR_CODE_PERCENTAGE", + "REQUESTS_PER_MINUTE", + "AVG_LATENCY", + "RECEIVE_BYTES", + "SEND_BYTES", + "TCP_CONNECTING_COUNT" + ] + }, + "v3alpha1ServicePort": { + "type": "object", + "properties": { + "containerPort": { + "type": "integer", + "format": "int64", + "title": "容器端口" + }, + "governProtocol": { + "title": "服务导入协议,也就是治理协议,如 TCP、HTTP、HTTPS、HTTP2", + "$ref": "#/definitions/v3alpha1GovernProtocol" + }, + "nodePort": { + "type": "integer", + "format": "int64", + "title": "节点端口" + }, + "port": { + "type": "integer", + "format": "int64", + "title": "服务端口" + }, + "protocol": { + "title": "协议,如 TCP、UDP", + "$ref": "#/definitions/v3alpha1NetworkProtocol" + } + } + }, + "v3alpha1ServiceStatus": { + "type": "string", + "title": "- STATUS_UNSPECIFIED: Unspecified type.\n - ERROR: 异常\n - RUNNING: 正常运行中\n - WARNING: 告警", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "ERROR", + "RUNNING", + "WARNING" + ] + }, + "v3alpha1ServiceType": { + "description": " - SERVICE_TYPE_UNSPECIFIED: Unspecified type.\n - CLUSTER_IP: ClusterIP service type.\n - NODE_PORT: NodePort service type.\n - LOAD_BALANCER: LoadBalancer service type.\n - EXTERNAL_NAME: ExternalName service type.", + "type": "string", + "default": "SERVICE_TYPE_UNSPECIFIED", + "enum": [ + "SERVICE_TYPE_UNSPECIFIED", + "CLUSTER_IP", + "NODE_PORT", + "LOAD_BALANCER", + "EXTERNAL_NAME" + ] + }, + "v3alpha1SidecarManagementClusterWideConfigListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "集群资源管理信息", + "items": { + "$ref": "#/definitions/v3alpha1SidecarManagementClusterWideConfigListRespClusterConfig" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1SidecarManagementClusterWideConfigListRespClusterConfig": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "集群名称" + }, + "sidecarResource": { + "title": "边车资源管理情况", + "$ref": "#/definitions/commonResources" + } + } + }, + "v3alpha1SidecarManagementWorkload": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "集群名称" + }, + "isUpgradable": { + "type": "boolean", + "title": "是否有可用升级版本" + }, + "meshId": { + "type": "string", + "title": "网格名称" + }, + "namespace": { + "type": "string", + "title": "命名空间" + }, + "podInfo": { + "title": "pod 信息,包括 pod 总数,已注入数量等", + "$ref": "#/definitions/v3alpha1PodInfo" + }, + "service": { + "description": "Deprecated: use services instead.", + "type": "string", + "title": "所属服务" + }, + "services": { + "type": "array", + "title": "所属服务", + "items": { + "type": "string" + } + }, + "sidecarResources": { + "title": "边车资源管理情况", + "$ref": "#/definitions/commonResources" + }, + "status": { + "title": "注入状态", + "$ref": "#/definitions/SidecarManagementWorkloadInjectionStatus" + }, + "trafficRules": { + "type": "array", + "title": "流量透传规则", + "items": { + "$ref": "#/definitions/v3alpha1TrafficPassRule" + } + }, + "workload": { + "type": "string", + "title": "工作负载名称" + }, + "workloadId": { + "type": "string", + "title": "工作负载 ID" + }, + "workloadKind": { + "title": "工作负载类型,", + "$ref": "#/definitions/v3alpha1WorkloadKind" + } + } + }, + "v3alpha1SidecarManagementWorkloadSidecarListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "工作负载中的实例边车注入信息", + "items": { + "$ref": "#/definitions/v3alpha1WorkloadSidecarInfo" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1SidecarManagementWorkloadsListResp": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1SidecarManagementWorkload" + } + }, + "page": { + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1SidecarUpgraderProcess": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "progress": { + "type": "number", + "format": "float" + }, + "result": { + "$ref": "#/definitions/v3alpha1SidecarUpgraderProcessResult" + }, + "target": { + "title": "发生变化的节点信息\n如果 target 为空,代表改次升级进程的整体状态发生变化。", + "$ref": "#/definitions/SidecarUpgraderProcessTarget" + } + } + }, + "v3alpha1SidecarUpgraderProcessResult": { + "type": "string", + "default": "RESULT_UNSPECIFIED", + "enum": [ + "RESULT_UNSPECIFIED", + "IN_PROCESS", + "SUCCEED", + "FAILED" + ] + }, + "v3alpha1SimpleTLSSecretSpec": { + "type": "object", + "required": [ + "cert", + "key" + ], + "properties": { + "cert": { + "type": "string", + "title": "凭证", + "required": [ + "cert" + ] + }, + "key": { + "type": "string", + "title": "私钥", + "required": [ + "key" + ] + }, + "labels": { + "type": "object", + "title": "标签", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v3alpha1Subset": { + "type": "object", + "title": "服务版本信息", + "properties": { + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + }, + "v3alpha1TrafficPassRule": { + "type": "object", + "properties": { + "direction": { + "title": "流量出入方向", + "$ref": "#/definitions/TrafficPassRuleDirection" + }, + "ipRange": { + "title": "IP CIDR, e.g: 10.64.24.0/21", + "$ref": "#/definitions/TrafficPassRuleIPRange" + }, + "matchType": { + "$ref": "#/definitions/TrafficPassRuleMatchType" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "v3alpha1UpgradeCondition": { + "type": "object", + "properties": { + "expandResult": { + "type": "string", + "title": "拓展返回结果\n当 type 为 KUBERNETES_VERSION 时,该字段为当前实际 kubernetes 版本。" + }, + "message": { + "type": "string", + "title": "检测提示" + }, + "supported": { + "type": "boolean", + "title": "是否支持升级" + }, + "type": { + "title": "检测条件类型", + "$ref": "#/definitions/v3alpha1UpgradeConditionType" + } + } + }, + "v3alpha1UpgradeConditionType": { + "type": "string", + "title": "- CONDITION_TYPE_UNSPECIFIED: Unspecified type.\n - KUBERNETES_VERSION: 集群版本\n - EPHEMERAL_CONTAINER: 临时容器能力\n - HOT_RESTART: 热升级能力", + "default": "CONDITION_TYPE_UNSPECIFIED", + "enum": [ + "CONDITION_TYPE_UNSPECIFIED", + "KUBERNETES_VERSION", + "EPHEMERAL_CONTAINER", + "HOT_RESTART" + ] + }, + "v3alpha1UpgradeProgressResp": { + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/UpgradeProgressRespCondition" + } + }, + "conditionsZhCn": { + "type": "array", + "items": { + "$ref": "#/definitions/UpgradeProgressRespCondition" + } + } + } + }, + "v3alpha1UpgradeSidecarClusterDetectionResp": { + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "$ref": "#/definitions/v3alpha1UpgradeCondition" + } + } + } + }, + "v3alpha1Vector": { + "type": "object", + "properties": { + "vector": { + "type": "array", + "items": { + "$ref": "#/definitions/monitorv3alpha1Sample" + } + } + } + }, + "v3alpha1Workload": { + "type": "object", + "properties": { + "availableReplicas": { + "type": "integer", + "format": "int64", + "title": "健康实例数" + }, + "cluster": { + "type": "string", + "title": "所属集群" + }, + "createTime": { + "type": "string", + "format": "date-time", + "title": "创建时间" + }, + "injectedStatus": { + "title": "注入状态", + "$ref": "#/definitions/v3alpha1InjectionStatus" + }, + "meshId": { + "type": "string", + "title": "所属网格" + }, + "name": { + "type": "string", + "title": "工作负载名称" + }, + "namespace": { + "type": "string", + "title": "所属命名空间" + }, + "replicas": { + "type": "integer", + "format": "int64", + "title": "实例总数" + }, + "resources": { + "title": "资源情况", + "$ref": "#/definitions/commonResources" + }, + "runningStatus": { + "title": "状态", + "$ref": "#/definitions/v3alpha1RunningStatus" + }, + "service": { + "description": "Deprecated: use services instead.", + "type": "string", + "title": "所属服务" + }, + "services": { + "type": "array", + "title": "所属服务,一个工作负载可能属于多个服务", + "items": { + "type": "string" + } + }, + "version": { + "type": "string", + "title": "版本" + }, + "workloadId": { + "type": "string", + "title": "mspider 中工作负载对应的 id" + }, + "workloadKind": { + "title": "workloadKind", + "$ref": "#/definitions/v3alpha1WorkloadKind" + } + } + }, + "v3alpha1WorkloadInstance": { + "type": "object", + "properties": { + "cluster": { + "type": "string", + "title": "所属集群" + }, + "createTime": { + "type": "string", + "format": "date-time", + "title": "创建时间" + }, + "failureReason": { + "type": "array", + "title": "失败原因", + "items": { + "type": "string" + } + }, + "injectedStatus": { + "title": "注入状态", + "$ref": "#/definitions/v3alpha1InjectionStatus" + }, + "ip": { + "type": "string", + "title": "实例 IP" + }, + "meshId": { + "type": "string", + "title": "所属网格" + }, + "name": { + "type": "string", + "title": "实例名称" + }, + "namespace": { + "type": "string", + "title": "所属命名空间" + }, + "nodeName": { + "type": "string", + "title": "所在节点" + }, + "resources": { + "title": "资源情况", + "$ref": "#/definitions/commonResources" + }, + "runningStatus": { + "title": "状态", + "$ref": "#/definitions/v3alpha1RunningStatus" + }, + "version": { + "type": "string", + "title": "版本" + }, + "workload": { + "type": "string", + "title": "工作负载名称" + } + } + }, + "v3alpha1WorkloadInstanceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "工作负载实例列表", + "items": { + "$ref": "#/definitions/v3alpha1WorkloadInstance" + } + }, + "page": { + "title": "page 信息", + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1WorkloadKind": { + "description": " - WORKLOAD_KIND_UNSPECIFIED: Unspecified type.\n - DEPLOYMENT: Deployment is the Deployment workload kind.\n - DEPLOYMENT_CONFIG: DeploymentConfig is the DeploymentConfig workload kind.\n - STATEFUL_SET: StatefulSet is the StatefulSet workload kind.\n - JOB: Job is the Job workload kind.\n - CRON_JOB: CronJob is the CronJob workload kind.\n - DAEMON_SET: DaemonSet is the DaemonSet workload kind.", + "type": "string", + "default": "WORKLOAD_KIND_UNSPECIFIED", + "enum": [ + "WORKLOAD_KIND_UNSPECIFIED", + "DEPLOYMENT", + "DEPLOYMENT_CONFIG", + "STATEFUL_SET", + "JOB", + "CRON_JOB", + "DAEMON_SET" + ] + }, + "v3alpha1WorkloadListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "工作负载列表", + "items": { + "$ref": "#/definitions/v3alpha1Workload" + } + }, + "page": { + "title": "page 信息", + "$ref": "#/definitions/commonPagination" + } + } + }, + "v3alpha1WorkloadSidecarInfo": { + "type": "object", + "properties": { + "cpuUsage": { + "type": "integer", + "format": "int64", + "title": "cpu 使用率(%)" + }, + "failureReason": { + "type": "array", + "title": "注入失败后原因", + "items": { + "type": "string" + } + }, + "memoryUsage": { + "type": "integer", + "format": "int64", + "title": "内存使用率(%)" + }, + "name": { + "type": "string", + "title": "实例名称" + }, + "sidecarResources": { + "title": "边车资源管理情况", + "$ref": "#/definitions/commonResources" + }, + "sidecarStatus": { + "title": "边车状态", + "$ref": "#/definitions/WorkloadSidecarInfoSidecarStatus" + }, + "sidecarVersion": { + "type": "string", + "title": "边车版本" + } + } + }, + "v3alpha1Workspace": { + "type": "object", + "properties": { + "workspace": { + "type": "string", + "title": "workspace name" + }, + "workspaceId": { + "type": "integer", + "format": "int32", + "title": "workspace id" + } + } + } + }, + "tags": [ + { + "name": "ClusterManagementService" + }, + { + "name": "FeatureGatesService" + }, + { + "name": "GovernService" + }, + { + "name": "GraphQueryService" + }, + { + "name": "Greeter" + }, + { + "name": "IstioResourceService" + }, + { + "name": "MeshGatewayManagementService" + }, + { + "name": "MeshManagementService" + }, + { + "name": "MetricsService" + }, + { + "name": "Request" + }, + { + "name": "BiRequestStream" + }, + { + "name": "RegProxyManagementService" + }, + { + "name": "SecretManagementService" + }, + { + "name": "GlobalSettingsService" + }, + { + "name": "SidecarManagementService" + }, + { + "name": "WorkspaceService" + } + ] +} \ No newline at end of file diff --git a/openapi/mspider/v0.105.1.md b/openapi/mspider/v0.105.1.md new file mode 100644 index 00000000..48505a0f --- /dev/null +++ b/openapi/mspider/v0.105.1.md @@ -0,0 +1 @@ +# diff --git a/openapi/spidernet/index.md b/openapi/spidernet/index.md new file mode 100644 index 00000000..67442c5d --- /dev/null +++ b/openapi/spidernet/index.md @@ -0,0 +1,2 @@ +# 网络 OpenAPI +- [版本 v0.5.0](./v0.5.0.md) diff --git a/openapi/spidernet/v0.5.0.json b/openapi/spidernet/v0.5.0.json new file mode 100644 index 00000000..b4179d89 --- /dev/null +++ b/openapi/spidernet/v0.5.0.json @@ -0,0 +1,2475 @@ +{ + "swagger": "2.0", + "info": { + "title": "spidernet", + "version": "v0.5.0" + }, + "tags": [ + { + "name": "Common" + }, + { + "name": "Multus" + }, + { + "name": "Spiderpool" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/multus/instance-annotations": { + "get": { + "summary": "GetMultusInstanceAnnotations parse annotations of multus instances", + "operationId": "Multus_ListMultusInstanceAnnotations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListMultusInstanceAnnotationsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "description": "Cluster the specified resources belongs to.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Multus" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/namespaces": { + "get": { + "operationId": "Common_ListNamespaces", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListNamespacesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "NAMESPACE_SORT_BY_UNSPECIFIED", + "NAMESPACE_SORT_BY_NAME" + ], + "default": "NAMESPACE_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "searches", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Common" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/ipversion": { + "get": { + "operationId": "Spiderpool_GetIPVersionEnablement", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1IPVersionEnablement" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools": { + "get": { + "operationId": "Spiderpool_ListSpiderIPPools", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListSpiderIPPoolsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "controllerSubnet", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "ipVersion", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "IP_VERSION_UNSPECIFIED", + "IP_VERSION_IPV4", + "IP_VERSION_IPV6" + ], + "default": "IP_VERSION_UNSPECIFIED" + }, + { + "name": "vlan", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "selectPod", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "selectNamespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "IPPOOL_SORT_BY_UNSPECIFIED", + "IPPOOL_SORT_BY_NAME", + "IPPOOL_SORT_BY_STATIC", + "IPPOOL_SORT_BY_SUBNET", + "IPPOOL_SORT_BY_VLAN" + ], + "default": "IPPOOL_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "searches", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + }, + "post": { + "operationId": "Spiderpool_CreateSpiderIPPool", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "subnet": { + "type": "string" + }, + "gateway": { + "type": "string" + }, + "routes": { + "type": "array", + "items": { + "$ref": "#/definitions/typesRoute" + } + }, + "podAffinity": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespaceAffinity": { + "type": "string" + }, + "nodeAffinity": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ips": { + "type": "array", + "items": { + "type": "string" + } + }, + "vlan": { + "type": "string", + "format": "int64" + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools/podresults": { + "get": { + "operationId": "Spiderpool_ListPodAllocationResults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPodAllocationResultsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "matchLabel", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "POD_ALLOCATION_RESULT_SORT_BY_UNSPECIFIED", + "POD_ALLOCATION_RESULT_SORT_BY_NIC" + ], + "default": "POD_ALLOCATION_RESULT_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools/{name}": { + "get": { + "operationId": "Spiderpool_GetSpiderIPPool", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1IPPoolBasicInfo" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + }, + "delete": { + "operationId": "Spiderpool_DeleteSpiderIPPool", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + }, + "put": { + "operationId": "Spiderpool_UpdateSpiderIPPool", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "gateway": { + "type": "string" + }, + "vlan": { + "type": "string", + "format": "int64" + }, + "routes": { + "type": "array", + "items": { + "$ref": "#/definitions/typesRoute" + } + }, + "podAffinity": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespaceAffinity": { + "type": "string" + }, + "nodeAffinity": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools/{name}/addips": { + "put": { + "operationId": "Spiderpool_AddIPPoolIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "ips": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools/{name}/allocations": { + "get": { + "operationId": "Spiderpool_ListIPAllocations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListIPAllocationsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "IPPOOL_IP_SORT_BY_UNSPECIFIED", + "IPPOOL_IP_SORT_BY_ADDRESS", + "IPPOOL_IP_SORT_BY_STATUS", + "IPPOOL_IP_SORT_BY_NAMESPACE", + "IPPOOL_IP_SORT_BY_WORKLOAD", + "IPPOOL_IP_SORT_BY_POD" + ], + "default": "IPPOOL_IP_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "searches", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools/{name}/exist": { + "get": { + "operationId": "Spiderpool_CheckSpiderIPPoolExist", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/typesExist" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools/{name}/matchedworkloads": { + "get": { + "operationId": "Spiderpool_ListMatchedWorkloads", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListMatchedWorkloadsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "MATCHED_WORKLOAD_SORT_BY_UNSPECIFIED", + "MATCHED_WORKLOAD_SORT_BY_NAMESPACE", + "MATCHED_WORKLOAD_SORT_BY_TYPE", + "MATCHED_WORKLOAD_SORT_BY_NAME" + ], + "default": "MATCHED_WORKLOAD_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderippools/{name}/rmips": { + "put": { + "operationId": "Spiderpool_RemoveIPPoolIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "ips": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderreservedips": { + "get": { + "operationId": "Spiderpool_ListSpiderReservedIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListSpiderReservedIPsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "ipVersion", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "IP_VERSION_UNSPECIFIED", + "IP_VERSION_IPV4", + "IP_VERSION_IPV6" + ], + "default": "IP_VERSION_UNSPECIFIED" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderreservedips/{ipVersion}/addips": { + "put": { + "operationId": "Spiderpool_AddSpiderReservedIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "ipVersion", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "IP_VERSION_UNSPECIFIED", + "IP_VERSION_IPV4", + "IP_VERSION_IPV6" + ] + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "reservedIps": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spiderreservedips/{ipVersion}/rmips": { + "put": { + "operationId": "Spiderpool_RemoveSpiderReservedIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "ipVersion", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "IP_VERSION_UNSPECIFIED", + "IP_VERSION_IPV4", + "IP_VERSION_IPV6" + ] + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "reservedIps": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spidersubnets": { + "get": { + "operationId": "Spiderpool_ListSpiderSubnets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListSpiderSubnetsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "ipVersion", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "IP_VERSION_UNSPECIFIED", + "IP_VERSION_IPV4", + "IP_VERSION_IPV6" + ], + "default": "IP_VERSION_UNSPECIFIED" + }, + { + "name": "vlan", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SUBNET_SORT_BY_UNSPECIFIED", + "SUBNET_SORT_BY_NAME", + "SUBNET_SORT_BY_SUBNET", + "SUBNET_SORT_BY_VLAN", + "SUBNET_SORT_BY_IPPOOL_COUNT", + "SUBNET_SORT_BY_IP_IN_USE" + ], + "default": "SUBNET_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "searches", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + }, + "post": { + "operationId": "Spiderpool_CreateSpiderSubnet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "subnet": { + "type": "string" + }, + "gateway": { + "type": "string" + }, + "vlan": { + "type": "string", + "format": "int64" + }, + "routes": { + "type": "array", + "items": { + "$ref": "#/definitions/typesRoute" + } + }, + "ips": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spidersubnets/{name}": { + "get": { + "operationId": "Spiderpool_GetSpiderSubnet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1SubnetBasicInfo" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + }, + "delete": { + "operationId": "Spiderpool_DeleteSpiderSubnet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + }, + "put": { + "operationId": "Spiderpool_UpdateSpiderSubnet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "gateway": { + "type": "string" + }, + "vlan": { + "type": "string", + "format": "int64" + }, + "routes": { + "type": "array", + "items": { + "$ref": "#/definitions/typesRoute" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spidersubnets/{name}/addips": { + "put": { + "operationId": "Spiderpool_AddSubnetIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "ips": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spidersubnets/{name}/allocations": { + "get": { + "operationId": "Spiderpool_ListPreIPAllocations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListPreIPAllocationsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SUBNET_IP_SORT_BY_UNSPECIFIED", + "SUBNET_IP_SORT_BY_ADDRESS", + "SUBNET_IP_SORT_BY_STATUS", + "SUBNET_IP_SORT_BY_IPPOOL" + ], + "default": "SUBNET_IP_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "searches", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spidersubnets/{name}/exist": { + "get": { + "operationId": "Spiderpool_CheckSpiderSubnetExist", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/typesExist" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spidersubnets/{name}/freeips": { + "get": { + "operationId": "Spiderpool_ListIPPoolAddibleIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListIPPoolAddibleIPsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ADDIBLEIP_IP_SORT_BY_UNSPECIFIED", + "ADDIBLEIP_IP_SORT_BY_ADDRESS" + ], + "default": "ADDIBLEIP_IP_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "searches", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/clusters/{cluster}/spiderpool/spidersubnets/{name}/rmips": { + "put": { + "operationId": "Spiderpool_RemoveSubnetIPs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "cluster", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "ips": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "tags": [ + "Spiderpool" + ] + } + }, + "/apis/spidernet.io/v1alpha1/spiderpool/clusters": { + "get": { + "operationId": "Spiderpool_ListSpiderpoolClusters", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1alpha1ListSpiderpoolClustersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sortBy", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "CLUSTER_SORT_BY_UNSPECIFIED", + "CLUSTER_SORT_BY_NAME" + ], + "default": "CLUSTER_SORT_BY_UNSPECIFIED" + }, + { + "name": "sortDir", + "description": " - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED" + }, + { + "name": "searches", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Spiderpool" + ] + } + } + }, + "definitions": { + "multusv1alpha1Type": { + "type": "string", + "enum": [ + "default", + "macvlan_standalone", + "macvlan_overlay", + "sriov_standalone", + "sriov_overlay", + "sriov_dpdk", + "unknown" + ], + "default": "default", + "title": "- default: calico or cilium" + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "typesExist": { + "type": "object", + "properties": { + "exist": { + "type": "boolean" + } + } + }, + "typesIPStatus": { + "type": "string", + "enum": [ + "IP_STATUS_UNSPECIFIED", + "IP_STATUS_FREE", + "IP_STATUS_IN_USE", + "IP_STATUS_UNALLOCATED", + "IP_STATUS_PRE_ALLOCATED" + ], + "default": "IP_STATUS_UNSPECIFIED" + }, + "typesIPVersion": { + "type": "string", + "enum": [ + "IP_VERSION_UNSPECIFIED", + "IP_VERSION_IPV4", + "IP_VERSION_IPV6" + ], + "default": "IP_VERSION_UNSPECIFIED" + }, + "typesPagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32", + "description": "Total is the total number of referents." + }, + "page": { + "type": "integer", + "format": "int32", + "description": "Page is current page." + }, + "pageSize": { + "type": "integer", + "format": "int32", + "description": "PageSize is the data number shown per page." + }, + "pages": { + "type": "integer", + "format": "int32", + "description": "Pages is the number of pages." + } + }, + "description": "Pagination is for data paging." + }, + "typesRoute": { + "type": "object", + "properties": { + "dst": { + "type": "string" + }, + "gw": { + "type": "string" + } + } + }, + "typesSortDir": { + "type": "string", + "enum": [ + "SORT_DIR_UNSPECIFIED", + "SORT_DIR_DESC", + "SORT_DIR_ASC" + ], + "default": "SORT_DIR_UNSPECIFIED", + "description": "SortDir determines the data list order.\n\n - SORT_DIR_DESC: Desc stands for descending order.\n - SORT_DIR_ASC: Asc stands for ascending order." + }, + "v1alpha1AddibleIPSortBy": { + "type": "string", + "enum": [ + "ADDIBLEIP_IP_SORT_BY_UNSPECIFIED", + "ADDIBLEIP_IP_SORT_BY_ADDRESS" + ], + "default": "ADDIBLEIP_IP_SORT_BY_UNSPECIFIED" + }, + "v1alpha1AnnotationKeys": { + "type": "object", + "properties": { + "default": { + "type": "string", + "title": "value: v1.multus-cni.io/default-network" + }, + "addon": { + "type": "string", + "title": "value: k8s.v1.cni.cncf.io/networks" + } + } + }, + "v1alpha1AnnotationValues": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "name the name of the multus instance" + }, + "namespace": { + "type": "string", + "title": "namespace the namespace of the multus instance" + }, + "type": { + "$ref": "#/definitions/multusv1alpha1Type", + "title": "type the type of this multus instance" + }, + "isDefault": { + "type": "boolean" + }, + "isUnderlay": { + "type": "boolean", + "title": "isUnderlay indicates that is underlay cni" + }, + "vlanId": { + "type": "string", + "title": "vlanId specify for underlay cni( required fot isUnderlay is true)" + }, + "coexistTypeList": { + "type": "array", + "items": { + "type": "string" + }, + "title": "coexistTypeList the list of coexistedType that can be work with this multus\ninstance" + } + }, + "title": "the base info for multus InstanceAnnotations" + }, + "v1alpha1ClusterRecord": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1alpha1ClusterSortBy": { + "type": "string", + "enum": [ + "CLUSTER_SORT_BY_UNSPECIFIED", + "CLUSTER_SORT_BY_NAME" + ], + "default": "CLUSTER_SORT_BY_UNSPECIFIED" + }, + "v1alpha1IPAllocation": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/typesIPStatus" + }, + "namespace": { + "type": "string" + }, + "pod": { + "type": "string" + } + } + }, + "v1alpha1IPPoolBasicInfo": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "name": { + "type": "string" + }, + "allocatedIpCount": { + "type": "string", + "format": "int64" + }, + "totalIpCount": { + "type": "string", + "format": "int64" + }, + "gateway": { + "type": "string" + }, + "vlan": { + "type": "string", + "format": "int64" + }, + "routes": { + "type": "array", + "items": { + "$ref": "#/definitions/typesRoute" + } + }, + "status": { + "$ref": "#/definitions/v1alpha1IPPoolStatus" + }, + "podAffinity": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespaceAffinity": { + "type": "string" + }, + "nodeAffinity": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTime": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1IPPoolIPSortBy": { + "type": "string", + "enum": [ + "IPPOOL_IP_SORT_BY_UNSPECIFIED", + "IPPOOL_IP_SORT_BY_ADDRESS", + "IPPOOL_IP_SORT_BY_STATUS", + "IPPOOL_IP_SORT_BY_NAMESPACE", + "IPPOOL_IP_SORT_BY_WORKLOAD", + "IPPOOL_IP_SORT_BY_POD" + ], + "default": "IPPOOL_IP_SORT_BY_UNSPECIFIED" + }, + "v1alpha1IPPoolRecord": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/v1alpha1IPPoolStatus" + }, + "subnet": { + "type": "string" + }, + "vlan": { + "type": "string", + "format": "int64" + }, + "allocatedIpCount": { + "type": "string", + "format": "int64" + }, + "totalIpCount": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1IPPoolSortBy": { + "type": "string", + "enum": [ + "IPPOOL_SORT_BY_UNSPECIFIED", + "IPPOOL_SORT_BY_NAME", + "IPPOOL_SORT_BY_STATIC", + "IPPOOL_SORT_BY_SUBNET", + "IPPOOL_SORT_BY_VLAN" + ], + "default": "IPPOOL_SORT_BY_UNSPECIFIED" + }, + "v1alpha1IPPoolStatus": { + "type": "string", + "enum": [ + "IPPOOL_STATUS_UNSPECIFIED", + "IPPOOL_STATUS_ORDINARY", + "IPPOOL_STATUS_STATIC" + ], + "default": "IPPOOL_STATUS_UNSPECIFIED" + }, + "v1alpha1IPVersionEnablement": { + "type": "object", + "properties": { + "enableIpv4": { + "type": "boolean" + }, + "enableIpv6": { + "type": "boolean" + } + } + }, + "v1alpha1ListIPAllocationsResponse": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1IPAllocation" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListIPPoolAddibleIPsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListMatchedWorkloadsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1MatchedWorkloadRecord" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListMultusInstanceAnnotationsResponse": { + "type": "object", + "properties": { + "annotationValueList": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1AnnotationValues" + }, + "title": "items list of the all multus instances" + }, + "annotationKeyList": { + "$ref": "#/definitions/v1alpha1AnnotationKeys" + } + } + }, + "v1alpha1ListNamespacesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1NamespaceRecord" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListPodAllocationResultsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1PodAllocationResultRecord" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListPreIPAllocationsResponse": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1PreIPAllocation" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListSpiderIPPoolsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1IPPoolRecord" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListSpiderReservedIPsResponse": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListSpiderSubnetsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1SubnetRecord" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1ListSpiderpoolClustersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1ClusterRecord" + } + }, + "pagination": { + "$ref": "#/definitions/typesPagination" + } + } + }, + "v1alpha1MatchedWorkloadRecord": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "type": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1alpha1MatchedWorkloadSortBy": { + "type": "string", + "enum": [ + "MATCHED_WORKLOAD_SORT_BY_UNSPECIFIED", + "MATCHED_WORKLOAD_SORT_BY_NAMESPACE", + "MATCHED_WORKLOAD_SORT_BY_TYPE", + "MATCHED_WORKLOAD_SORT_BY_NAME" + ], + "default": "MATCHED_WORKLOAD_SORT_BY_UNSPECIFIED" + }, + "v1alpha1NamespaceRecord": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1alpha1NamespaceSortBy": { + "type": "string", + "enum": [ + "NAMESPACE_SORT_BY_UNSPECIFIED", + "NAMESPACE_SORT_BY_NAME" + ], + "default": "NAMESPACE_SORT_BY_UNSPECIFIED" + }, + "v1alpha1PodAllocationResultRecord": { + "type": "object", + "properties": { + "nic": { + "type": "string" + }, + "ipVersion": { + "$ref": "#/definitions/typesIPVersion" + }, + "pool": { + "type": "string" + }, + "poolStatus": { + "$ref": "#/definitions/v1alpha1IPPoolStatus" + }, + "poolAllocatedIpCount": { + "type": "string", + "format": "int64" + }, + "poolTotalIpCount": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1PodAllocationResultSortBy": { + "type": "string", + "enum": [ + "POD_ALLOCATION_RESULT_SORT_BY_UNSPECIFIED", + "POD_ALLOCATION_RESULT_SORT_BY_NIC" + ], + "default": "POD_ALLOCATION_RESULT_SORT_BY_UNSPECIFIED" + }, + "v1alpha1PreIPAllocation": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/typesIPStatus" + }, + "pool": { + "type": "string" + } + } + }, + "v1alpha1SubnetBasicInfo": { + "type": "object", + "properties": { + "resourceVersion": { + "type": "string" + }, + "cluster": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ipVersion": { + "$ref": "#/definitions/typesIPVersion" + }, + "subnet": { + "type": "string" + }, + "poolCount": { + "type": "integer", + "format": "int32" + }, + "allocatedIpCount": { + "type": "string", + "format": "int64" + }, + "totalIpCount": { + "type": "string", + "format": "int64" + }, + "gateway": { + "type": "string" + }, + "vlan": { + "type": "string", + "format": "int64" + }, + "routes": { + "type": "array", + "items": { + "$ref": "#/definitions/typesRoute" + } + }, + "creationTime": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1SubnetIPSortBy": { + "type": "string", + "enum": [ + "SUBNET_IP_SORT_BY_UNSPECIFIED", + "SUBNET_IP_SORT_BY_ADDRESS", + "SUBNET_IP_SORT_BY_STATUS", + "SUBNET_IP_SORT_BY_IPPOOL" + ], + "default": "SUBNET_IP_SORT_BY_UNSPECIFIED" + }, + "v1alpha1SubnetRecord": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "ipVersion": { + "$ref": "#/definitions/typesIPVersion" + }, + "subnet": { + "type": "string" + }, + "vlan": { + "type": "string", + "format": "int64" + }, + "poolCount": { + "type": "integer", + "format": "int32" + }, + "allocatedIpCount": { + "type": "string", + "format": "int64" + }, + "totalIpCount": { + "type": "string", + "format": "int64" + } + } + }, + "v1alpha1SubnetSortBy": { + "type": "string", + "enum": [ + "SUBNET_SORT_BY_UNSPECIFIED", + "SUBNET_SORT_BY_NAME", + "SUBNET_SORT_BY_SUBNET", + "SUBNET_SORT_BY_VLAN", + "SUBNET_SORT_BY_IPPOOL_COUNT", + "SUBNET_SORT_BY_IP_IN_USE" + ], + "default": "SUBNET_SORT_BY_UNSPECIFIED" + } + } +} diff --git a/openapi/spidernet/v0.5.0.md b/openapi/spidernet/v0.5.0.md new file mode 100644 index 00000000..744ee38f --- /dev/null +++ b/openapi/spidernet/v0.5.0.md @@ -0,0 +1 @@ +# diff --git a/all.yaml b/scripts/all.yaml similarity index 100% rename from all.yaml rename to scripts/all.yaml diff --git a/merge-nav.py b/scripts/merge-nav.py similarity index 100% rename from merge-nav.py rename to scripts/merge-nav.py diff --git a/navigation.yaml b/scripts/navigation.yaml similarity index 100% rename from navigation.yaml rename to scripts/navigation.yaml diff --git a/scripts/openapi-nav.yaml b/scripts/openapi-nav.yaml new file mode 100644 index 00000000..6c6ad756 --- /dev/null +++ b/scripts/openapi-nav.yaml @@ -0,0 +1,18 @@ +nav: + - OpenAPI 文档: + - OpenAPI 文档索引: openapi/index.md + - 全局管理 OpenAPI: openapi/ghippo/v0.15.0.md + - 服务网格 OpenAPI: openapi/mspider/v0.105.1.md + - 可观测性 OpenAPI: openapi/insight/v0.16.0-alpha1.md + - 网络 OpenAPI: openapi/spidernet/v0.5.0.md + - 中间件 OpenAPI: + - Index: openapi/midware.md + - Elasticsearch OpenAPI: openapi/mcamel/elasticsearch-v0.7.0.md + - Kafka OpenAPI: openapi/mcamel/kafka-v0.5.0.md + - MinIO OpenAPI: openapi/mcamel/minio-v0.5.0.md + - MySQL OpenAPI: openapi/mcamel/mysql-v0.8.0.md + - PostgreSQL OpenAPI: + - v0.1.0: openapi/mcamel/postgresql-v0.1.0.md + - v0.1.1: openapi/mcamel/postgresql-v0.1.1.md + - RabbitMQ OpenAPI: openapi/mcamel/rabbitmq-v0.10.0.md + - Redis OpenAPI: openapi/mcamel/redis-v0.7.0.md \ No newline at end of file