You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2020/10/24 15:06:45 UTC

[GitHub] [apisix-dashboard] LiteSun opened a new pull request #598: release: release 2.0-rc version.

LiteSun opened a new pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598


   Please answer these questions before submitting a pull request
   
   - Why submit this pull request?
   - [ ] Bugfix
   - [ ] New feature provided
   - [ ] Improve performance
   
   - Related issues
   
   ___
   ### Bugfix
   - Description
   
   - How to fix?
   
   ___
   ### New feature or improvement
   - Describe the details and related test reports.
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r516085792



##########
File path: api/build-tools/schema-sync.sh
##########
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+pwd=`pwd`
+
+version="master"
+if [[ -n $1 ]]; then
+version=$1
+fi 
+
+rm -rf ./api/build-tools/apisix/
+wget https://github.com/apache/apisix/archive/$version.zip
+
+unzip $version.zip
+mkdir -p ./api/build-tools/apisix/
+mv ./apisix-$version/apisix/* ./api/build-tools/apisix/
+rm -rf ./apisix-$version
+cd ./api/build-tools/ && lua schema-sync.lua > ${pwd}/api/conf/schema.json
+
+echo "sync success:" 
+echo "${pwd}/api/conf/schema.json"

Review comment:
       Ping @nic-chen 

##########
File path: api/conf/conf.go
##########
@@ -42,16 +41,50 @@ const (
 )
 
 var (
-	ENV        string
-	basePath   string
-	Schema     gjson.Result
-	DagLibPath = "/go/manager-api/dag-to-lua/"
+	ENV           string
+	basePath      string
+	Schema        gjson.Result
+	DagLibPath    = "/go/manager-api/dag-to-lua/"

Review comment:
       Yep, and developers couldn't find those directories actually 🤔
   
   ![image](https://user-images.githubusercontent.com/2106987/97891590-ef63d180-1d69-11eb-930b-0e4583ff0123.png)
   




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...d6bdea4](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.56%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      535           
     Misses            ?      631           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...88903fa](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-721509095


   need more attention for those comments, if they are resolved, kindly resolve them.
   
   cc @nic-chen 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397






----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-721509095


   need more attention for those comments, if they are resolved, kindly resolve then.
   
   cc @nic-chen 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...dac8b04](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-724364804


   cc @nic-chen not sure why this E2E will fail.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] nic-chen commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
nic-chen commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r517158072



##########
File path: api/conf/schema.json
##########
@@ -1 +1 @@
-{"main":{"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"stream_route":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"properties
 ":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},
 "name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"ty
 pe":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":
 "integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minIte
 ms":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"server_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6"
 ,"type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"server IP"},"server_port":{"type":"integer","description":"server port"}}},"label_value_def":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"},"consumer":{"type":"object","additionalProperties":false,"properties":{"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"plugins":{"type":"object"},"desc":{"type":"string","maxLength":256},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z
 A-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"required":["username"]},"proto":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"required":["content"]},"version":0.5,"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"global_rule":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"plugins":{"type":"object"}},"required":["plugins"]},"ip_def":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8
 }(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"name":{"type":"string","maxLength":50},"update_time":{"type":"integer"},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","coo
 kie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0
 -9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximu
 m":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"ma
 ximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additiona
 lProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"desc":{"type":"string","maxLength":256},"plugins":{"type":"object"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"additionalProperties":false},"plugin_d
 isable_schema":{"disable":{"type":"boolean"}},"ssl":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"exptime":{"type":"integer","minimum":1588262400},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"key":{"type":"string","minLength":128,"maxLength":65536},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"create_time":{"type":"integer"},"update_time":{"type":"integer"},"status":{"type":"integer","default":1,"enum":[1,0],"description":"ssl status, 1 to enable, 0 to disable"},"validity_start":{"type":"integer"},"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"labels":{"type":"object","maxProperties":
 16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","cert"]}]},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"descripti
 on":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum
 ":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer
 ","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"
 minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nod
 es"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"route":{"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]},"properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"methods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"HTTP method"},"uniqueItems":true},"create_time":{"type":"integer"},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"name":{"type":"string","maxLength":50},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"uri":{"type":"string","minLength":1,"maxLength":4096},"priority":{"type":"integer","default":0},"remote_addrs":{"type":"array","items":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-
 9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":
 1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespa
 ce"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interv
 al":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7
 ,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":[
 "host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"service_protocol":{"enum":["grpc","http"]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","m
 inimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"plugins":{"type":"object"},"uris":{"type":"array","items":{"type":"string","description":"HTTP uri"},"uniqueItems":true},"vars":{"type":"array","items":{"type":"array","items":{"maxItems":3,"anyOf":[{"type":"string"},{"type":"number"}],"minItems":2},"description":"Nginx builtin variable name and value"}},"desc":{"type":"string","maxLength":256}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{
 "required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script","uris"]}]}},"plugins":{"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503}},"required":["rate","burst","key"]},"request-validation":{"type":"object","properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}},"anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}]},"referer-restriction":{"type":"object","additionalProperties":false,"properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"minItems":1}},"required":["whitelist"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"nu
 mber","minimum":1e-05,"maximum":1},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"endpoint":{"type":"string"}},"required":["endpoint","sample_ratio"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"algorithm":{"type":"string","enum":["HS256","HS512","RS256"],"default":"HS256"},"secret":{"type":"string"}}},"wolf-rbac":{"type":"object","properties":{"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"},"server":{"type":"string","default":"http://127.0.0.1:10080"}}},"limit-conn":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"burst":{"
 type":"integer","minimum":0},"conn":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"default_conn_delay":{"type":"number","minimum":0}},"required":["conn","burst","default_conn_delay","key"]},"prometheus":{"type":"object","additionalProperties":false},"example-plugin":{"type":"object","properties":{"port":{"type":"integer"},"i":{"type":"number","minimum":0},"s":{"type":"string"},"t":{"type":"array","minItems":1},"ip":{"type":"string"}},"required":["i"]},"tcp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"intege
 r","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"tls":{"type":"boolean","default":false},"tls_options":{"type":"string"}},"required":["host","port"]},"request-id":{"type":"object","properties":{"include_in_response":{"type":"boolean","default":true},"header_name":{"type":"string","default":"X-Request-Id"}}},"proxy-rewrite":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","pattern":"^[0-9a-zA-Z-.]+$","description":"new host for upstream"},"regex_uri":{"type":"array","maxItems":2,"items":{"type":"string","description":"regex uri"},"minItems":2,"description":"new uri that substitute from client uri for upstream, lower priority than uri property"},"headers":{"type":"object","minProperties":1,"description":"new headers for request"},"uri":{"type":"string","maxLength":4096,"minLength":1,"pattern":"^\\/.*","description":"new uri for upstream"},"scheme":{"type":"string","enum":["http","https"],"description":"new scheme for upst
 ream"}},"minProperties":1},"basic-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"echo":{"type":"object","additionalProperties":false,"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"properties":{"body":{"type":"string","description":"body to replace upstream response."},"after_body":{"type":"string","description":"body after the modification of filter phase."},"auth_value":{"type":"string","description":"auth value"},"before_body":{"type":"string","description":"body before the filter phase."},"headers":{"type":"object","minProperties":1,"description":"new headers for response"}},"minProperties":1},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_password":{"type":"string","minLength":0},"redis_host":{"type":"string","minLength":2},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"
 redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]}},"required":["redis_host"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"time_window":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","default":503,"minimum":200,"maximum":600},"policy":{"type":"string","enum":["local","redis"],"default":"local"}},"required":["count","time_window","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"openid-connect":{"type":"object","properties":{"client_id":{"type":"string"},"bearer_only":{"type":"boolean"},"discovery":{"type":"string"},"introspection_endpoint":{"type":"string"},"token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"scope":{"type":"string"},"logout_path":{"type":"string"},"client_secret":{"type":"string"},"redirect_uri":{"type":"string"},"realm":{"type":"string"},"in
 trospection_endpoint_auth_method":{"type":"string"},"timeout":{"type":"integer","minimum":1},"ssl_verify":{"type":"boolean"}},"required":["client_id","client_secret","discovery"]},"log-rotate":{"type":"object","properties":[],"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true},"rejected_code":{"type":"integer","minimum":200,"default":403}},"required":["block_rules"]},"hmac-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"udp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","mi
 nimum":1,"default":60},"name":{"type":"string","default":"udp logger"}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"properties":{"headers":{"type":"object","minProperties":1,"description":"new headers for repsonse"},"status_code":{"type":"integer","maximum":598,"minimum":200,"description":"new status code for repsonse"},"body":{"type":"string","description":"new body for repsonse"},"body_base64":{"type":"boolean","default":false,"description":"whether new body for repsonse need base64 decode before return"}},"minProperties":1},"ip-restriction":{"type":"object","oneOf":[{"title":"whitelist","additionalProperties":false,"properties":{"whitelist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:)
 {0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["whitelist"]},{"title":"blacklist","additionalProperties":false,"properties":{"blacklist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["blacklist"]}]},"skywalking":{"type":"object","required":["endpoint"],"properties":{"sample_ratio":{"type":"number","default":1,"minimum":1e-05,"maximum":1},"endpoint":{"type":"string"}},"
 service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"}},"syslog":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer"},"max_retry_times":{"type":"integer","minimum":1,"default":1},"drop_limit":{"type":"integer","default":1048576},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"timeout":{"type":"integer","minimum":1,"default":3},"name":{"type":"string","default":"sys logger"},"pool_size":{"type":"integer","minimum":5,"default":5},"retry_interval":{"type":"integer","minimum":0,"default":1},"sock_type":{"type":"string","enum":["tcp","udp"],"default":"tcp"},"tls":{"type":"boolean","default":false},"flush_limit":{"type":"integer","minimum":1,"default":4096}},"required":["host","port"]},"kafka-logger":{"type":"object","properties":{"kafka_topic":{"type":"string"},"batch_max_size":{"type":"int
 eger","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"meta_format":{"type":"string","enum":["default","origin"],"default":"default"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"name":{"type":"string","default":"kafka logger"},"buffer_duration":{"type":"integer","minimum":1,"default":60},"broker_list":{"type":"object"}},"required":["broker_list","kafka_topic","key"]},"consumer-restriction":{"type":"object","properties":{"type":{"type":"string","enum":["consumer_name","service_id"],"default":"consumer_name"},"blacklist":{"type":"array","items":{"type":"string"},"minItems":1},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","items":{"type":"string"},"minItems":1}},"oneOf":[{"required":["whitelist"]},
 {"required":["blacklist"]}]},"proxy-cache":{"type":"object","properties":{"cache_method":{"type":"array","uniqueItems":true,"default":["GET","HEAD"],"items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"http method"},"minItems":1},"cache_http_status":{"type":"array","uniqueItems":true,"default":[200,301,404],"items":{"type":"integer","maximum":599,"minimum":200,"description":"http response status"},"minItems":1},"cache_key":{"type":"array","default":["$host","$request_uri"],"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","description":"a key for caching"},"minItems":1},"cache_zone":{"type":"string","minLength":1},"no_cache":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"cache_bypass":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"hide_cache_headers":{"type":"boolean","default":false}},"requi
 red":["cache_zone"]},"serverless-post-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"fault-injection":{"type":"object","properties":{"delay":{"type":"object","properties":{"duration":{"type":"number","minimum":0}},"minProperties":1},"abort":{"type":"object","properties":{"body":{"type":"string","minLength":0},"http_status":{"type":"integer","minimum":200}},"minProperties":1}},"minProperties":1},"redirect":{"type":"object","properties":{"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2},"ret_code":{"type":"integer","minimum":200,"default":302}},"oneOf":[{"required":["uri"]},{"required":["http_to_https"]}]},"http-logger":{"type":"object","properties":{"batch_max_size":{"type":"integer","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"inclu
 de_req_body":{"type":"boolean","default":false},"concat_method":{"type":"string","enum":["json","new_line"],"default":"json"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"uri":{"type":"string"},"auth_header":{"type":"string","default":""}},"required":["uri"]},"authz-keycloak":{"type":"object","properties":{"keepalive":{"type":"boolean","default":true},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"policy_enforcement_mode":{"type":"string","enum":["ENFORCING","PERMISSIVE"],"default":"ENFORCING"},"ssl_verify":{"type":"boolean","default":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"timeout":{"type":"integer","minimum":1000,"default":3000},"audience":{"type":"st
 ring","minLength":1,"maxLength":100},"keepalive_pool":{"type":"integer","minimum":1,"default":5},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"grant_type":{"type":"string","maxLength":100,"minLength":1,"enum":["urn:ietf:params:oauth:grant-type:uma-ticket"],"default":"urn:ietf:params:oauth:grant-type:uma-ticket"}},"required":["token_endpoint"]},"serverless-pre-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"cors":{"type":"object","properties":{"allow_credential":{"type":"boolean","default":false,"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options."},"max_age":{"type":"integer","default":5,"description":"maximum number of seconds the results can be cached.-1 mean no cached,th
 e max value is depend on browser,more detail plz check MDN. default: 5."},"allow_origins":{"type":"string","default":"*","description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *."},"allow_methods":{"type":"string","default":"*","description":"you can use '*' to allow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *."},"expose_headers":{"type":"string","default":"*","description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *."},"allow_headers":{"type":"string","default":"*","description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *."}}},"batch-requests":{"typ
 e":"object","additionalProperties":false},"grpc-transcode":{"type":"object","required":["proto_id","service","method"],"properties":{"pb_option":{"type":"array","items":{"type":"string","anyOf":[{"type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"],"description":"enum as result"},{"type":"string","enum":["ienum_as_name","enum_as_value"],"description":"int64 as result"},{"type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"],"description":"default values option"},{"type":"string","enum":["enable_hooks","disable_hooks"],"description":"hooks option"}]},"minItems":1},"service":{"type":"string","description":"the grpc service name"},"method":{"type":"string","description":"the method name in the grpc service."},"deadline":{"type":"number","default":0,"description":"deadline for grpc, millisecond"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"i
 nteger","minimum":1}]}},"additionalProperties":true},"proxy-mirror":{"type":"object","required":["host"],"properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1},"node-status":{"type":"object","additionalProperties":false}}}
+{"main":{"plugin_disable_schema":{"disable":{"type":"boolean"}},"route":{"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"vars":{"type":"array","items":{"description":"Nginx builtin variable name and value","items":{"maxItems":3,"minItems":2,"anyOf":[{"type":"string"},{"type":"number"}]},"type":"array"}},"uris":{"type":"array","items":{"description":"HTTP uri","type":"string"},"uniqueItems":true},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","
 anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of no
 de","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"in
 terval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":
 "object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","defau
 lt":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"remote_addrs":{"type":"array","items":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string"
 ,"title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"uniqueItems":true},"methods":{"type":"array","items":{"description":"HTTP method","type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"uniqueItems":true},"name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"priority":{"type":"integer","default":0},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service_protocol":{"enum":["grpc","http"]},"plugins":{"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"uri":{"type":"string","minLength":1,"maxLength":4096},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":
 "^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"update_time":{"type":"integer"}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{"required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script",
 "uris"]}],"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]}},"version":0.5,"stream_route":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"server_addr":{"description":"server IP","anyOf":[{"type":"s
 tring","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"plugins":{"type":"object"},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"requi
 red":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","patt
 ern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failure
 s":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":
 1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstr
 eam_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"server_port":{"description":"server port","type":"integer"}}},"consumer":{"type":"object","properties":{"create_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"desc":{"type":"string","maxLength":256},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"plugins":{"type":"object"},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"update_time":{"type":"integer"}},"additionalPrope
 rties":false,"required":["username"]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"global_rule":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}},"additionalProperties":false,"required":["plugins"]},"ip_def":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"label_value_def"
 :{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64},"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"proto":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"additionalProperties":false,"required":["content"]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":
 "string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]
 },"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_
 statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minI
 tems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"stri
 ng","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"service":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"name":{"type":"string","maxLength":50},"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"stri
 ng","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"
 description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","pr
 operties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{
 "type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}
 ,"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"update_time":{"type":"integer"}}},"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"ssl":{"type":"object","oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","ce
 rt"]}],"additionalProperties":false,"properties":{"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"create_time":{"type":"integer"},"validity_start":{"type":"integer"},"key":{"type":"string","minLength":128,"maxLength":65536},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"status":{"description":"ssl status, 1 to enable, 0 to disable","default":1,"type":"integer","enum":[1,0]},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"typ
 e":"string","minLength":128,"maxLength":65536}},"exptime":{"type":"integer","minimum":1588262400},"update_time":{"type":"integer"}}}},"plugins":{"serverless-pre-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"proxy-mirror":{"type":"object","properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1,"required":["host"]},"serverless-post-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"algorithm":{"type":"string","default":"HS256","enum":["HS25
 6","HS512","RS256"]},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"secret":{"type":"string"}}},"tcp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":1000},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"tls_options":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"tls":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"openid-connect":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1},"client_secret":{"type":"string"},"discovery":{"type":"string"},"redirect_uri":{"type":"string"},"
 token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"logout_path":{"type":"string"},"ssl_verify":{"type":"boolean"},"realm":{"type":"string"},"scope":{"type":"string"},"bearer_only":{"type":"boolean"},"introspection_endpoint_auth_method":{"type":"string"},"introspection_endpoint":{"type":"string"},"client_id":{"type":"string"}},"required":["client_id","client_secret","discovery"]},"prometheus":{"type":"object","additionalProperties":false},"redirect":{"type":"object","oneOf":[{"required":["uri"]},{"required":["http_to_https"]}],"properties":{"ret_code":{"type":"integer","minimum":200,"default":302},"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2}}},"fault-injection":{"type":"object","minProperties":1,"properties":{"delay":{"type":"object","minProperties":1,"properties":{"duration":{"type":"number","minimum":0}}},"abort":{"type":"object","minProperties":1,"properties":{"body":{"type":"string","minLength":0},"http_status":{"type"
 :"integer","minimum":200}}}}},"echo":{"properties":{"body":{"description":"body to replace upstream response.","type":"string"},"auth_value":{"description":"auth value","type":"string"},"headers":{"description":"new headers for response","minProperties":1,"type":"object"},"before_body":{"description":"body before the filter phase.","type":"string"},"after_body":{"description":"body after the modification of filter phase.","type":"string"}},"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"type":"object","minProperties":1,"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"rejected_code":{"type":"integer","minimum":200,"default":403},"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true}},"required":["block_rules"]},"kafka-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"integer","minimum":1,"default"
 :60},"meta_format":{"type":"string","default":"default","enum":["default","origin"]},"broker_list":{"type":"object"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"kafka_topic":{"type":"string"},"retry_delay":{"type":"integer","minimum":0,"default":1},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"name":{"type":"string","default":"kafka logger"},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["broker_list","kafka_topic","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"skywalking":{"type":"object","service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"},"properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1,"default":1},"endpoint":{"type":"string"}},"required":["endpoint"]},"grpc-transcode":{"type":"object","properties":{"method":{"description":"the method name in 
 the grpc service.","type":"string"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"deadline":{"description":"deadline for grpc, millisecond","default":0,"type":"number"},"service":{"description":"the grpc service name","type":"string"},"pb_option":{"type":"array","minItems":1,"items":{"type":"string","anyOf":[{"description":"enum as result","type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"]},{"description":"int64 as result","type":"string","enum":["ienum_as_name","enum_as_value"]},{"description":"default values option","type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"]},{"description":"hooks option","type":"string","enum":["enable_hooks","disable_hooks"]}]}}},"additionalProperties":true,"required":["proto_id","service","method"]},"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote
 _addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rejected_code":{"type":"integer","minimum":200,"default":503},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0}},"required":["rate","burst","key"]},"proxy-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"scheme":{"description":"new scheme for upstream","type":"string","enum":["http","https"]},"uri":{"description":"new uri for upstream","minLength":1,"maxLength":4096,"type":"string","pattern":"^\\/.*"},"headers":{"description":"new headers for request","minProperties":1,"type":"object"},"host":{"description":"new host for upstream","pattern":"^[0-9a-zA-Z-.]+$","type":"string"},"regex_uri":{"description":"new uri that substitute from client uri for upstream, lower priority than uri property","minItems":2,"items":{"description":"regex uri","type":"string"},"type":"array","maxItems":2}}},"consumer-restriction":{"type":"object","oneOf":[{"propert
 ies":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"blacklist":{"type":"array","minItems":1,"items":{"type":"string"}},"rejected_code":{"type":"integer","minimum":200,"default":403}},"title":"blacklist","required":["blacklist"]},{"properties":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","minItems":1,"items":{"type":"string"}}},"title":"whitelist","required":["whitelist"]}]},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"redis_host":{"type":"string","minLength":2},"redis_password":{"type":"string","minLength":0}},"required":["redis_host"]},{"properties":{"redis_timeout":{"type":"int
 eger","minimum":1,"default":1000},"redis_password":{"type":"string","minLength":0},"redis_cluster_nodes":{"type":"array","minItems":2,"items":{"type":"string","minLength":2,"maxLength":100}},"policy":{"enum":["redis-cluster"]}},"required":["redis_cluster_nodes"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"count":{"type":"integer","minimum":0},"policy":{"type":"string","default":"local","enum":["local","redis","redis-cluster"]},"rejected_code":{"type":"integer","minimum":200,"maximum":600,"default":503},"time_window":{"type":"integer","minimum":0}},"required":["count","time_window","key"]},"basic-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"node-status":{"type":"object","additionalProperties":false},"http-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"int
 eger","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"concat_method":{"type":"string","default":"json","enum":["json","new_line"]},"auth_header":{"type":"string","default":""},"max_retry_count":{"type":"integer","minimum":0,"default":0},"uri":{"type":"string"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["uri"]},"wolf-rbac":{"type":"object","properties":{"server":{"type":"string","default":"http://127.0.0.1:10080"},"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"}}},"udp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"udp
  logger"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"authz-keycloak":{"type":"object","properties":{"grant_type":{"default":"urn:ietf:params:oauth:grant-type:uma-ticket","minLength":1,"maxLength":100,"type":"string","enum":["urn:ietf:params:oauth:grant-type:uma-ticket"]},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"ssl_verify":{"type":"boolean","default":true},"audience":{"type":"string","minLength":1,"maxLength":100},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"policy_enforcement_mode":{"type":"string","default":"ENFORCING","enum":["ENFORCING","PERMISSIVE"]},"keepalive":{"type":"boolean","default":true},"timeout":{"type":"integer","minimum":1000,"default":300
 0},"keepalive_pool":{"type":"integer","minimum":1,"default":5}},"required":["token_endpoint"]},"request-id":{"type":"object","properties":{"header_name":{"type":"string","default":"X-Request-Id"},"include_in_response":{"type":"boolean","default":true}}},"ip-restriction":{"type":"object","oneOf":[{"properties":{"whitelist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"whitelist","required":["whitelist"]},{"properties":{"blacklist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv
 4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"blacklist","required":["blacklist"]}]},"syslog":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"drop_limit":{"type":"integer","default":1048576},"name":{"type":"string","default":"sys logger"},"port":{"type":"integer"},"host":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"max_retry_times":{"type":"integer","minimum":1,"default":1},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"flush_limit":{"typ
 e":"integer","minimum":1,"default":4096},"retry_interval":{"type":"integer","minimum":0,"default":1},"pool_size":{"type":"integer","minimum":5,"default":5},"tls":{"type":"boolean","default":false},"sock_type":{"type":"string","default":"tcp","enum":["tcp","udp"]}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"body_base64":{"description":"whether new body for repsonse need base64 decode before return","default":false,"type":"boolean"},"headers":{"description":"new headers for repsonse","minProperties":1,"type":"object"},"status_code":{"description":"new status code for repsonse","minimum":200,"maximum":598,"type":"integer"},"body":{"description":"new body for repsonse","type":"string"}}},"referer-restriction":{"type":"object","properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}}},"additionalPro
 perties":false,"required":["whitelist"]},"request-validation":{"type":"object","anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}],"properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}}},"log-rotate":{"type":"object","additionalProperties":false,"properties":[]},"hmac-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"cors":{"type":"object","properties":{"allow_origins":{"description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *.","default":"*","type":"string"},"allow_headers":{"description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *.","default":"*","type":"string"},"allow_methods":{"description":"you can use '*' to a
 llow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *.","default":"*","type":"string"},"max_age":{"description":"maximum number of seconds the results can be cached.-1 mean no cached,the max value is depend on browser,more detail plz check MDN. default: 5.","default":5,"type":"integer"},"allow_credential":{"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options.","default":false,"type":"boolean"},"expose_headers":{"description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *.","default":"*","type":"string"}}},"example-plugin":{"type":"object","properties":{"s":{"type":"string"},"t":{"type":"array","minItems":1},"i":{"type":"number","minimum":0},"port":{"type":"integer"},"ip":{"type":"string"}},"required":["i"]},"limit-conn":{
 "type":"object","properties":{"conn":{"type":"integer","minimum":0},"default_conn_delay":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"burst":{"type":"integer","minimum":0},"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]}},"required":["conn","burst","default_conn_delay","key"]},"proxy-cache":{"type":"object","properties":{"cache_bypass":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"no_cache":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"hide_cache_headers":{"type":"boolean","default":false},"cache_http_status":{"default":[200,301,404],"minItems":1,"items":{"description":"http response status","minimum":200,"maximum":599,"type":"integer"},"type":"array","uniqueItems":true},"cache_method":{"default":["GET","HEAD"],"minItems":1,"items":{"description":"http method","type":"string"
 ,"enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"type":"array","uniqueItems":true},"cache_zone":{"type":"string","minLength":1},"cache_key":{"type":"array","minItems":1,"items":{"description":"a key for caching","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","type":"string"},"default":["$host","$request_uri"]}},"required":["cache_zone"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1},"endpoint":{"type":"string"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"}},"required":["endpoint","sample_ratio"]},"batch-requests":{"type":"object","additionalProperties":false}}}

Review comment:
       sorry for reply late.I think we had discuss it in mail list.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io commented on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io commented on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.59%           
   =========================================
     Files             ?       18           
     Lines             ?     1195           
     Branches          ?        0           
   =========================================
     Hits              ?      509           
     Misses            ?      599           
     Partials          ?       87           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...de8bdbf](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-721537105


   No, just ping @nic-chen 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.97%           
   =========================================
     Files             ?       18           
     Lines             ?     1217           
     Branches          ?        0           
   =========================================
     Hits              ?      523           
     Misses            ?      605           
     Partials          ?       89           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...edea177](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...f2ff23a](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.56%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      535           
     Misses            ?      631           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...e14cfe8](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   43.08%           
   =========================================
     Files             ?       18           
     Lines             ?     1237           
     Branches          ?        0           
   =========================================
     Hits              ?      533           
     Misses            ?      615           
     Partials          ?       89           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...3a405f7](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r511668143



##########
File path: CHANGELOG.md
##########
@@ -18,10 +18,26 @@
 -->
 
 # Table of Contents
-
+- [2.0.0](#200)
 - [1.5.0](#150)
 - [1.0.0](#100)
 
+# 2.0.0
+
+This is release candidate.

Review comment:
       `a` release

##########
File path: CHANGELOG.md
##########
@@ -18,10 +18,26 @@
 -->
 
 # Table of Contents
-
+- [2.0.0](#200)
 - [1.5.0](#150)
 - [1.0.0](#100)
 
+# 2.0.0
+
+This is release candidate.
+
+# Core
+
+- Refactor front-end with admin-api.
+- Manage-api removes dependency on mysql.
+- Support Plugin orchestration.

Review comment:
       Plugin should be lowercase.

##########
File path: CHANGELOG.md
##########
@@ -18,10 +18,26 @@
 -->
 
 # Table of Contents
-
+- [2.0.0](#200)
 - [1.5.0](#150)
 - [1.0.0](#100)
 
+# 2.0.0
+
+This is release candidate.
+
+# Core
+
+- Refactor front-end with admin-api.
+- Manage-api removes dependency on mysql.

Review comment:
       manager-api or Manger-API, I would prefer the first one.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...c106b3d](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.83%           
   =========================================
     Files             ?       18           
     Lines             ?     1249           
     Branches          ?        0           
   =========================================
     Hits              ?      535           
     Misses            ?      625           
     Partials          ?       89           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...63977d9](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.91%           
   =========================================
     Files             ?       18           
     Lines             ?     1249           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      624           
     Partials          ?       89           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...ff33d97](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r514136485



##########
File path: docs/deploy.zh-CN.md
##########
@@ -88,4 +76,83 @@ $ yarn build
 ```
 
 5. 如果第 4 步成功的话,那么构建后的文件在 `/dist` 目录下。
-6. 移动 `dist` 目录下的文件到 manager-api 的 `dist` 目录下,然后在浏览器中访问 `http://127.0.0.1:8080`,`8080` 是 manager-api 的默认监听端口。
+
+## 启动
+
+1. 根据您的部署环境,检查并修改 `api/conf/conf.json` 中的配置。

Review comment:
       yep, I'm refactoring the frontend and backend.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] membphis commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
membphis commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r511524846



##########
File path: CHANGELOG.md
##########
@@ -18,10 +18,26 @@
 -->
 
 # Table of Contents
-
+- [2.0.0](#200)
 - [1.5.0](#150)
 - [1.0.0](#100)
 
+# 2.0.0
+
+This is release candidate.
+
+# Core
+
+- Refactor front-end with admin-api.
+- Manage-api removes dependency on mysql.

Review comment:
       `mysql` -> `MySQL`

##########
File path: CHANGELOG.md
##########
@@ -18,10 +18,26 @@
 -->
 
 # Table of Contents
-
+- [2.0.0](#200)
 - [1.5.0](#150)
 - [1.0.0](#100)
 
+# 2.0.0
+
+This is release candidate.
+
+# Core
+
+- Refactor front-end with admin-api.

Review comment:
       `admin-api` -> `Admin-API`




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] moonming commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
moonming commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r514095373



##########
File path: api/conf/conf.go
##########
@@ -61,23 +94,23 @@ func setEnvironment() {
 		ENV = env
 	}
 
-	if env := os.Getenv("APIX_DAG_LIB_PATH"); env != "" {
-		DagLibPath = env
-	}
-
 	_, basePath, _, _ = runtime.Caller(1)
 }
 
 func configurationPath() string {
-	if ENV == EnvLOCAL {
+	if confPath := os.Getenv("APISIX_CONF_PATH"); confPath != "" {

Review comment:
       how about move to configure file too?

##########
File path: api/conf/conf.go
##########
@@ -42,16 +41,50 @@ const (
 )
 
 var (
-	ENV        string
-	basePath   string
-	Schema     gjson.Result
-	DagLibPath = "/go/manager-api/dag-to-lua/"
+	ENV           string
+	basePath      string
+	Schema        gjson.Result
+	DagLibPath    = "/go/manager-api/dag-to-lua/"

Review comment:
       I don't think root dir is good

##########
File path: api/conf/schema.json
##########
@@ -1 +1 @@
-{"main":{"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"stream_route":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"properties
 ":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},
 "name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"ty
 pe":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":
 "integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minIte
 ms":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"server_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6"
 ,"type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"server IP"},"server_port":{"type":"integer","description":"server port"}}},"label_value_def":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"},"consumer":{"type":"object","additionalProperties":false,"properties":{"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"plugins":{"type":"object"},"desc":{"type":"string","maxLength":256},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z
 A-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"required":["username"]},"proto":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"required":["content"]},"version":0.5,"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"global_rule":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"plugins":{"type":"object"}},"required":["plugins"]},"ip_def":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8
 }(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"name":{"type":"string","maxLength":50},"update_time":{"type":"integer"},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","coo
 kie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0
 -9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximu
 m":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"ma
 ximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additiona
 lProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"desc":{"type":"string","maxLength":256},"plugins":{"type":"object"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"additionalProperties":false},"plugin_d
 isable_schema":{"disable":{"type":"boolean"}},"ssl":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"exptime":{"type":"integer","minimum":1588262400},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"key":{"type":"string","minLength":128,"maxLength":65536},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"create_time":{"type":"integer"},"update_time":{"type":"integer"},"status":{"type":"integer","default":1,"enum":[1,0],"description":"ssl status, 1 to enable, 0 to disable"},"validity_start":{"type":"integer"},"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"labels":{"type":"object","maxProperties":
 16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","cert"]}]},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"descripti
 on":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum
 ":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer
 ","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"
 minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nod
 es"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"route":{"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]},"properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"methods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"HTTP method"},"uniqueItems":true},"create_time":{"type":"integer"},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"name":{"type":"string","maxLength":50},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"uri":{"type":"string","minLength":1,"maxLength":4096},"priority":{"type":"integer","default":0},"remote_addrs":{"type":"array","items":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-
 9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":
 1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespa
 ce"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interv
 al":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7
 ,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":[
 "host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"service_protocol":{"enum":["grpc","http"]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","m
 inimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"plugins":{"type":"object"},"uris":{"type":"array","items":{"type":"string","description":"HTTP uri"},"uniqueItems":true},"vars":{"type":"array","items":{"type":"array","items":{"maxItems":3,"anyOf":[{"type":"string"},{"type":"number"}],"minItems":2},"description":"Nginx builtin variable name and value"}},"desc":{"type":"string","maxLength":256}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{
 "required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script","uris"]}]}},"plugins":{"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503}},"required":["rate","burst","key"]},"request-validation":{"type":"object","properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}},"anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}]},"referer-restriction":{"type":"object","additionalProperties":false,"properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"minItems":1}},"required":["whitelist"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"nu
 mber","minimum":1e-05,"maximum":1},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"endpoint":{"type":"string"}},"required":["endpoint","sample_ratio"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"algorithm":{"type":"string","enum":["HS256","HS512","RS256"],"default":"HS256"},"secret":{"type":"string"}}},"wolf-rbac":{"type":"object","properties":{"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"},"server":{"type":"string","default":"http://127.0.0.1:10080"}}},"limit-conn":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"burst":{"
 type":"integer","minimum":0},"conn":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"default_conn_delay":{"type":"number","minimum":0}},"required":["conn","burst","default_conn_delay","key"]},"prometheus":{"type":"object","additionalProperties":false},"example-plugin":{"type":"object","properties":{"port":{"type":"integer"},"i":{"type":"number","minimum":0},"s":{"type":"string"},"t":{"type":"array","minItems":1},"ip":{"type":"string"}},"required":["i"]},"tcp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"intege
 r","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"tls":{"type":"boolean","default":false},"tls_options":{"type":"string"}},"required":["host","port"]},"request-id":{"type":"object","properties":{"include_in_response":{"type":"boolean","default":true},"header_name":{"type":"string","default":"X-Request-Id"}}},"proxy-rewrite":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","pattern":"^[0-9a-zA-Z-.]+$","description":"new host for upstream"},"regex_uri":{"type":"array","maxItems":2,"items":{"type":"string","description":"regex uri"},"minItems":2,"description":"new uri that substitute from client uri for upstream, lower priority than uri property"},"headers":{"type":"object","minProperties":1,"description":"new headers for request"},"uri":{"type":"string","maxLength":4096,"minLength":1,"pattern":"^\\/.*","description":"new uri for upstream"},"scheme":{"type":"string","enum":["http","https"],"description":"new scheme for upst
 ream"}},"minProperties":1},"basic-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"echo":{"type":"object","additionalProperties":false,"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"properties":{"body":{"type":"string","description":"body to replace upstream response."},"after_body":{"type":"string","description":"body after the modification of filter phase."},"auth_value":{"type":"string","description":"auth value"},"before_body":{"type":"string","description":"body before the filter phase."},"headers":{"type":"object","minProperties":1,"description":"new headers for response"}},"minProperties":1},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_password":{"type":"string","minLength":0},"redis_host":{"type":"string","minLength":2},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"
 redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]}},"required":["redis_host"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"time_window":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","default":503,"minimum":200,"maximum":600},"policy":{"type":"string","enum":["local","redis"],"default":"local"}},"required":["count","time_window","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"openid-connect":{"type":"object","properties":{"client_id":{"type":"string"},"bearer_only":{"type":"boolean"},"discovery":{"type":"string"},"introspection_endpoint":{"type":"string"},"token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"scope":{"type":"string"},"logout_path":{"type":"string"},"client_secret":{"type":"string"},"redirect_uri":{"type":"string"},"realm":{"type":"string"},"in
 trospection_endpoint_auth_method":{"type":"string"},"timeout":{"type":"integer","minimum":1},"ssl_verify":{"type":"boolean"}},"required":["client_id","client_secret","discovery"]},"log-rotate":{"type":"object","properties":[],"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true},"rejected_code":{"type":"integer","minimum":200,"default":403}},"required":["block_rules"]},"hmac-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"udp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","mi
 nimum":1,"default":60},"name":{"type":"string","default":"udp logger"}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"properties":{"headers":{"type":"object","minProperties":1,"description":"new headers for repsonse"},"status_code":{"type":"integer","maximum":598,"minimum":200,"description":"new status code for repsonse"},"body":{"type":"string","description":"new body for repsonse"},"body_base64":{"type":"boolean","default":false,"description":"whether new body for repsonse need base64 decode before return"}},"minProperties":1},"ip-restriction":{"type":"object","oneOf":[{"title":"whitelist","additionalProperties":false,"properties":{"whitelist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:)
 {0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["whitelist"]},{"title":"blacklist","additionalProperties":false,"properties":{"blacklist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["blacklist"]}]},"skywalking":{"type":"object","required":["endpoint"],"properties":{"sample_ratio":{"type":"number","default":1,"minimum":1e-05,"maximum":1},"endpoint":{"type":"string"}},"
 service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"}},"syslog":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer"},"max_retry_times":{"type":"integer","minimum":1,"default":1},"drop_limit":{"type":"integer","default":1048576},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"timeout":{"type":"integer","minimum":1,"default":3},"name":{"type":"string","default":"sys logger"},"pool_size":{"type":"integer","minimum":5,"default":5},"retry_interval":{"type":"integer","minimum":0,"default":1},"sock_type":{"type":"string","enum":["tcp","udp"],"default":"tcp"},"tls":{"type":"boolean","default":false},"flush_limit":{"type":"integer","minimum":1,"default":4096}},"required":["host","port"]},"kafka-logger":{"type":"object","properties":{"kafka_topic":{"type":"string"},"batch_max_size":{"type":"int
 eger","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"meta_format":{"type":"string","enum":["default","origin"],"default":"default"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"name":{"type":"string","default":"kafka logger"},"buffer_duration":{"type":"integer","minimum":1,"default":60},"broker_list":{"type":"object"}},"required":["broker_list","kafka_topic","key"]},"consumer-restriction":{"type":"object","properties":{"type":{"type":"string","enum":["consumer_name","service_id"],"default":"consumer_name"},"blacklist":{"type":"array","items":{"type":"string"},"minItems":1},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","items":{"type":"string"},"minItems":1}},"oneOf":[{"required":["whitelist"]},
 {"required":["blacklist"]}]},"proxy-cache":{"type":"object","properties":{"cache_method":{"type":"array","uniqueItems":true,"default":["GET","HEAD"],"items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"http method"},"minItems":1},"cache_http_status":{"type":"array","uniqueItems":true,"default":[200,301,404],"items":{"type":"integer","maximum":599,"minimum":200,"description":"http response status"},"minItems":1},"cache_key":{"type":"array","default":["$host","$request_uri"],"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","description":"a key for caching"},"minItems":1},"cache_zone":{"type":"string","minLength":1},"no_cache":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"cache_bypass":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"hide_cache_headers":{"type":"boolean","default":false}},"requi
 red":["cache_zone"]},"serverless-post-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"fault-injection":{"type":"object","properties":{"delay":{"type":"object","properties":{"duration":{"type":"number","minimum":0}},"minProperties":1},"abort":{"type":"object","properties":{"body":{"type":"string","minLength":0},"http_status":{"type":"integer","minimum":200}},"minProperties":1}},"minProperties":1},"redirect":{"type":"object","properties":{"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2},"ret_code":{"type":"integer","minimum":200,"default":302}},"oneOf":[{"required":["uri"]},{"required":["http_to_https"]}]},"http-logger":{"type":"object","properties":{"batch_max_size":{"type":"integer","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"inclu
 de_req_body":{"type":"boolean","default":false},"concat_method":{"type":"string","enum":["json","new_line"],"default":"json"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"uri":{"type":"string"},"auth_header":{"type":"string","default":""}},"required":["uri"]},"authz-keycloak":{"type":"object","properties":{"keepalive":{"type":"boolean","default":true},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"policy_enforcement_mode":{"type":"string","enum":["ENFORCING","PERMISSIVE"],"default":"ENFORCING"},"ssl_verify":{"type":"boolean","default":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"timeout":{"type":"integer","minimum":1000,"default":3000},"audience":{"type":"st
 ring","minLength":1,"maxLength":100},"keepalive_pool":{"type":"integer","minimum":1,"default":5},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"grant_type":{"type":"string","maxLength":100,"minLength":1,"enum":["urn:ietf:params:oauth:grant-type:uma-ticket"],"default":"urn:ietf:params:oauth:grant-type:uma-ticket"}},"required":["token_endpoint"]},"serverless-pre-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"cors":{"type":"object","properties":{"allow_credential":{"type":"boolean","default":false,"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options."},"max_age":{"type":"integer","default":5,"description":"maximum number of seconds the results can be cached.-1 mean no cached,th
 e max value is depend on browser,more detail plz check MDN. default: 5."},"allow_origins":{"type":"string","default":"*","description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *."},"allow_methods":{"type":"string","default":"*","description":"you can use '*' to allow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *."},"expose_headers":{"type":"string","default":"*","description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *."},"allow_headers":{"type":"string","default":"*","description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *."}}},"batch-requests":{"typ
 e":"object","additionalProperties":false},"grpc-transcode":{"type":"object","required":["proto_id","service","method"],"properties":{"pb_option":{"type":"array","items":{"type":"string","anyOf":[{"type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"],"description":"enum as result"},{"type":"string","enum":["ienum_as_name","enum_as_value"],"description":"int64 as result"},{"type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"],"description":"default values option"},{"type":"string","enum":["enable_hooks","disable_hooks"],"description":"hooks option"}]},"minItems":1},"service":{"type":"string","description":"the grpc service name"},"method":{"type":"string","description":"the method name in the grpc service."},"deadline":{"type":"number","default":0,"description":"deadline for grpc, millisecond"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"i
 nteger","minimum":1}]}},"additionalProperties":true},"proxy-mirror":{"type":"object","required":["host"],"properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1},"node-status":{"type":"object","additionalProperties":false}}}
+{"main":{"plugin_disable_schema":{"disable":{"type":"boolean"}},"route":{"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"vars":{"type":"array","items":{"description":"Nginx builtin variable name and value","items":{"maxItems":3,"minItems":2,"anyOf":[{"type":"string"},{"type":"number"}]},"type":"array"}},"uris":{"type":"array","items":{"description":"HTTP uri","type":"string"},"uniqueItems":true},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","
 anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of no
 de","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"in
 terval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":
 "object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","defau
 lt":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"remote_addrs":{"type":"array","items":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string"
 ,"title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"uniqueItems":true},"methods":{"type":"array","items":{"description":"HTTP method","type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"uniqueItems":true},"name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"priority":{"type":"integer","default":0},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service_protocol":{"enum":["grpc","http"]},"plugins":{"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"uri":{"type":"string","minLength":1,"maxLength":4096},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":
 "^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"update_time":{"type":"integer"}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{"required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script",
 "uris"]}],"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]}},"version":0.5,"stream_route":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"server_addr":{"description":"server IP","anyOf":[{"type":"s
 tring","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"plugins":{"type":"object"},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"requi
 red":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","patt
 ern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failure
 s":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":
 1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstr
 eam_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"server_port":{"description":"server port","type":"integer"}}},"consumer":{"type":"object","properties":{"create_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"desc":{"type":"string","maxLength":256},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"plugins":{"type":"object"},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"update_time":{"type":"integer"}},"additionalPrope
 rties":false,"required":["username"]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"global_rule":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}},"additionalProperties":false,"required":["plugins"]},"ip_def":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"label_value_def"
 :{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64},"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"proto":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"additionalProperties":false,"required":["content"]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":
 "string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]
 },"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_
 statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minI
 tems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"stri
 ng","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"service":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"name":{"type":"string","maxLength":50},"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"stri
 ng","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"
 description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","pr
 operties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{
 "type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}
 ,"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"update_time":{"type":"integer"}}},"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"ssl":{"type":"object","oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","ce
 rt"]}],"additionalProperties":false,"properties":{"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"create_time":{"type":"integer"},"validity_start":{"type":"integer"},"key":{"type":"string","minLength":128,"maxLength":65536},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"status":{"description":"ssl status, 1 to enable, 0 to disable","default":1,"type":"integer","enum":[1,0]},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"typ
 e":"string","minLength":128,"maxLength":65536}},"exptime":{"type":"integer","minimum":1588262400},"update_time":{"type":"integer"}}}},"plugins":{"serverless-pre-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"proxy-mirror":{"type":"object","properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1,"required":["host"]},"serverless-post-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"algorithm":{"type":"string","default":"HS256","enum":["HS25
 6","HS512","RS256"]},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"secret":{"type":"string"}}},"tcp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":1000},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"tls_options":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"tls":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"openid-connect":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1},"client_secret":{"type":"string"},"discovery":{"type":"string"},"redirect_uri":{"type":"string"},"
 token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"logout_path":{"type":"string"},"ssl_verify":{"type":"boolean"},"realm":{"type":"string"},"scope":{"type":"string"},"bearer_only":{"type":"boolean"},"introspection_endpoint_auth_method":{"type":"string"},"introspection_endpoint":{"type":"string"},"client_id":{"type":"string"}},"required":["client_id","client_secret","discovery"]},"prometheus":{"type":"object","additionalProperties":false},"redirect":{"type":"object","oneOf":[{"required":["uri"]},{"required":["http_to_https"]}],"properties":{"ret_code":{"type":"integer","minimum":200,"default":302},"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2}}},"fault-injection":{"type":"object","minProperties":1,"properties":{"delay":{"type":"object","minProperties":1,"properties":{"duration":{"type":"number","minimum":0}}},"abort":{"type":"object","minProperties":1,"properties":{"body":{"type":"string","minLength":0},"http_status":{"type"
 :"integer","minimum":200}}}}},"echo":{"properties":{"body":{"description":"body to replace upstream response.","type":"string"},"auth_value":{"description":"auth value","type":"string"},"headers":{"description":"new headers for response","minProperties":1,"type":"object"},"before_body":{"description":"body before the filter phase.","type":"string"},"after_body":{"description":"body after the modification of filter phase.","type":"string"}},"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"type":"object","minProperties":1,"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"rejected_code":{"type":"integer","minimum":200,"default":403},"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true}},"required":["block_rules"]},"kafka-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"integer","minimum":1,"default"
 :60},"meta_format":{"type":"string","default":"default","enum":["default","origin"]},"broker_list":{"type":"object"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"kafka_topic":{"type":"string"},"retry_delay":{"type":"integer","minimum":0,"default":1},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"name":{"type":"string","default":"kafka logger"},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["broker_list","kafka_topic","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"skywalking":{"type":"object","service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"},"properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1,"default":1},"endpoint":{"type":"string"}},"required":["endpoint"]},"grpc-transcode":{"type":"object","properties":{"method":{"description":"the method name in 
 the grpc service.","type":"string"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"deadline":{"description":"deadline for grpc, millisecond","default":0,"type":"number"},"service":{"description":"the grpc service name","type":"string"},"pb_option":{"type":"array","minItems":1,"items":{"type":"string","anyOf":[{"description":"enum as result","type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"]},{"description":"int64 as result","type":"string","enum":["ienum_as_name","enum_as_value"]},{"description":"default values option","type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"]},{"description":"hooks option","type":"string","enum":["enable_hooks","disable_hooks"]}]}}},"additionalProperties":true,"required":["proto_id","service","method"]},"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote
 _addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rejected_code":{"type":"integer","minimum":200,"default":503},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0}},"required":["rate","burst","key"]},"proxy-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"scheme":{"description":"new scheme for upstream","type":"string","enum":["http","https"]},"uri":{"description":"new uri for upstream","minLength":1,"maxLength":4096,"type":"string","pattern":"^\\/.*"},"headers":{"description":"new headers for request","minProperties":1,"type":"object"},"host":{"description":"new host for upstream","pattern":"^[0-9a-zA-Z-.]+$","type":"string"},"regex_uri":{"description":"new uri that substitute from client uri for upstream, lower priority than uri property","minItems":2,"items":{"description":"regex uri","type":"string"},"type":"array","maxItems":2}}},"consumer-restriction":{"type":"object","oneOf":[{"propert
 ies":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"blacklist":{"type":"array","minItems":1,"items":{"type":"string"}},"rejected_code":{"type":"integer","minimum":200,"default":403}},"title":"blacklist","required":["blacklist"]},{"properties":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","minItems":1,"items":{"type":"string"}}},"title":"whitelist","required":["whitelist"]}]},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"redis_host":{"type":"string","minLength":2},"redis_password":{"type":"string","minLength":0}},"required":["redis_host"]},{"properties":{"redis_timeout":{"type":"int
 eger","minimum":1,"default":1000},"redis_password":{"type":"string","minLength":0},"redis_cluster_nodes":{"type":"array","minItems":2,"items":{"type":"string","minLength":2,"maxLength":100}},"policy":{"enum":["redis-cluster"]}},"required":["redis_cluster_nodes"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"count":{"type":"integer","minimum":0},"policy":{"type":"string","default":"local","enum":["local","redis","redis-cluster"]},"rejected_code":{"type":"integer","minimum":200,"maximum":600,"default":503},"time_window":{"type":"integer","minimum":0}},"required":["count","time_window","key"]},"basic-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"node-status":{"type":"object","additionalProperties":false},"http-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"int
 eger","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"concat_method":{"type":"string","default":"json","enum":["json","new_line"]},"auth_header":{"type":"string","default":""},"max_retry_count":{"type":"integer","minimum":0,"default":0},"uri":{"type":"string"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["uri"]},"wolf-rbac":{"type":"object","properties":{"server":{"type":"string","default":"http://127.0.0.1:10080"},"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"}}},"udp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"udp
  logger"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"authz-keycloak":{"type":"object","properties":{"grant_type":{"default":"urn:ietf:params:oauth:grant-type:uma-ticket","minLength":1,"maxLength":100,"type":"string","enum":["urn:ietf:params:oauth:grant-type:uma-ticket"]},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"ssl_verify":{"type":"boolean","default":true},"audience":{"type":"string","minLength":1,"maxLength":100},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"policy_enforcement_mode":{"type":"string","default":"ENFORCING","enum":["ENFORCING","PERMISSIVE"]},"keepalive":{"type":"boolean","default":true},"timeout":{"type":"integer","minimum":1000,"default":300
 0},"keepalive_pool":{"type":"integer","minimum":1,"default":5}},"required":["token_endpoint"]},"request-id":{"type":"object","properties":{"header_name":{"type":"string","default":"X-Request-Id"},"include_in_response":{"type":"boolean","default":true}}},"ip-restriction":{"type":"object","oneOf":[{"properties":{"whitelist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"whitelist","required":["whitelist"]},{"properties":{"blacklist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv
 4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"blacklist","required":["blacklist"]}]},"syslog":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"drop_limit":{"type":"integer","default":1048576},"name":{"type":"string","default":"sys logger"},"port":{"type":"integer"},"host":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"max_retry_times":{"type":"integer","minimum":1,"default":1},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"flush_limit":{"typ
 e":"integer","minimum":1,"default":4096},"retry_interval":{"type":"integer","minimum":0,"default":1},"pool_size":{"type":"integer","minimum":5,"default":5},"tls":{"type":"boolean","default":false},"sock_type":{"type":"string","default":"tcp","enum":["tcp","udp"]}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"body_base64":{"description":"whether new body for repsonse need base64 decode before return","default":false,"type":"boolean"},"headers":{"description":"new headers for repsonse","minProperties":1,"type":"object"},"status_code":{"description":"new status code for repsonse","minimum":200,"maximum":598,"type":"integer"},"body":{"description":"new body for repsonse","type":"string"}}},"referer-restriction":{"type":"object","properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}}},"additionalPro
 perties":false,"required":["whitelist"]},"request-validation":{"type":"object","anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}],"properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}}},"log-rotate":{"type":"object","additionalProperties":false,"properties":[]},"hmac-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"cors":{"type":"object","properties":{"allow_origins":{"description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *.","default":"*","type":"string"},"allow_headers":{"description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *.","default":"*","type":"string"},"allow_methods":{"description":"you can use '*' to a
 llow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *.","default":"*","type":"string"},"max_age":{"description":"maximum number of seconds the results can be cached.-1 mean no cached,the max value is depend on browser,more detail plz check MDN. default: 5.","default":5,"type":"integer"},"allow_credential":{"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options.","default":false,"type":"boolean"},"expose_headers":{"description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *.","default":"*","type":"string"}}},"example-plugin":{"type":"object","properties":{"s":{"type":"string"},"t":{"type":"array","minItems":1},"i":{"type":"number","minimum":0},"port":{"type":"integer"},"ip":{"type":"string"}},"required":["i"]},"limit-conn":{
 "type":"object","properties":{"conn":{"type":"integer","minimum":0},"default_conn_delay":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"burst":{"type":"integer","minimum":0},"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]}},"required":["conn","burst","default_conn_delay","key"]},"proxy-cache":{"type":"object","properties":{"cache_bypass":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"no_cache":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"hide_cache_headers":{"type":"boolean","default":false},"cache_http_status":{"default":[200,301,404],"minItems":1,"items":{"description":"http response status","minimum":200,"maximum":599,"type":"integer"},"type":"array","uniqueItems":true},"cache_method":{"default":["GET","HEAD"],"minItems":1,"items":{"description":"http method","type":"string"
 ,"enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"type":"array","uniqueItems":true},"cache_zone":{"type":"string","minLength":1},"cache_key":{"type":"array","minItems":1,"items":{"description":"a key for caching","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","type":"string"},"default":["$host","$request_uri"]}},"required":["cache_zone"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1},"endpoint":{"type":"string"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"}},"required":["endpoint","sample_ratio"]},"batch-requests":{"type":"object","additionalProperties":false}}}

Review comment:
       What is the purpose of this file? Is it automatically generated?

##########
File path: api/build.sh
##########
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+export ENV=local
+pwd=`pwd`
+
+# get dag-to-lua lib
+if [[ ! -f "dag-to-lua-1.1/lib/dag-to-lua.lua" ]]; then
+    wget https://github.com/api7/dag-to-lua/archive/v1.1.tar.gz
+    tar -zxvf v1.1.tar.gz
+fi

Review comment:
       can we move this repo dashboard?

##########
File path: api/conf/conf.json
##########
@@ -2,6 +2,14 @@
   "conf": {
     "syslog": {
       "host": "127.0.0.1"
+    },
+    "listen": {
+      "host": "127.0.0.1",
+      "port": 8080
+    },
+    "dag-lib-path": "",
+    "etcd": {
+      "endpoints": "127.0.0.1:2379"

Review comment:
       how about etcd cluster?

##########
File path: docs/deploy.zh-CN.md
##########
@@ -88,4 +76,83 @@ $ yarn build
 ```
 
 5. 如果第 4 步成功的话,那么构建后的文件在 `/dist` 目录下。
-6. 移动 `dist` 目录下的文件到 manager-api 的 `dist` 目录下,然后在浏览器中访问 `http://127.0.0.1:8080`,`8080` 是 manager-api 的默认监听端口。
+
+## 启动
+
+1. 根据您的部署环境,检查并修改 `api/conf/conf.json` 中的配置。

Review comment:
       This directory is too deep, can it be shortened later?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] LiteSun merged pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
LiteSun merged pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] nic-chen commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
nic-chen commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r517132988



##########
File path: api/build.sh
##########
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+export ENV=local
+pwd=`pwd`
+
+# get dag-to-lua lib
+if [[ ! -f "dag-to-lua-1.1/lib/dag-to-lua.lua" ]]; then
+    wget https://github.com/api7/dag-to-lua/archive/v1.1.tar.gz
+    tar -zxvf v1.1.tar.gz
+fi

Review comment:
       sorry, do you mean mv `dag-to-lua`'s code into dashboard repo ?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.56%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      535           
     Misses            ?      631           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...8e662d6](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r514136205



##########
File path: api/conf/conf.json
##########
@@ -2,6 +2,14 @@
   "conf": {
     "syslog": {
       "host": "127.0.0.1"
+    },
+    "listen": {
+      "host": "127.0.0.1",
+      "port": 8080
+    },
+    "dag-lib-path": "",
+    "etcd": {
+      "endpoints": "127.0.0.1:2379"

Review comment:
       Just added the description in deploy.md




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] nic-chen commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
nic-chen commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r517131944



##########
File path: api/build-tools/schema-sync.sh
##########
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+pwd=`pwd`
+
+version="master"
+if [[ -n $1 ]]; then
+version=$1
+fi 
+
+rm -rf ./api/build-tools/apisix/
+wget https://github.com/apache/apisix/archive/$version.zip
+
+unzip $version.zip
+mkdir -p ./api/build-tools/apisix/
+mv ./apisix-$version/apisix/* ./api/build-tools/apisix/
+rm -rf ./apisix-$version
+cd ./api/build-tools/ && lua schema-sync.lua > ${pwd}/api/conf/schema.json
+
+echo "sync success:" 
+echo "${pwd}/api/conf/schema.json"

Review comment:
       sure, I will remove them, and put them in a repo temporarily, in case someone needs to use them, until the new json schema sync is implemented
   




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...f01874c](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] nic-chen commented on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
nic-chen commented on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-724389542


   > cc @nic-chen not sure why this E2E will fail.
   
   checking


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...7e7094b](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] juzhiyuan commented on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
juzhiyuan commented on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720573168


   Just to remind, there still have some comments that waiting for @nic-chen's reply.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] moonming commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
moonming commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r514088648



##########
File path: api/build-tools/schema-sync.sh
##########
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+pwd=`pwd`
+
+version="master"
+if [[ -n $1 ]]; then
+version=$1
+fi 
+
+rm -rf ./api/build-tools/apisix/
+wget https://github.com/apache/apisix/archive/$version.zip
+
+unzip $version.zip
+mkdir -p ./api/build-tools/apisix/
+mv ./apisix-$version/apisix/* ./api/build-tools/apisix/
+rm -rf ./apisix-$version
+cd ./api/build-tools/ && lua schema-sync.lua > ${pwd}/api/conf/schema.json
+
+echo "sync success:" 
+echo "${pwd}/api/conf/schema.json"

Review comment:
       We should delete all the logic in this file, and users don't need to care about these details at all. We generate these files and put them in the code repo. @nic-chen 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] moonming commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
moonming commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r517168349



##########
File path: api/conf/schema.json
##########
@@ -1 +1 @@
-{"main":{"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"stream_route":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"properties
 ":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},
 "name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"ty
 pe":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":
 "integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minIte
 ms":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"server_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6"
 ,"type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"server IP"},"server_port":{"type":"integer","description":"server port"}}},"label_value_def":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"},"consumer":{"type":"object","additionalProperties":false,"properties":{"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"plugins":{"type":"object"},"desc":{"type":"string","maxLength":256},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z
 A-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"required":["username"]},"proto":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"required":["content"]},"version":0.5,"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"global_rule":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"plugins":{"type":"object"}},"required":["plugins"]},"ip_def":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8
 }(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"name":{"type":"string","maxLength":50},"update_time":{"type":"integer"},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","coo
 kie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0
 -9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximu
 m":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"ma
 ximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additiona
 lProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"desc":{"type":"string","maxLength":256},"plugins":{"type":"object"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"additionalProperties":false},"plugin_d
 isable_schema":{"disable":{"type":"boolean"}},"ssl":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"exptime":{"type":"integer","minimum":1588262400},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"key":{"type":"string","minLength":128,"maxLength":65536},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"create_time":{"type":"integer"},"update_time":{"type":"integer"},"status":{"type":"integer","default":1,"enum":[1,0],"description":"ssl status, 1 to enable, 0 to disable"},"validity_start":{"type":"integer"},"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"labels":{"type":"object","maxProperties":
 16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","cert"]}]},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"descripti
 on":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum
 ":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer
 ","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"
 minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nod
 es"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"route":{"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]},"properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"methods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"HTTP method"},"uniqueItems":true},"create_time":{"type":"integer"},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"name":{"type":"string","maxLength":50},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"uri":{"type":"string","minLength":1,"maxLength":4096},"priority":{"type":"integer","default":0},"remote_addrs":{"type":"array","items":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-
 9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":
 1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespa
 ce"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interv
 al":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7
 ,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":[
 "host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"service_protocol":{"enum":["grpc","http"]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","m
 inimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"plugins":{"type":"object"},"uris":{"type":"array","items":{"type":"string","description":"HTTP uri"},"uniqueItems":true},"vars":{"type":"array","items":{"type":"array","items":{"maxItems":3,"anyOf":[{"type":"string"},{"type":"number"}],"minItems":2},"description":"Nginx builtin variable name and value"}},"desc":{"type":"string","maxLength":256}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{
 "required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script","uris"]}]}},"plugins":{"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503}},"required":["rate","burst","key"]},"request-validation":{"type":"object","properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}},"anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}]},"referer-restriction":{"type":"object","additionalProperties":false,"properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"minItems":1}},"required":["whitelist"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"nu
 mber","minimum":1e-05,"maximum":1},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"endpoint":{"type":"string"}},"required":["endpoint","sample_ratio"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"algorithm":{"type":"string","enum":["HS256","HS512","RS256"],"default":"HS256"},"secret":{"type":"string"}}},"wolf-rbac":{"type":"object","properties":{"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"},"server":{"type":"string","default":"http://127.0.0.1:10080"}}},"limit-conn":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"burst":{"
 type":"integer","minimum":0},"conn":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"default_conn_delay":{"type":"number","minimum":0}},"required":["conn","burst","default_conn_delay","key"]},"prometheus":{"type":"object","additionalProperties":false},"example-plugin":{"type":"object","properties":{"port":{"type":"integer"},"i":{"type":"number","minimum":0},"s":{"type":"string"},"t":{"type":"array","minItems":1},"ip":{"type":"string"}},"required":["i"]},"tcp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"intege
 r","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"tls":{"type":"boolean","default":false},"tls_options":{"type":"string"}},"required":["host","port"]},"request-id":{"type":"object","properties":{"include_in_response":{"type":"boolean","default":true},"header_name":{"type":"string","default":"X-Request-Id"}}},"proxy-rewrite":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","pattern":"^[0-9a-zA-Z-.]+$","description":"new host for upstream"},"regex_uri":{"type":"array","maxItems":2,"items":{"type":"string","description":"regex uri"},"minItems":2,"description":"new uri that substitute from client uri for upstream, lower priority than uri property"},"headers":{"type":"object","minProperties":1,"description":"new headers for request"},"uri":{"type":"string","maxLength":4096,"minLength":1,"pattern":"^\\/.*","description":"new uri for upstream"},"scheme":{"type":"string","enum":["http","https"],"description":"new scheme for upst
 ream"}},"minProperties":1},"basic-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"echo":{"type":"object","additionalProperties":false,"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"properties":{"body":{"type":"string","description":"body to replace upstream response."},"after_body":{"type":"string","description":"body after the modification of filter phase."},"auth_value":{"type":"string","description":"auth value"},"before_body":{"type":"string","description":"body before the filter phase."},"headers":{"type":"object","minProperties":1,"description":"new headers for response"}},"minProperties":1},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_password":{"type":"string","minLength":0},"redis_host":{"type":"string","minLength":2},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"
 redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]}},"required":["redis_host"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"time_window":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","default":503,"minimum":200,"maximum":600},"policy":{"type":"string","enum":["local","redis"],"default":"local"}},"required":["count","time_window","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"openid-connect":{"type":"object","properties":{"client_id":{"type":"string"},"bearer_only":{"type":"boolean"},"discovery":{"type":"string"},"introspection_endpoint":{"type":"string"},"token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"scope":{"type":"string"},"logout_path":{"type":"string"},"client_secret":{"type":"string"},"redirect_uri":{"type":"string"},"realm":{"type":"string"},"in
 trospection_endpoint_auth_method":{"type":"string"},"timeout":{"type":"integer","minimum":1},"ssl_verify":{"type":"boolean"}},"required":["client_id","client_secret","discovery"]},"log-rotate":{"type":"object","properties":[],"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true},"rejected_code":{"type":"integer","minimum":200,"default":403}},"required":["block_rules"]},"hmac-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"udp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","mi
 nimum":1,"default":60},"name":{"type":"string","default":"udp logger"}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"properties":{"headers":{"type":"object","minProperties":1,"description":"new headers for repsonse"},"status_code":{"type":"integer","maximum":598,"minimum":200,"description":"new status code for repsonse"},"body":{"type":"string","description":"new body for repsonse"},"body_base64":{"type":"boolean","default":false,"description":"whether new body for repsonse need base64 decode before return"}},"minProperties":1},"ip-restriction":{"type":"object","oneOf":[{"title":"whitelist","additionalProperties":false,"properties":{"whitelist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:)
 {0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["whitelist"]},{"title":"blacklist","additionalProperties":false,"properties":{"blacklist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["blacklist"]}]},"skywalking":{"type":"object","required":["endpoint"],"properties":{"sample_ratio":{"type":"number","default":1,"minimum":1e-05,"maximum":1},"endpoint":{"type":"string"}},"
 service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"}},"syslog":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer"},"max_retry_times":{"type":"integer","minimum":1,"default":1},"drop_limit":{"type":"integer","default":1048576},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"timeout":{"type":"integer","minimum":1,"default":3},"name":{"type":"string","default":"sys logger"},"pool_size":{"type":"integer","minimum":5,"default":5},"retry_interval":{"type":"integer","minimum":0,"default":1},"sock_type":{"type":"string","enum":["tcp","udp"],"default":"tcp"},"tls":{"type":"boolean","default":false},"flush_limit":{"type":"integer","minimum":1,"default":4096}},"required":["host","port"]},"kafka-logger":{"type":"object","properties":{"kafka_topic":{"type":"string"},"batch_max_size":{"type":"int
 eger","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"meta_format":{"type":"string","enum":["default","origin"],"default":"default"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"name":{"type":"string","default":"kafka logger"},"buffer_duration":{"type":"integer","minimum":1,"default":60},"broker_list":{"type":"object"}},"required":["broker_list","kafka_topic","key"]},"consumer-restriction":{"type":"object","properties":{"type":{"type":"string","enum":["consumer_name","service_id"],"default":"consumer_name"},"blacklist":{"type":"array","items":{"type":"string"},"minItems":1},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","items":{"type":"string"},"minItems":1}},"oneOf":[{"required":["whitelist"]},
 {"required":["blacklist"]}]},"proxy-cache":{"type":"object","properties":{"cache_method":{"type":"array","uniqueItems":true,"default":["GET","HEAD"],"items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"http method"},"minItems":1},"cache_http_status":{"type":"array","uniqueItems":true,"default":[200,301,404],"items":{"type":"integer","maximum":599,"minimum":200,"description":"http response status"},"minItems":1},"cache_key":{"type":"array","default":["$host","$request_uri"],"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","description":"a key for caching"},"minItems":1},"cache_zone":{"type":"string","minLength":1},"no_cache":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"cache_bypass":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"hide_cache_headers":{"type":"boolean","default":false}},"requi
 red":["cache_zone"]},"serverless-post-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"fault-injection":{"type":"object","properties":{"delay":{"type":"object","properties":{"duration":{"type":"number","minimum":0}},"minProperties":1},"abort":{"type":"object","properties":{"body":{"type":"string","minLength":0},"http_status":{"type":"integer","minimum":200}},"minProperties":1}},"minProperties":1},"redirect":{"type":"object","properties":{"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2},"ret_code":{"type":"integer","minimum":200,"default":302}},"oneOf":[{"required":["uri"]},{"required":["http_to_https"]}]},"http-logger":{"type":"object","properties":{"batch_max_size":{"type":"integer","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"inclu
 de_req_body":{"type":"boolean","default":false},"concat_method":{"type":"string","enum":["json","new_line"],"default":"json"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"uri":{"type":"string"},"auth_header":{"type":"string","default":""}},"required":["uri"]},"authz-keycloak":{"type":"object","properties":{"keepalive":{"type":"boolean","default":true},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"policy_enforcement_mode":{"type":"string","enum":["ENFORCING","PERMISSIVE"],"default":"ENFORCING"},"ssl_verify":{"type":"boolean","default":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"timeout":{"type":"integer","minimum":1000,"default":3000},"audience":{"type":"st
 ring","minLength":1,"maxLength":100},"keepalive_pool":{"type":"integer","minimum":1,"default":5},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"grant_type":{"type":"string","maxLength":100,"minLength":1,"enum":["urn:ietf:params:oauth:grant-type:uma-ticket"],"default":"urn:ietf:params:oauth:grant-type:uma-ticket"}},"required":["token_endpoint"]},"serverless-pre-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"cors":{"type":"object","properties":{"allow_credential":{"type":"boolean","default":false,"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options."},"max_age":{"type":"integer","default":5,"description":"maximum number of seconds the results can be cached.-1 mean no cached,th
 e max value is depend on browser,more detail plz check MDN. default: 5."},"allow_origins":{"type":"string","default":"*","description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *."},"allow_methods":{"type":"string","default":"*","description":"you can use '*' to allow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *."},"expose_headers":{"type":"string","default":"*","description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *."},"allow_headers":{"type":"string","default":"*","description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *."}}},"batch-requests":{"typ
 e":"object","additionalProperties":false},"grpc-transcode":{"type":"object","required":["proto_id","service","method"],"properties":{"pb_option":{"type":"array","items":{"type":"string","anyOf":[{"type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"],"description":"enum as result"},{"type":"string","enum":["ienum_as_name","enum_as_value"],"description":"int64 as result"},{"type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"],"description":"default values option"},{"type":"string","enum":["enable_hooks","disable_hooks"],"description":"hooks option"}]},"minItems":1},"service":{"type":"string","description":"the grpc service name"},"method":{"type":"string","description":"the method name in the grpc service."},"deadline":{"type":"number","default":0,"description":"deadline for grpc, millisecond"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"i
 nteger","minimum":1}]}},"additionalProperties":true},"proxy-mirror":{"type":"object","required":["host"],"properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1},"node-status":{"type":"object","additionalProperties":false}}}
+{"main":{"plugin_disable_schema":{"disable":{"type":"boolean"}},"route":{"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"vars":{"type":"array","items":{"description":"Nginx builtin variable name and value","items":{"maxItems":3,"minItems":2,"anyOf":[{"type":"string"},{"type":"number"}]},"type":"array"}},"uris":{"type":"array","items":{"description":"HTTP uri","type":"string"},"uniqueItems":true},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","
 anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of no
 de","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"in
 terval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":
 "object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","defau
 lt":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"remote_addrs":{"type":"array","items":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string"
 ,"title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"uniqueItems":true},"methods":{"type":"array","items":{"description":"HTTP method","type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"uniqueItems":true},"name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"priority":{"type":"integer","default":0},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service_protocol":{"enum":["grpc","http"]},"plugins":{"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"uri":{"type":"string","minLength":1,"maxLength":4096},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":
 "^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"update_time":{"type":"integer"}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{"required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script",
 "uris"]}],"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]}},"version":0.5,"stream_route":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"server_addr":{"description":"server IP","anyOf":[{"type":"s
 tring","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"plugins":{"type":"object"},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"requi
 red":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","patt
 ern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failure
 s":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":
 1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstr
 eam_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"server_port":{"description":"server port","type":"integer"}}},"consumer":{"type":"object","properties":{"create_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"desc":{"type":"string","maxLength":256},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"plugins":{"type":"object"},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"update_time":{"type":"integer"}},"additionalPrope
 rties":false,"required":["username"]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"global_rule":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}},"additionalProperties":false,"required":["plugins"]},"ip_def":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"label_value_def"
 :{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64},"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"proto":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"additionalProperties":false,"required":["content"]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":
 "string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]
 },"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_
 statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minI
 tems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"stri
 ng","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"service":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"name":{"type":"string","maxLength":50},"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"stri
 ng","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"
 description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","pr
 operties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{
 "type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}
 ,"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"update_time":{"type":"integer"}}},"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"ssl":{"type":"object","oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","ce
 rt"]}],"additionalProperties":false,"properties":{"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"create_time":{"type":"integer"},"validity_start":{"type":"integer"},"key":{"type":"string","minLength":128,"maxLength":65536},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"status":{"description":"ssl status, 1 to enable, 0 to disable","default":1,"type":"integer","enum":[1,0]},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"typ
 e":"string","minLength":128,"maxLength":65536}},"exptime":{"type":"integer","minimum":1588262400},"update_time":{"type":"integer"}}}},"plugins":{"serverless-pre-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"proxy-mirror":{"type":"object","properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1,"required":["host"]},"serverless-post-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"algorithm":{"type":"string","default":"HS256","enum":["HS25
 6","HS512","RS256"]},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"secret":{"type":"string"}}},"tcp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":1000},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"tls_options":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"tls":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"openid-connect":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1},"client_secret":{"type":"string"},"discovery":{"type":"string"},"redirect_uri":{"type":"string"},"
 token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"logout_path":{"type":"string"},"ssl_verify":{"type":"boolean"},"realm":{"type":"string"},"scope":{"type":"string"},"bearer_only":{"type":"boolean"},"introspection_endpoint_auth_method":{"type":"string"},"introspection_endpoint":{"type":"string"},"client_id":{"type":"string"}},"required":["client_id","client_secret","discovery"]},"prometheus":{"type":"object","additionalProperties":false},"redirect":{"type":"object","oneOf":[{"required":["uri"]},{"required":["http_to_https"]}],"properties":{"ret_code":{"type":"integer","minimum":200,"default":302},"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2}}},"fault-injection":{"type":"object","minProperties":1,"properties":{"delay":{"type":"object","minProperties":1,"properties":{"duration":{"type":"number","minimum":0}}},"abort":{"type":"object","minProperties":1,"properties":{"body":{"type":"string","minLength":0},"http_status":{"type"
 :"integer","minimum":200}}}}},"echo":{"properties":{"body":{"description":"body to replace upstream response.","type":"string"},"auth_value":{"description":"auth value","type":"string"},"headers":{"description":"new headers for response","minProperties":1,"type":"object"},"before_body":{"description":"body before the filter phase.","type":"string"},"after_body":{"description":"body after the modification of filter phase.","type":"string"}},"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"type":"object","minProperties":1,"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"rejected_code":{"type":"integer","minimum":200,"default":403},"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true}},"required":["block_rules"]},"kafka-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"integer","minimum":1,"default"
 :60},"meta_format":{"type":"string","default":"default","enum":["default","origin"]},"broker_list":{"type":"object"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"kafka_topic":{"type":"string"},"retry_delay":{"type":"integer","minimum":0,"default":1},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"name":{"type":"string","default":"kafka logger"},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["broker_list","kafka_topic","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"skywalking":{"type":"object","service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"},"properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1,"default":1},"endpoint":{"type":"string"}},"required":["endpoint"]},"grpc-transcode":{"type":"object","properties":{"method":{"description":"the method name in 
 the grpc service.","type":"string"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"deadline":{"description":"deadline for grpc, millisecond","default":0,"type":"number"},"service":{"description":"the grpc service name","type":"string"},"pb_option":{"type":"array","minItems":1,"items":{"type":"string","anyOf":[{"description":"enum as result","type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"]},{"description":"int64 as result","type":"string","enum":["ienum_as_name","enum_as_value"]},{"description":"default values option","type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"]},{"description":"hooks option","type":"string","enum":["enable_hooks","disable_hooks"]}]}}},"additionalProperties":true,"required":["proto_id","service","method"]},"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote
 _addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rejected_code":{"type":"integer","minimum":200,"default":503},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0}},"required":["rate","burst","key"]},"proxy-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"scheme":{"description":"new scheme for upstream","type":"string","enum":["http","https"]},"uri":{"description":"new uri for upstream","minLength":1,"maxLength":4096,"type":"string","pattern":"^\\/.*"},"headers":{"description":"new headers for request","minProperties":1,"type":"object"},"host":{"description":"new host for upstream","pattern":"^[0-9a-zA-Z-.]+$","type":"string"},"regex_uri":{"description":"new uri that substitute from client uri for upstream, lower priority than uri property","minItems":2,"items":{"description":"regex uri","type":"string"},"type":"array","maxItems":2}}},"consumer-restriction":{"type":"object","oneOf":[{"propert
 ies":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"blacklist":{"type":"array","minItems":1,"items":{"type":"string"}},"rejected_code":{"type":"integer","minimum":200,"default":403}},"title":"blacklist","required":["blacklist"]},{"properties":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","minItems":1,"items":{"type":"string"}}},"title":"whitelist","required":["whitelist"]}]},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"redis_host":{"type":"string","minLength":2},"redis_password":{"type":"string","minLength":0}},"required":["redis_host"]},{"properties":{"redis_timeout":{"type":"int
 eger","minimum":1,"default":1000},"redis_password":{"type":"string","minLength":0},"redis_cluster_nodes":{"type":"array","minItems":2,"items":{"type":"string","minLength":2,"maxLength":100}},"policy":{"enum":["redis-cluster"]}},"required":["redis_cluster_nodes"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"count":{"type":"integer","minimum":0},"policy":{"type":"string","default":"local","enum":["local","redis","redis-cluster"]},"rejected_code":{"type":"integer","minimum":200,"maximum":600,"default":503},"time_window":{"type":"integer","minimum":0}},"required":["count","time_window","key"]},"basic-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"node-status":{"type":"object","additionalProperties":false},"http-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"int
 eger","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"concat_method":{"type":"string","default":"json","enum":["json","new_line"]},"auth_header":{"type":"string","default":""},"max_retry_count":{"type":"integer","minimum":0,"default":0},"uri":{"type":"string"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["uri"]},"wolf-rbac":{"type":"object","properties":{"server":{"type":"string","default":"http://127.0.0.1:10080"},"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"}}},"udp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"udp
  logger"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"authz-keycloak":{"type":"object","properties":{"grant_type":{"default":"urn:ietf:params:oauth:grant-type:uma-ticket","minLength":1,"maxLength":100,"type":"string","enum":["urn:ietf:params:oauth:grant-type:uma-ticket"]},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"ssl_verify":{"type":"boolean","default":true},"audience":{"type":"string","minLength":1,"maxLength":100},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"policy_enforcement_mode":{"type":"string","default":"ENFORCING","enum":["ENFORCING","PERMISSIVE"]},"keepalive":{"type":"boolean","default":true},"timeout":{"type":"integer","minimum":1000,"default":300
 0},"keepalive_pool":{"type":"integer","minimum":1,"default":5}},"required":["token_endpoint"]},"request-id":{"type":"object","properties":{"header_name":{"type":"string","default":"X-Request-Id"},"include_in_response":{"type":"boolean","default":true}}},"ip-restriction":{"type":"object","oneOf":[{"properties":{"whitelist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"whitelist","required":["whitelist"]},{"properties":{"blacklist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv
 4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"blacklist","required":["blacklist"]}]},"syslog":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"drop_limit":{"type":"integer","default":1048576},"name":{"type":"string","default":"sys logger"},"port":{"type":"integer"},"host":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"max_retry_times":{"type":"integer","minimum":1,"default":1},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"flush_limit":{"typ
 e":"integer","minimum":1,"default":4096},"retry_interval":{"type":"integer","minimum":0,"default":1},"pool_size":{"type":"integer","minimum":5,"default":5},"tls":{"type":"boolean","default":false},"sock_type":{"type":"string","default":"tcp","enum":["tcp","udp"]}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"body_base64":{"description":"whether new body for repsonse need base64 decode before return","default":false,"type":"boolean"},"headers":{"description":"new headers for repsonse","minProperties":1,"type":"object"},"status_code":{"description":"new status code for repsonse","minimum":200,"maximum":598,"type":"integer"},"body":{"description":"new body for repsonse","type":"string"}}},"referer-restriction":{"type":"object","properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}}},"additionalPro
 perties":false,"required":["whitelist"]},"request-validation":{"type":"object","anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}],"properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}}},"log-rotate":{"type":"object","additionalProperties":false,"properties":[]},"hmac-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"cors":{"type":"object","properties":{"allow_origins":{"description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *.","default":"*","type":"string"},"allow_headers":{"description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *.","default":"*","type":"string"},"allow_methods":{"description":"you can use '*' to a
 llow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *.","default":"*","type":"string"},"max_age":{"description":"maximum number of seconds the results can be cached.-1 mean no cached,the max value is depend on browser,more detail plz check MDN. default: 5.","default":5,"type":"integer"},"allow_credential":{"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options.","default":false,"type":"boolean"},"expose_headers":{"description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *.","default":"*","type":"string"}}},"example-plugin":{"type":"object","properties":{"s":{"type":"string"},"t":{"type":"array","minItems":1},"i":{"type":"number","minimum":0},"port":{"type":"integer"},"ip":{"type":"string"}},"required":["i"]},"limit-conn":{
 "type":"object","properties":{"conn":{"type":"integer","minimum":0},"default_conn_delay":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"burst":{"type":"integer","minimum":0},"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]}},"required":["conn","burst","default_conn_delay","key"]},"proxy-cache":{"type":"object","properties":{"cache_bypass":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"no_cache":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"hide_cache_headers":{"type":"boolean","default":false},"cache_http_status":{"default":[200,301,404],"minItems":1,"items":{"description":"http response status","minimum":200,"maximum":599,"type":"integer"},"type":"array","uniqueItems":true},"cache_method":{"default":["GET","HEAD"],"minItems":1,"items":{"description":"http method","type":"string"
 ,"enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"type":"array","uniqueItems":true},"cache_zone":{"type":"string","minLength":1},"cache_key":{"type":"array","minItems":1,"items":{"description":"a key for caching","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","type":"string"},"default":["$host","$request_uri"]}},"required":["cache_zone"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1},"endpoint":{"type":"string"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"}},"required":["endpoint","sample_ratio"]},"batch-requests":{"type":"object","additionalProperties":false}}}

Review comment:
       This file is all on the same line, and users cannot see the changes, which is not user-friendly. We can create an issue to track it




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...6dae80b](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.91%           
   =========================================
     Files             ?       18           
     Lines             ?     1249           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      624           
     Partials          ?       89           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...4cde6a3](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.90%           
   =========================================
     Files             ?       18           
     Lines             ?     1212           
     Branches          ?        0           
   =========================================
     Hits              ?      520           
     Misses            ?      604           
     Partials          ?       88           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...6eedfc6](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] codecov-io edited a comment on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
codecov-io edited a comment on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-720791397


   # [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=h1) Report
   > :exclamation: No coverage uploaded for pull request base (`master@a050e84`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
   > The diff coverage is `n/a`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/apisix-dashboard/pull/598/graphs/tree.svg?width=650&height=150&src=pr&token=Q1HERXN96P)](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=tree)
   
   ```diff
   @@            Coverage Diff            @@
   ##             master     #598   +/-   ##
   =========================================
     Coverage          ?   42.64%           
   =========================================
     Files             ?       18           
     Lines             ?     1257           
     Branches          ?        0           
   =========================================
     Hits              ?      536           
     Misses            ?      630           
     Partials          ?       91           
   ```
   
   
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=continue).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=footer). Last update [a050e84...59515b5](https://codecov.io/gh/apache/apisix-dashboard/pull/598?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] nic-chen commented on a change in pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
nic-chen commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r517156945



##########
File path: api/conf/conf.go
##########
@@ -42,16 +41,50 @@ const (
 )
 
 var (
-	ENV        string
-	basePath   string
-	Schema     gjson.Result
-	DagLibPath = "/go/manager-api/dag-to-lua/"
+	ENV           string
+	basePath      string
+	Schema        gjson.Result
+	DagLibPath    = "/go/manager-api/dag-to-lua/"

Review comment:
       it's a history issue. working on it.

##########
File path: api/conf/conf.go
##########
@@ -61,23 +94,23 @@ func setEnvironment() {
 		ENV = env
 	}
 
-	if env := os.Getenv("APIX_DAG_LIB_PATH"); env != "" {
-		DagLibPath = env
-	}
-
 	_, basePath, _, _ = runtime.Caller(1)
 }
 
 func configurationPath() string {
-	if ENV == EnvLOCAL {
+	if confPath := os.Getenv("APISIX_CONF_PATH"); confPath != "" {

Review comment:
       @moonming  working on it.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-dashboard] moonming commented on pull request #598: release: release 2.0-rc version.

Posted by GitBox <gi...@apache.org>.
moonming commented on pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#issuecomment-721531790


   Since there is no feedback, should we close this pr?


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org