This is an automated email from the ASF dual-hosted git repository.

spacewander pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 2a44ba61b change: move admin conf under deployment (#7823)
2a44ba61b is described below

commit 2a44ba61b25224f585dc67caed7131d248cf9792
Author: 罗泽轩 <[email protected]>
AuthorDate: Tue Sep 13 16:51:25 2022 +0800

    change: move admin conf under deployment (#7823)
---
 apisix/admin/init.lua                     |  6 +--
 apisix/admin/v3_adapter.lua               |  2 +-
 apisix/cli/ops.lua                        | 53 ++++++++++++---------
 apisix/cli/schema.lua                     | 64 ++++++++++++++++---------
 apisix/init.lua                           |  2 +-
 benchmark/run.sh                          |  5 --
 conf/config-default.yaml                  | 66 +++++++++++++-------------
 conf/config.yaml                          | 14 ++++--
 docs/en/latest/FAQ.md                     | 16 ++++---
 docs/en/latest/admin-api.md               |  2 +-
 docs/en/latest/certificate.md             | 33 ++++++-------
 docs/en/latest/deployment-modes.md        |  5 +-
 docs/en/latest/installation-guide.md      | 13 ++---
 docs/en/latest/plugin-develop.md          |  6 ---
 docs/zh/latest/FAQ.md                     | 30 ++++++------
 docs/zh/latest/admin-api.md               |  2 +-
 docs/zh/latest/certificate.md             | 33 ++++++-------
 docs/zh/latest/installation-guide.md      | 13 ++---
 docs/zh/latest/plugins/aws-lambda.md      |  2 -
 docs/zh/latest/plugins/azure-functions.md |  2 -
 t/APISIX.pm                               | 14 +++++-
 t/admin/api.t                             | 47 ++++++++++++++++--
 t/admin/filter.t                          |  9 +++-
 t/admin/plugins-reload.t                  | 38 +++++++++++----
 t/admin/plugins.t                         |  5 +-
 t/admin/response_body_format.t            |  9 +++-
 t/admin/ssl2.t                            |  2 -
 t/admin/stream-routes-disable.t           |  1 -
 t/admin/token.t                           |  7 +++
 t/cli/test_access_log.sh                  | 15 +++---
 t/cli/test_admin.sh                       | 66 ++++++++++++++------------
 t/cli/test_admin_mtls.sh                  | 18 +++----
 t/cli/test_main.sh                        | 15 +++---
 t/cli/test_makefile.sh                    |  8 ++--
 t/cli/test_snippet.sh                     |  2 -
 t/cli/test_upstream_mtls.sh               |  8 ----
 t/cli/test_validate_config.sh             |  6 ++-
 t/control/schema.t                        |  5 +-
 t/core/config-default.t                   | 16 ++++---
 t/core/config_etcd.t                      |  5 +-
 t/core/utils.t                            |  2 -
 t/deployment/conf_server.t                | 22 +++++----
 t/deployment/conf_server2.t               |  6 +--
 t/deployment/mtls.t                       |  6 +--
 t/discovery/nacos2.t                      |  1 -
 t/node/route-status.t                     |  1 -
 t/node/upstream-mtls.t                    |  1 -
 t/plugin/dubbo-proxy/route.t              |  3 --
 t/plugin/error-log-logger-clickhouse.t    | 44 ++++-------------
 t/plugin/error-log-logger-skywalking.t    | 49 +++++--------------
 t/plugin/error-log-logger.t               | 79 ++++---------------------------
 t/plugin/log-rotate.t                     |  8 +---
 t/plugin/log-rotate2.t                    |  9 +---
 t/plugin/log-rotate3.t                    |  9 ++--
 t/router/radixtree-host-uri-priority.t    |  1 -
 t/router/radixtree-host-uri.t             |  1 -
 t/router/radixtree-host-uri2.t            |  1 -
 t/router/radixtree-host-uri3.t            |  1 -
 t/router/radixtree-uri-keep-end-slash.t   |  1 -
 t/router/radixtree-uri-sanity.t           |  1 -
 t/router/radixtree-uri-with-parameter.t   |  1 -
 61 files changed, 448 insertions(+), 464 deletions(-)

diff --git a/apisix/admin/init.lua b/apisix/admin/init.lua
index 7aaf8f99f..bdf19da38 100644
--- a/apisix/admin/init.lua
+++ b/apisix/admin/init.lua
@@ -63,8 +63,8 @@ local router
 
 local function check_token(ctx)
     local local_conf = core.config.local_conf()
-    if not local_conf or not local_conf.apisix
-       or not local_conf.apisix.admin_key then
+    local admin_key = core.table.try_read_attr(local_conf, "deployment", 
"admin", "admin_key")
+    if not admin_key then
         return true
     end
 
@@ -75,7 +75,7 @@ local function check_token(ctx)
     end
 
     local admin
-    for i, row in ipairs(local_conf.apisix.admin_key) do
+    for i, row in ipairs(admin_key) do
         if req_token == row.key then
             admin = row
             break
diff --git a/apisix/admin/v3_adapter.lua b/apisix/admin/v3_adapter.lua
index 2bb03cbeb..154efe463 100644
--- a/apisix/admin/v3_adapter.lua
+++ b/apisix/admin/v3_adapter.lua
@@ -48,7 +48,7 @@ local function enable_v3()
         return false
     end
 
-    local api_ver = try_read_attr(local_conf, "apisix", "admin_api_version")
+    local api_ver = try_read_attr(local_conf, "deployment", "admin", 
"admin_api_version")
     if api_ver ~= "v3" then
         admin_api_version = "default"
         return false
diff --git a/apisix/cli/ops.lua b/apisix/cli/ops.lua
index 320efb15f..a362d111c 100644
--- a/apisix/cli/ops.lua
+++ b/apisix/cli/ops.lua
@@ -183,8 +183,10 @@ local function init(env)
 
     -- check the Admin API token
     local checked_admin_key = false
-    if yaml_conf.apisix.enable_admin and yaml_conf.apisix.allow_admin then
-        for _, allow_ip in ipairs(yaml_conf.apisix.allow_admin) do
+    local allow_admin = yaml_conf.deployment.admin and
+        yaml_conf.deployment.admin.allow_admin
+    if yaml_conf.apisix.enable_admin and allow_admin then
+        for _, allow_ip in ipairs(allow_admin) do
             if allow_ip == "127.0.0.0/24" then
                 checked_admin_key = true
             end
@@ -198,13 +200,17 @@ local function init(env)
 Please modify "admin_key" in conf/config.yaml .
 
 ]]
-        if type(yaml_conf.apisix.admin_key) ~= "table" or
-           #yaml_conf.apisix.admin_key == 0
+        local admin_key = yaml_conf.deployment.admin
+        if admin_key then
+            admin_key = admin_key.admin_key
+        end
+
+        if type(admin_key) ~= "table" or #admin_key == 0
         then
             util.die(help:format("ERROR: missing valid Admin API token."))
         end
 
-        for _, admin in ipairs(yaml_conf.apisix.admin_key) do
+        for _, admin in ipairs(admin_key) do
             if type(admin.key) == "table" then
                 admin.key = ""
             else
@@ -224,6 +230,19 @@ Please modify "admin_key" in conf/config.yaml .
         end
     end
 
+    if yaml_conf.deployment.admin then
+        local admin_api_mtls = yaml_conf.deployment.admin.admin_api_mtls
+        local https_admin = yaml_conf.deployment.admin.https_admin
+        if https_admin and not (admin_api_mtls and
+            admin_api_mtls.admin_ssl_cert and
+            admin_api_mtls.admin_ssl_cert ~= "" and
+            admin_api_mtls.admin_ssl_cert_key and
+            admin_api_mtls.admin_ssl_cert_key ~= "")
+        then
+            util.die("missing ssl cert for https admin")
+        end
+    end
+
     if yaml_conf.apisix.enable_admin and
         yaml_conf.apisix.config_center == "yaml"
     then
@@ -315,8 +334,8 @@ Please modify "admin_key" in conf/config.yaml .
     -- listen in admin use a separate port, support specific IP, compatible 
with the original style
     local admin_server_addr
     if yaml_conf.apisix.enable_admin then
-        local ip = yaml_conf.apisix.admin_listen.ip
-        local port = yaml_conf.apisix.admin_listen.port
+        local ip = yaml_conf.deployment.admin.admin_listen.ip
+        local port = yaml_conf.deployment.admin.admin_listen.port
         admin_server_addr = validate_and_get_listen_addr("admin port", 
"0.0.0.0", ip,
                                                           9180, port)
     end
@@ -464,17 +483,6 @@ Please modify "admin_key" in conf/config.yaml .
         yaml_conf.apisix.ssl.ssl_trusted_certificate = cert_path
     end
 
-    local admin_api_mtls = yaml_conf.apisix.admin_api_mtls
-    if yaml_conf.apisix.https_admin and
-       not (admin_api_mtls and
-            admin_api_mtls.admin_ssl_cert and
-            admin_api_mtls.admin_ssl_cert ~= "" and
-            admin_api_mtls.admin_ssl_cert_key and
-            admin_api_mtls.admin_ssl_cert_key ~= "")
-    then
-        util.die("missing ssl cert for https admin")
-    end
-
     -- enable ssl with place holder crt&key
     yaml_conf.apisix.ssl.ssl_cert = "cert/ssl_PLACE_HOLDER.crt"
     yaml_conf.apisix.ssl.ssl_cert_key = "cert/ssl_PLACE_HOLDER.key"
@@ -570,6 +578,11 @@ Please modify "admin_key" in conf/config.yaml .
     for k,v in pairs(yaml_conf.nginx_config) do
         sys_conf[k] = v
     end
+    if yaml_conf.deployment.admin then
+        for k,v in pairs(yaml_conf.deployment.admin) do
+            sys_conf[k] = v
+        end
+    end
     sys_conf["wasm"] = yaml_conf.wasm
 
 
@@ -588,10 +601,6 @@ Please modify "admin_key" in conf/config.yaml .
         sys_conf["worker_processes"] = "auto"
     end
 
-    if sys_conf.allow_admin and #sys_conf.allow_admin == 0 then
-        sys_conf.allow_admin = nil
-    end
-
     local dns_resolver = sys_conf["dns_resolver"]
     if not dns_resolver or #dns_resolver == 0 then
         local dns_addrs, err = local_dns_resolver("/etc/resolv.conf")
diff --git a/apisix/cli/schema.lua b/apisix/cli/schema.lua
index dbf83ef78..1a501ca32 100644
--- a/apisix/cli/schema.lua
+++ b/apisix/cli/schema.lua
@@ -65,6 +65,7 @@ local etcd_schema = {
     },
     required = {"prefix", "host"}
 }
+
 local config_schema = {
     type = "object",
     properties = {
@@ -133,19 +134,6 @@ local config_schema = {
                         }
                     }
                 },
-                https_admin = {
-                    type = "boolean",
-                },
-                admin_listen = {
-                    properties = {
-                        listen = { type = "string" },
-                        port = { type = "integer" },
-                    },
-                    default = {
-                        listen = "0.0.0.0",
-                        port = 9180,
-                    }
-                },
                 stream_proxy = {
                     type = "object",
                     properties = {
@@ -292,17 +280,51 @@ local config_schema = {
             type = "object",
             properties = {
                 role = {
-                    enum = {"traditional", "control_plane", "data_plane", 
"standalone"}
+                    enum = {"traditional", "control_plane", "data_plane", 
"standalone"},
+                    default = "traditional"
+                }
+            },
+        },
+    },
+    required = {"apisix", "deployment"},
+}
+
+local admin_schema = {
+    type = "object",
+    properties = {
+        admin_key = {
+            type = "array",
+            properties = {
+                items = {
+                    properties = {
+                        name = {type = "string"},
+                        key = {type = "string"},
+                        role = {type = "string"},
+                    }
                 }
+            }
+        },
+        admin_listen = {
+            properties = {
+                listen = { type = "string" },
+                port = { type = "integer" },
             },
-            required = {"role"},
+            default = {
+                listen = "0.0.0.0",
+                port = 9180,
+            }
+        },
+        https_admin = {
+            type = "boolean",
         },
     }
 }
+
 local deployment_schema = {
     traditional = {
         properties = {
             etcd = etcd_schema,
+            admin = admin_schema,
             role_traditional = {
                 properties = {
                     config_provider = {
@@ -402,13 +424,11 @@ function _M.validate(yaml_conf)
         end
     end
 
-    if yaml_conf.deployment then
-        local role = yaml_conf.deployment.role
-        local validator = 
jsonschema.generate_validator(deployment_schema[role])
-        local ok, err = validator(yaml_conf.deployment)
-        if not ok then
-            return false, "invalid deployment " .. role .. " configuration: " 
.. err
-        end
+    local role = yaml_conf.deployment.role
+    local validator = jsonschema.generate_validator(deployment_schema[role])
+    local ok, err = validator(yaml_conf.deployment)
+    if not ok then
+        return false, "invalid deployment " .. role .. " configuration: " .. 
err
     end
 
     return true
diff --git a/apisix/init.lua b/apisix/init.lua
index 80621432c..7f29fbc6b 100644
--- a/apisix/init.lua
+++ b/apisix/init.lua
@@ -762,7 +762,7 @@ end
 
 local function cors_admin()
     local_conf = core.config.local_conf()
-    if local_conf.apisix and not local_conf.apisix.enable_admin_cors then
+    if not core.table.try_read_attr(local_conf, "deployment", "admin", 
"enable_admin_cors") then
         return
     end
 
diff --git a/benchmark/run.sh b/benchmark/run.sh
index 570d8e8fb..f119afb84 100755
--- a/benchmark/run.sh
+++ b/benchmark/run.sh
@@ -68,11 +68,6 @@ else
 fi
 
 echo "
-apisix:
-  admin_key:
-    - name: admin
-      key: edd1c9f034335f136f87ad84b625c8f1
-      role: admin
 nginx_config:
   worker_processes: ${worker_cnt}
 " > conf/config.yaml
diff --git a/conf/config-default.yaml b/conf/config-default.yaml
index 96a0e692b..287613a57 100755
--- a/conf/config-default.yaml
+++ b/conf/config-default.yaml
@@ -29,7 +29,6 @@ apisix:
   #     port: 9082
   #     enable_http2: true
   enable_admin: true
-  enable_admin_cors: true           # Admin API support CORS response headers.
   enable_dev_mode: false            # Sets nginx worker_processes to 1 if set 
to true
   enable_reuseport: true            # Enable nginx SO_REUSEPORT switch if set 
to true.
   show_upstream_status_in_response_header: false # when true all upstream 
status write to `X-APISIX-Upstream-Status` otherwise only 5xx code
@@ -71,37 +70,6 @@ apisix:
       - name: memory_cache
         memory_size: 50m
 
-  allow_admin:                  # 
http://nginx.org/en/docs/http/ngx_http_access_module.html#allow
-    - 127.0.0.0/24              # If we don't set any IP list, then any IP 
access is allowed by default.
-    #- "::/64"
-  admin_listen:                 # use a separate port
-    ip: 0.0.0.0                 # Specific IP, if not set, the default value 
is `0.0.0.0`.
-    port: 9180                  # Specific port, which must be different from 
node_listen's port.
-
-  #https_admin: true            # enable HTTPS when use a separate port for 
Admin API.
-                                # Admin API will use conf/apisix_admin_api.crt 
and conf/apisix_admin_api.key as certificate.
-  admin_api_mtls:               # Depends on `admin_listen` and `https_admin`.
-    admin_ssl_cert: ""          # Path of your self-signed server side cert.
-    admin_ssl_cert_key: ""      # Path of your self-signed server side key.
-    admin_ssl_ca_cert: ""       # Path of your self-signed ca cert.The CA is 
used to sign all admin api callers' certificates.
-
-  admin_api_version: v3        # The version of admin api, latest version is 
v3.
-
-  # Default token when use API to call for Admin API.
-  # *NOTE*: Highly recommended to modify this value to protect APISIX's Admin 
API.
-  # Disabling this configuration item means that the Admin API does not
-  # require any authentication.
-  admin_key:
-    -
-      name: admin
-      key: edd1c9f034335f136f87ad84b625c8f1
-      role: admin                 # admin: manage all configuration data
-                                  # viewer: only can view configuration data
-    -
-      name: viewer
-      key: 4054f7cf07e344346cd3f287985e76a2
-      role: viewer
-
   delete_uri_tail_slash: false    # delete the '/' at the end of the URI
   # The URI normalization in servlet is a little different from the RFC's.
   # See 
https://github.com/jakartaee/servlet/blob/master/spec/src/main/asciidoc/servlet-spec-body.adoc#352-uri-path-canonicalization,
@@ -543,6 +511,40 @@ deployment:
   role: traditional
   role_traditional:
     config_provider: etcd
+  admin:
+    # Default token when use API to call for Admin API.
+    # *NOTE*: Highly recommended to modify this value to protect APISIX's 
Admin API.
+    # Disabling this configuration item means that the Admin API does not
+    # require any authentication.
+    admin_key:
+      -
+        name: admin
+        key: edd1c9f034335f136f87ad84b625c8f1
+        role: admin                 # admin: manage all configuration data
+                                    # viewer: only can view configuration data
+      -
+        name: viewer
+        key: 4054f7cf07e344346cd3f287985e76a2
+        role: viewer
+
+    enable_admin_cors: true         # Admin API support CORS response headers.
+    allow_admin:                    # 
http://nginx.org/en/docs/http/ngx_http_access_module.html#allow
+      - 127.0.0.0/24                # If we don't set any IP list, then any IP 
access is allowed by default.
+      #- "::/64"
+    admin_listen:                 # use a separate port
+      ip: 0.0.0.0                 # Specific IP, if not set, the default value 
is `0.0.0.0`.
+      port: 9180                  # Specific port, which must be different 
from node_listen's port.
+
+    #https_admin: true            # enable HTTPS when use a separate port for 
Admin API.
+                                  # Admin API will use 
conf/apisix_admin_api.crt and conf/apisix_admin_api.key as certificate.
+
+    admin_api_mtls:               # Depends on `admin_listen` and 
`https_admin`.
+      admin_ssl_cert: ""          # Path of your self-signed server side cert.
+      admin_ssl_cert_key: ""      # Path of your self-signed server side key.
+      admin_ssl_ca_cert: ""       # Path of your self-signed ca cert.The CA is 
used to sign all admin api callers' certificates.
+
+    admin_api_version: v3         # The version of admin api, latest version 
is v3.
+
   etcd:
     host:                           # it's possible to define multiple etcd 
hosts addresses of the same etcd cluster.
       - "http://127.0.0.1:2379";     # multiple etcd address, if your etcd 
cluster enables TLS, please use https scheme,
diff --git a/conf/config.yaml b/conf/config.yaml
index 6a5f56205..a77ce21e6 100644
--- a/conf/config.yaml
+++ b/conf/config.yaml
@@ -52,8 +52,12 @@
 #
 # This will find environment variable `ETCD_HOST` first, and if it's not exist 
it will use `localhost` as default value.
 #
-apisix:
-  admin_key:
-    - name: admin
-      key: edd1c9f034335f136f87ad84b625c8f1  # using fixed API token has 
security risk, please update it when you deploy to production environment
-      role: admin
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key:
+      - name: admin
+        key: edd1c9f034335f136f87ad84b625c8f1  # using fixed API token has 
security risk, please update it when you deploy to production environment
+        role: admin
diff --git a/docs/en/latest/FAQ.md b/docs/en/latest/FAQ.md
index 169a03ffe..8515c564e 100644
--- a/docs/en/latest/FAQ.md
+++ b/docs/en/latest/FAQ.md
@@ -365,10 +365,11 @@ You can follow the steps below to configure this:
 1. Configure different ports for Apache APISIX proxy and Admin API. Or, 
disable the Admin API.
 
 ```yaml
-apisix:
-  admin_listen: # use a separate port
-    ip: 127.0.0.1
-    port: 9180
+deployment:
+  admin:
+    admin_listen: # use a separate port
+      ip: 127.0.0.1
+      port: 9180
 ```
 
 2. Add a proxy Route for the Apache APISIX dashboard:
@@ -501,9 +502,10 @@ By default, Apache APISIX only allows IPs in the range 
`127.0.0.0/24` to access
 To allow IPs in all ranges, you can update your configuration file as show 
below and restart or reload Apache APISIX.
 
 ```yaml
-apisix:
-  allow_admin:
-    - 0.0.0.0/0
+deployment:
+  admin:
+    allow_admin:
+      - 0.0.0.0/0
 ```
 
 **Note**: This should only be used in non-production environments to allow all 
clients to access Apache APISIX and is not safe for production environments. 
Always authorize specific IP addresses or address ranges for production 
environments.
diff --git a/docs/en/latest/admin-api.md b/docs/en/latest/admin-api.md
index 87191479d..ada9b9f4a 100644
--- a/docs/en/latest/admin-api.md
+++ b/docs/en/latest/admin-api.md
@@ -25,7 +25,7 @@ The Admin API lets users control their deployed Apache APISIX 
instance. The [arc
 
 By default, the Admin API listens to port `9180` when APISIX is launched. This 
can be changed by modifying your configuration file 
([conf/config.yaml](https://github.com/apache/apisix/blob/master/conf/config.yaml)).
 
-**Note**: Mentions of `X-API-KEY` in this document refers to 
`apisix.admin_key.key`—the access token for Admin API—in your configuration 
file.
+**Note**: Mentions of `X-API-KEY` in this document refers to 
`deployment.admin.admin_key.key`—the access token for Admin API—in your 
configuration file.
 
 ## V3
 
diff --git a/docs/en/latest/certificate.md b/docs/en/latest/certificate.md
index 94e74d722..4bcfa5ae2 100644
--- a/docs/en/latest/certificate.md
+++ b/docs/en/latest/certificate.md
@@ -191,8 +191,8 @@ The following table details the configurations involved in 
this example and what
 | foo_ca.crt       | CA cert  | Issues the secondary certificate required for 
the client to communicate with the APISIX Admin API over mTLS.                  
                                               |
 | foo_client.crt   | cert     | A certificate issued by `foo_ca.crt` and used 
by the client to prove its identity when accessing the APISIX Admin API.        
                                               |
 | foo_client.key   | key      | Issued by `foo_ca.crt`, used by the client, 
the key file required to access the APISIX Admin API.                           
                                                 |
-| foo_server.crt   | cert     | Issued by `foo_ca.crt`, used by APISIX, 
corresponding to the `apisix.admin_api_mtls.admin_ssl_cert` configuration 
entry.                                                     |
-| foo_server.key   | key      | Issued by `foo_ca.crt`, used by APISIX, 
corresponding to the `apisix.admin_api_mtls.admin_ssl_cert_key` configuration 
entry.                                                 |
+| foo_server.crt   | cert     | Issued by `foo_ca.crt`, used by APISIX, 
corresponding to the `admin_api_mtls.admin_ssl_cert` configuration entry.       
                                              |
+| foo_server.key   | key      | Issued by `foo_ca.crt`, used by APISIX, 
corresponding to the `admin_api_mtls.admin_ssl_cert_key` configuration entry.   
                                              |
 | admin.apisix.dev | doname   | Common Name used in issuing `foo_server.crt` 
certificate, through which the client accesses APISIX Admin API                 
                                                |
 | bar_ca.crt       | CA cert  | Issues the secondary certificate required for 
APISIX to communicate with ETCD over mTLS.                                      
                                               |
 | bar_etcd.crt     | cert     | Issued by `bar_ca.crt` and used by ETCD, 
corresponding to the `-cert-file` option in the ETCD startup command.           
                                                    |
@@ -228,21 +228,22 @@ goreman -f Procfile-single-enable-mtls start > 
goreman.log 2>&1 &
 3. Update `config.yaml`
 
 ```yaml
-apisix:
-  admin_key:
-    - name: admin
-      key: edd1c9f034335f136f87ad84b625c8f1
-      role: admin
-  admin_listen:
-    ip: 127.0.0.1
-    port: 9180
-  https_admin: true
-
-  admin_api_mtls:
-    admin_ssl_ca_cert: /path/to/apisix.ca-bundle
-    admin_ssl_cert: /path/to/foo_server.crt
-    admin_ssl_cert_key: /path/to/foo_server.key
+deployment:
+  admin:
+    admin_key
+      - name: admin
+        key: edd1c9f034335f136f87ad84b625c8f1
+        role: admin
+    admin_listen:
+      ip: 127.0.0.1
+      port: 9180
+    https_admin: true
+    admin_api_mtls:
+      admin_ssl_ca_cert: /path/to/apisix.ca-bundle
+      admin_ssl_cert: /path/to/foo_server.crt
+      admin_ssl_cert_key: /path/to/foo_server.key
 
+apisix:
   ssl:
     ssl_trusted_certificate: /path/to/apisix.ca-bundle
 
diff --git a/docs/en/latest/deployment-modes.md 
b/docs/en/latest/deployment-modes.md
index d4180f419..645782dcd 100644
--- a/docs/en/latest/deployment-modes.md
+++ b/docs/en/latest/deployment-modes.md
@@ -49,12 +49,13 @@ An example configuration of the traditional deployment mode 
is shown below:
 apisix:
     node_listen:
         - port: 9080
-    admin_listen:
-        port: 9180
 deployment:
     role: traditional
     role_traditional:
         config_provider: etcd
+    admin:
+        admin_listen:
+            port: 9180
     etcd:
        host:
            - http://${IP}:${Port}
diff --git a/docs/en/latest/installation-guide.md 
b/docs/en/latest/installation-guide.md
index a383d2505..837a34b7f 100644
--- a/docs/en/latest/installation-guide.md
+++ b/docs/en/latest/installation-guide.md
@@ -272,12 +272,13 @@ It is recommended to modify the Admin API key to ensure 
security.
 You can update your configuration file as shown below:
 
 ```yaml title="conf/config.yaml"
-apisix:
-  admin_key
-    -
-      name: "admin"
-      key: newsupersecurekey
-      role: admin
+deployment:
+  admin:
+    admin_key
+      -
+        name: "admin"
+        key: newsupersecurekey
+        role: admin
 ```
 
 Now, to access the Admin API, you can use the new key:
diff --git a/docs/en/latest/plugin-develop.md b/docs/en/latest/plugin-develop.md
index ca1d3a23f..b47d9dfdf 100644
--- a/docs/en/latest/plugin-develop.md
+++ b/docs/en/latest/plugin-develop.md
@@ -144,12 +144,6 @@ Note: the order of the plugins is not related to the order 
of execution.
 To enable your plugin, copy this plugin list into `conf/config.yaml`, and add 
your plugin name. For instance:
 
 ```yaml
-apisix:
-  admin_key:
-    - name: "admin"
-      key: edd1c9f034335f136f87ad84b625c8f1 # using fixed API token has 
security risk, please update it when you deploy to production environment
-      role: admin
-
 plugins: # copied from config-default.yaml
   ...
   - your-plugin
diff --git a/docs/zh/latest/FAQ.md b/docs/zh/latest/FAQ.md
index 2722d7dd7..3df0c44f9 100644
--- a/docs/zh/latest/FAQ.md
+++ b/docs/zh/latest/FAQ.md
@@ -368,10 +368,11 @@ make: *** [deps] Error 1
 1. 为 Apache APISIX 代理和 Admin API 配置不同的端口,或者禁用 Admin API。
 
 ```yaml
-apisix:
-  admin_listen: # use a separate port
-    ip: 127.0.0.1
-    port: 9180
+deployment:
+  admin:
+    admin_listen: # use a separate port
+      ip: 127.0.0.1
+      port: 9180
 ```
 
 2、添加 APISIX Dashboard 的代理路由:
@@ -457,17 +458,17 @@ curl http://127.0.0.1:9080/ip -i
 
 ## Admin API 的 `X-API-KEY` 指的是什么?是否可以修改?
 
-Admin API 的 `X-API-KEY` 指的是 `./conf/config.yaml` 文件中的 
`apisix.admin_key.key`,默认值是 `edd1c9f034335f136f87ad84b625c8f1`。它是 Admin API 的访问 
token。
+Admin API 的 `X-API-KEY` 指的是 `./conf/config.yaml` 文件中的 
`deployment.admin.admin_key.key`,默认值是 `edd1c9f034335f136f87ad84b625c8f1`。它是 
Admin API 的访问 token。
 
 默认情况下,它被设置为 `edd1c9f034335f136f87ad84b625c8f1`,也可以通过修改 `./conf/conf/config` 
中的参数来修改,如下示例:
 
 ```yaml
-apisix:
-  admin_key
-    -
-      name: "admin"
-      key: newkey
-      role: admin
+deployment:
+  admin:
+    admin_key
+      - name: "admin"
+        key: newkey
+        role: admin
 ```
 
 然后访问 Admin API:
@@ -502,9 +503,10 @@ Apache APISIX 默认只允许 `127.0.0.0/24` 的 IP 段范围访问 `Admin API`
 如果你想允许所有的 IP 访问,只需在 `./conf/config.yaml` 配置文件中添加如下的配置,然后重启或重新加载 APISIX 就可以让所有 
IP 访问 `Admin API`。
 
 ```yaml
-apisix:
-  allow_admin:
-    - 0.0.0.0/0
+deployment:
+  admin:
+    allow_admin:
+      - 0.0.0.0/0
 ```
 
 **注意**:你可以在非生产环境中使用此方法,以允许所有客户端从任何地方访问 Apache APISIX 
实例,但是在生产环境中该设置并不安全。在生产环境中,请仅授权特定的 IP 地址或地址范围访问 Apache APISIX 实例。
diff --git a/docs/zh/latest/admin-api.md b/docs/zh/latest/admin-api.md
index e1454ac7e..a0dbceba2 100644
--- a/docs/zh/latest/admin-api.md
+++ b/docs/zh/latest/admin-api.md
@@ -27,7 +27,7 @@ Admin API 是为 Apache APISIX 服务的一组 API,我们可以将参数传递
 
 启动 Apache APISIX 时,默认情况下 Admin API 将监听 `9180` 端口。您可以通过修改 
[conf/config.yaml](https://github.com/apache/apisix/blob/master/conf/config.yaml)
 文件来改变默认监听的端口。
 
-在下面出现的 `X-API-KEY` 指的是 `conf/config.yaml` 文件中的 `apisix.admin_key.key`,它是 Admin 
API 的访问 token。
+在下面出现的 `X-API-KEY` 指的是 `conf/config.yaml` 文件中的 
`deployment.admin.admin_key.key`,它是 Admin API 的访问 token。
 
 ## V3
 
diff --git a/docs/zh/latest/certificate.md b/docs/zh/latest/certificate.md
index 06f7933c2..310f53890 100644
--- a/docs/zh/latest/certificate.md
+++ b/docs/zh/latest/certificate.md
@@ -188,8 +188,8 @@ APISIX 目前支持在多处设置 CA 证书,比如 [保护 Admin API](./mtls.
 | foo_ca.crt       | CA 证书  | 签发客户端与 APISIX Admin API 进行 mTLS 通信所需的次级证书。       
                                                      |
 | foo_client.crt   | 证书     | 由 `foo_ca.crt` 签发,客户端使用,访问 APISIX Admin API 
时证明自身身份的证书。                                             |
 | foo_client.key   | 密钥文件  | 由 `foo_ca.crt` 签发,客户端使用,访问 APISIX Admin API 
所需的密钥文件。                                                  |
-| foo_server.crt   | 证书     | 由 `foo_ca.crt` 签发,APISIX 使用,对应 
`apisix.admin_api_mtls.admin_ssl_cert` 配置项。                                 |
-| foo_server.key   | 密钥文件  | 由 `foo_ca.crt` 签发,APISIX 使用,对应 
`apisix.admin_api_mtls.admin_ssl_cert_key` 配置项。                             |
+| foo_server.crt   | 证书     | 由 `foo_ca.crt` 签发,APISIX 使用,对应 
`admin_api_mtls.admin_ssl_cert` 配置项。                                 |
+| foo_server.key   | 密钥文件  | 由 `foo_ca.crt` 签发,APISIX 使用,对应 
`admin_api_mtls.admin_ssl_cert_key` 配置项。                             |
 | admin.apisix.dev | 域名     | 签发 `foo_server.crt` 证书时使用的 Common 
Name,客户端通过该域名访问 APISIX Admin API                                     |
 | bar_ca.crt       | CA 证书  | 签发 APISIX 与 ETCD 进行 mTLS 通信所需的次级证书。              
                                                         |
 | bar_etcd.crt     | 证书     | 由 `bar_ca.crt` 签发,ETCD 使用,对应 ETCD 启动命令中的 
`--cert-file` 选项。                                              |
@@ -225,21 +225,22 @@ goreman -f Procfile-single-enable-mtls start > 
goreman.log 2>&1 &
 3. 更新 `config.yaml`
 
 ```yaml
-apisix:
-  admin_key:
-    - name: admin
-      key: edd1c9f034335f136f87ad84b625c8f1
-      role: admin
-  admin_listen:
-    ip: 127.0.0.1
-    port: 9180
-  https_admin: true
-
-  admin_api_mtls:
-    admin_ssl_ca_cert: /path/to/apisix.ca-bundle
-    admin_ssl_cert: /path/to/foo_server.crt
-    admin_ssl_cert_key: /path/to/foo_server.key
+deployment:
+  admin:
+    admin_key
+      - name: admin
+        key: edd1c9f034335f136f87ad84b625c8f1
+        role: admin
+    admin_listen:
+      ip: 127.0.0.1
+      port: 9180
+    https_admin: true
+    admin_api_mtls:
+      admin_ssl_ca_cert: /path/to/apisix.ca-bundle
+      admin_ssl_cert: /path/to/foo_server.crt
+      admin_ssl_cert_key: /path/to/foo_server.key
 
+apisix:
   ssl:
     ssl_trusted_certificate: /path/to/apisix.ca-bundle
 
diff --git a/docs/zh/latest/installation-guide.md 
b/docs/zh/latest/installation-guide.md
index 5b0ea80e3..2b19d1502 100644
--- a/docs/zh/latest/installation-guide.md
+++ b/docs/zh/latest/installation-guide.md
@@ -261,12 +261,13 @@ APISIX 的默认配置可以在 `./conf/config-default.yaml` 文件中看到,
 请参考如下信息更新配置文件:
 
 ```yaml title="./conf/config.yaml"
-apisix:
-  admin_key
-    -
-      name: "admin"
-      key: newsupersecurekey  # 请修改 key 的值
-      role: admin
+deployment:
+  admin:
+    admin_key
+      -
+        name: "admin"
+        key: newsupersecurekey  # 请修改 key 的值
+        role: admin
 ```
 
 更新完成后,你可以使用新的 key 访问 Admin API:
diff --git a/docs/zh/latest/plugins/aws-lambda.md 
b/docs/zh/latest/plugins/aws-lambda.md
index fb0fdb960..7398016e4 100644
--- a/docs/zh/latest/plugins/aws-lambda.md
+++ b/docs/zh/latest/plugins/aws-lambda.md
@@ -101,8 +101,6 @@ Content-Type: application/json
 
 ```yaml
 apisix:
-  admin_key:
-...
   node_listen:                      # 支持监听多个端口
     - 9080
     - port: 9081
diff --git a/docs/zh/latest/plugins/azure-functions.md 
b/docs/zh/latest/plugins/azure-functions.md
index 4664e09fa..8e1ae90d0 100644
--- a/docs/zh/latest/plugins/azure-functions.md
+++ b/docs/zh/latest/plugins/azure-functions.md
@@ -116,8 +116,6 @@ Hello, APISIX
 
 ```yaml
 apisix:
-  admin_key:
-...
   node_listen:                      # 支持监听多个端口
     - 9080
     - port: 9081
diff --git a/t/APISIX.pm b/t/APISIX.pm
index 070733c28..0e5d8b5e3 100644
--- a/t/APISIX.pm
+++ b/t/APISIX.pm
@@ -105,7 +105,6 @@ apisix:
   stream_proxy:
     tcp:
       - 9100
-  admin_key: null
   enable_resolv_search_opt: false
 _EOC_
 
@@ -838,6 +837,19 @@ _EOC_
 
     my $yaml_config = $block->yaml_config // $user_yaml_config;
 
+    my $default_deployment = <<_EOC_;
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: null
+_EOC_
+
+    if ($yaml_config !~ m/deployment:/) {
+        $yaml_config = $default_deployment . $yaml_config;
+    }
+
     if ($block->extra_yaml_config) {
         $yaml_config .= $block->extra_yaml_config;
     }
diff --git a/t/admin/api.t b/t/admin/api.t
index 71c924915..43e5ac163 100644
--- a/t/admin/api.t
+++ b/t/admin/api.t
@@ -44,6 +44,12 @@ Server: APISIX/(.*)
 
 === TEST 2: Server header for admin API without token
 --- yaml_config
+deployment:
+    admin:
+        admin_key:
+            - key: a
+              name: a
+              role: admin
 apisix:
   node_listen: 1984
   enable_server_tokens: false
@@ -55,6 +61,12 @@ Server: APISIX
 
 === TEST 3: Version header for admin API (without apikey)
 --- yaml_config
+deployment:
+    admin:
+        admin_key:
+            - key: a
+              name: a
+              role: admin
 apisix:
   admin_api_version: default
 --- error_code: 401
@@ -65,8 +77,13 @@ apisix:
 
 === TEST 4: Version header for admin API (v2)
 --- yaml_config
-apisix:
-  admin_api_version: v2 # default may change
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: ~
+    admin_api_version: v2
 --- more_headers
 X-API-KEY: edd1c9f034335f136f87ad84b625c8f1
 --- response_headers
@@ -76,9 +93,31 @@ X-API-VERSION: v2
 
 === TEST 5: Version header for admin API (v3)
 --- yaml_config
-apisix:
-  admin_api_version: v3
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: ~
+    admin_api_version: v3
 --- more_headers
 X-API-KEY: edd1c9f034335f136f87ad84b625c8f1
 --- response_headers
 X-API-VERSION: v3
+
+
+
+=== TEST 6: CORS header for admin API
+--- response_headers
+Access-Control-Allow-Origin: *
+
+
+
+=== TEST 7: CORS header disabled for admin API
+--- yaml_config
+deployment:
+    admin:
+        admin_key: ~
+        enable_admin_cors: false
+--- response_headers
+Access-Control-Allow-Origin:
diff --git a/t/admin/filter.t b/t/admin/filter.t
index 6173a8548..98844b186 100644
--- a/t/admin/filter.t
+++ b/t/admin/filter.t
@@ -25,10 +25,15 @@ add_block_preprocessor(sub {
     my ($block) = @_;
 
     my $user_yaml_config = <<_EOC_;
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: ~
+    admin_api_version: v3
 apisix:
     node_listen: 1984
-    admin_key: null
-    admin_api_version: v3
 _EOC_
     $block->set_value("yaml_config", $user_yaml_config);
 
diff --git a/t/admin/plugins-reload.t b/t/admin/plugins-reload.t
index e4841f1bf..c301acf19 100644
--- a/t/admin/plugins-reload.t
+++ b/t/admin/plugins-reload.t
@@ -95,9 +95,14 @@ location /t {
         ngx.sleep(0.5)
 
         local data = [[
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: null
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
     - jwt-auth
 stream_plugins:
@@ -133,7 +138,6 @@ filter(): 
[{"name":"jwt-auth"},{"name":"mqtt-proxy","stream":true}]
 --- yaml_config
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
     - example-plugin
 plugin_attr:
@@ -145,9 +149,14 @@ location /t {
         local core = require "apisix.core"
         ngx.sleep(0.1)
         local data = [[
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: null
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
     - example-plugin
 plugin_attr:
@@ -165,9 +174,14 @@ plugin_attr:
         ngx.sleep(0.1)
 
         local data = [[
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: null
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
     - example-plugin
 plugin_attr:
@@ -207,7 +221,6 @@ example-plugin get plugin attr val: 1
 --- yaml_config
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
   - public-api
   - prometheus
@@ -238,9 +251,14 @@ location /t {
         ngx.say(code)
 
         local data = [[
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: null
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
   - public-api
   - prometheus
@@ -275,7 +293,6 @@ done
 --- yaml_config
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
   - skywalking
 plugin_attr:
@@ -292,9 +309,14 @@ location /t {
         local t = require("lib.test_admin").test
 
         local data = [[
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: null
 apisix:
   node_listen: 1984
-  admin_key: null
 plugins:
   - prometheus
         ]]
diff --git a/t/admin/plugins.t b/t/admin/plugins.t
index cfa7173f6..2bd1a4703 100644
--- a/t/admin/plugins.t
+++ b/t/admin/plugins.t
@@ -375,10 +375,7 @@ 
qr/\{"properties":\{"password":\{"type":"string"\},"username":\{"type":"string"\
 
 
 === TEST 12: confirm the scope of plugin
---- yaml_config
-apisix:
-  node_listen: 1984
-  admin_key: null
+--- extra_yaml_config
 plugins:
   - batch-requests
   - error-log-logger
diff --git a/t/admin/response_body_format.t b/t/admin/response_body_format.t
index ae7431387..86f4e5d80 100644
--- a/t/admin/response_body_format.t
+++ b/t/admin/response_body_format.t
@@ -26,10 +26,15 @@ add_block_preprocessor(sub {
     my ($block) = @_;
 
     my $user_yaml_config = <<_EOC_;
+deployment:
+  role: traditional
+  role_traditional:
+    config_provider: etcd
+  admin:
+    admin_key: ~
+    admin_api_version: v3
 apisix:
     node_listen: 1984
-    admin_key: null
-    admin_api_version: v3
 _EOC_
     $block->set_value("yaml_config", $user_yaml_config);
 
diff --git a/t/admin/ssl2.t b/t/admin/ssl2.t
index c1e1a9e4a..da286db1a 100644
--- a/t/admin/ssl2.t
+++ b/t/admin/ssl2.t
@@ -431,7 +431,6 @@ qr/"snis":\["update1.com","update2.com"\]/
 --- yaml_config
 apisix:
     node_listen: 1984
-    admin_key: null
     ssl:
         key_encrypt_salt: "edd1c9f0985e76a2"
 --- config
@@ -469,7 +468,6 @@ false
 --- yaml_config
 apisix:
     node_listen: 1984
-    admin_key: null
     ssl:
         key_encrypt_salt: "edd1c9f0985e76a2"
 --- config
diff --git a/t/admin/stream-routes-disable.t b/t/admin/stream-routes-disable.t
index 7752663bf..7d7ffbb09 100644
--- a/t/admin/stream-routes-disable.t
+++ b/t/admin/stream-routes-disable.t
@@ -29,7 +29,6 @@ add_block_preprocessor(sub {
     my $user_yaml_config = <<_EOC_;
 apisix:
     node_listen: 1984
-    admin_key: null
 _EOC_
 
     $block->set_value("yaml_config", $user_yaml_config);
diff --git a/t/admin/token.t b/t/admin/token.t
index 22308e1c9..43cdf3605 100644
--- a/t/admin/token.t
+++ b/t/admin/token.t
@@ -27,6 +27,13 @@ add_block_preprocessor(sub {
     my ($block) = @_;
 
     my $user_yaml_config = <<_EOC_;
+deployment:
+    admin:
+        admin_key:
+            - name: admin
+              role: admin
+              key: edd1c9f034335f136f87ad84b625c8f1
+
 apisix:
   node_listen: 1984
 _EOC_
diff --git a/t/cli/test_access_log.sh b/t/cli/test_access_log.sh
index ad48dcb4c..7c40b35a3 100755
--- a/t/cli/test_access_log.sh
+++ b/t/cli/test_access_log.sh
@@ -187,13 +187,14 @@ echo "don't log uninitialized access log variable when 
the HTTP request is malfo
 # TLS upstream
 
 echo "
-apisix:
-    admin_api_mtls:
-        admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt'
-        admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key'
-    admin_listen:
-        port: 9180
-    https_admin: true
+deployment:
+    admin:
+        admin_listen:
+            port: 9180
+        https_admin: true
+        admin_api_mtls:
+            admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt'
+            admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key'
 nginx_config:
   http:
     access_log_format: '\"\$upstream_scheme://\$upstream_host\" 
\$ssl_server_name'
diff --git a/t/cli/test_admin.sh b/t/cli/test_admin.sh
index 960975417..bbca12270 100755
--- a/t/cli/test_admin.sh
+++ b/t/cli/test_admin.sh
@@ -24,13 +24,14 @@
 git checkout conf/config.yaml
 
 echo "
-apisix:
-    admin_api_mtls:
-        admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt'
-        admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key'
-    admin_listen:
-        port: 9180
-    https_admin: true
+deployment:
+    admin:
+        admin_listen:
+            port: 9180
+        https_admin: true
+        admin_api_mtls:
+            admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt'
+            admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key'
 " > conf/config.yaml
 
 make init
@@ -56,9 +57,11 @@ echo "passed: admin https enabled"
 echo '
 apisix:
   enable_admin: true
-  admin_listen:
-    ip: 127.0.0.2
-    port: 9181
+deployment:
+  admin:
+    admin_listen:
+      ip: 127.0.0.2
+      port: 9181
 ' > conf/config.yaml
 
 make init
@@ -100,9 +103,10 @@ echo "passed: rollback to the default admin config"
 # set allow_admin in conf/config.yaml
 
 echo "
-apisix:
-    allow_admin:
-        - 127.0.0.9
+deployment:
+    admin:
+        allow_admin:
+            - 127.0.0.9
 " > conf/config.yaml
 
 make init
@@ -114,8 +118,9 @@ if [ $count -eq 0 ]; then
 fi
 
 echo "
-apisix:
-    allow_admin: ~
+deployment:
+    admin:
+        allow_admin: ~
 " > conf/config.yaml
 
 make init
@@ -133,9 +138,10 @@ echo "passed: empty allow_admin in conf/config.yaml"
 git checkout conf/config.yaml
 
 echo '
-apisix:
-  allow_admin: ~
-  admin_key: ~
+deployment:
+  admin:
+    admin_key: ~
+    allow_admin: ~
 ' > conf/config.yaml
 
 make init > output.log 2>&1 | true
@@ -151,13 +157,14 @@ echo "pass: missing admin key and show ERROR message"
 # admin api, allow any IP but use default key
 
 echo '
-apisix:
-  allow_admin: ~
-  admin_key:
-    -
-      name: "admin"
-      key: edd1c9f034335f136f87ad84b625c8f1
-      role: admin
+deployment:
+  admin:
+    allow_admin: ~
+    admin_key:
+        -
+        name: "admin"
+        key: edd1c9f034335f136f87ad84b625c8f1
+        role: admin
 ' > conf/config.yaml
 
 make init > output.log 2>&1 | true
@@ -172,9 +179,10 @@ echo "pass: show WARNING message if the user used default 
token and allow any IP
 
 # admin_listen set
 echo '
-apisix:
-  admin_listen:
-    port: 9180
+deployment:
+  admin:
+    admin_listen:
+      port: 9180
 ' > conf/config.yaml
 
 rm logs/error.log
@@ -258,7 +266,7 @@ code=$(curl -v -k -i -m 20 -o /dev/null -s -w %{http_code} 
-X PUT http://127.0.0
             \"public-api\": {}
         }
     }")
-if [ ! $code -eq 201 ]; then
+if [ ! $code -lt 300 ]; then
     echo "failed: initialize node status public API failed #1"
     exit 1
 fi
diff --git a/t/cli/test_admin_mtls.sh b/t/cli/test_admin_mtls.sh
index 881530a66..7bbad286e 100755
--- a/t/cli/test_admin_mtls.sh
+++ b/t/cli/test_admin_mtls.sh
@@ -22,15 +22,15 @@
 # The 'admin.apisix.dev' is injected by ci/common.sh@set_coredns
 
 echo '
-apisix:
-    admin_listen:
-        port: 9180
-    https_admin: true
-
-    admin_api_mtls:
-        admin_ssl_cert: "../t/certs/mtls_server.crt"
-        admin_ssl_cert_key: "../t/certs/mtls_server.key"
-        admin_ssl_ca_cert: "../t/certs/mtls_ca.crt"
+deployment:
+    admin:
+        admin_listen:
+            port: 9180
+        https_admin: true
+        admin_api_mtls:
+            admin_ssl_cert: "../t/certs/mtls_server.crt"
+            admin_ssl_cert_key: "../t/certs/mtls_server.key"
+            admin_ssl_ca_cert: "../t/certs/mtls_ca.crt"
 
 ' > conf/config.yaml
 
diff --git a/t/cli/test_main.sh b/t/cli/test_main.sh
index 6a0358405..079d36578 100755
--- a/t/cli/test_main.sh
+++ b/t/cli/test_main.sh
@@ -525,13 +525,14 @@ echo "passed: worker_processes number is configurable"
 git checkout conf/config.yaml
 
 echo "
-apisix:
-    admin_api_mtls:
-        admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt'
-        admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key'
-    admin_listen:
-        port: 9180
-    https_admin: true
+deployment:
+    admin:
+        admin_listen:
+            port: 9180
+        https_admin: true
+        admin_api_mtls:
+            admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt'
+            admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key'
 " > conf/customized_config.yaml
 
 cp conf/config.yaml conf/config_original.yaml
diff --git a/t/cli/test_makefile.sh b/t/cli/test_makefile.sh
index 5b1ecd712..30a196d00 100755
--- a/t/cli/test_makefile.sh
+++ b/t/cli/test_makefile.sh
@@ -22,11 +22,13 @@
 make run
 
 echo "
+deployment:
+    admin:
+        admin_listen:
+            ip: 127.0.0.2
+            port: 9181
 apisix:
   enable_admin: true
-  admin_listen:
-    ip: 127.0.0.2
-    port: 9181
 " > conf/config.yaml
 
 make reload
diff --git a/t/cli/test_snippet.sh b/t/cli/test_snippet.sh
index ad55151f1..1b545dd9c 100755
--- a/t/cli/test_snippet.sh
+++ b/t/cli/test_snippet.sh
@@ -25,8 +25,6 @@ echo '
 apisix:
     node_listen: 9080
     enable_admin: true
-    admin_listen:
-        port: 9180
     stream_proxy:
         only: false
         tcp:
diff --git a/t/cli/test_upstream_mtls.sh b/t/cli/test_upstream_mtls.sh
index b2b53cfab..b2e437fff 100755
--- a/t/cli/test_upstream_mtls.sh
+++ b/t/cli/test_upstream_mtls.sh
@@ -28,10 +28,6 @@ exit_if_not_customed_nginx
 
 echo '
 apisix:
-  admin_key:
-    - name: admin
-      key: edd1c9f034335f136f87ad84b625c8f1
-      role: admin
   ssl:
     ssl_trusted_certificate: t/certs/apisix.crt
 nginx_config:
@@ -91,10 +87,6 @@ echo "passed: connection to upstream with mTLS success"
 # test proxy_ssl_trusted_certificate and use incorrect ca cert
 echo '
 apisix:
-  admin_key:
-    - name: admin
-      key: edd1c9f034335f136f87ad84b625c8f1
-      role: admin
   ssl:
     ssl_trusted_certificate: t/certs/apisix_ecc.crt
 nginx_config:
diff --git a/t/cli/test_validate_config.sh b/t/cli/test_validate_config.sh
index 2fe5d4066..1c00360f1 100755
--- a/t/cli/test_validate_config.sh
+++ b/t/cli/test_validate_config.sh
@@ -75,11 +75,13 @@ make stop
 echo "passed: find the certificate correctly"
 
 echo '
+deployment:
+    admin:
+        admin_listen:
+            port: 9180
 apisix:
     node_listen: 9080
     enable_admin: true
-    admin_listen:
-        port: 9180
     stream_proxy:
         tcp:
             - "localhost:9100"
diff --git a/t/control/schema.t b/t/control/schema.t
index ae9c676d7..f3e9f7d62 100644
--- a/t/control/schema.t
+++ b/t/control/schema.t
@@ -110,10 +110,7 @@ passed
 
 
 === TEST 2: confirm the scope of plugin
---- yaml_config
-apisix:
-  node_listen: 1984
-  admin_key: null
+--- extra_yaml_config
 plugins:
   - batch-requests
   - error-log-logger
diff --git a/t/core/config-default.t b/t/core/config-default.t
index 17ccedd5c..a9546c97d 100644
--- a/t/core/config-default.t
+++ b/t/core/config-default.t
@@ -32,7 +32,7 @@ __DATA__
 
             ngx.say("node_listen: ", config.apisix.node_listen)
             ngx.say("stream_proxy: ", encode_json(config.apisix.stream_proxy))
-            ngx.say("admin_key: ", encode_json(config.apisix.admin_key))
+            ngx.say("admin_key: ", 
encode_json(config.deployment.admin.admin_key))
         }
     }
 --- request
@@ -56,15 +56,16 @@ failed to parse yaml config: failed to merge, 
path[apisix->node_listen] expect:
 
 === TEST 3: use `null` means delete
 --- yaml_config
-apisix:
-  admin_key: null
+deployment:
+    admin:
+        admin_key: null
 --- config
   location /t {
     content_by_lua_block {
         local encode_json = require("toolkit.json").encode
         local config = require("apisix.core").config.local_conf()
 
-        ngx.say("admin_key: ", encode_json(config.apisix.admin_key))
+        ngx.say("admin_key: ", encode_json(config.deployment.admin.admin_key))
     }
 }
 --- request
@@ -76,15 +77,16 @@ admin_key: null
 
 === TEST 4: use `~` means delete
 --- yaml_config
-apisix:
-  admin_key: ~
+deployment:
+    admin:
+        admin_key: null
 --- config
   location /t {
     content_by_lua_block {
         local encode_json = require("toolkit.json").encode
         local config = require("apisix.core").config.local_conf()
 
-        ngx.say("admin_key: ", encode_json(config.apisix.admin_key))
+        ngx.say("admin_key: ", encode_json(config.deployment.admin.admin_key))
     }
 }
 --- request
diff --git a/t/core/config_etcd.t b/t/core/config_etcd.t
index 5c1d590a1..a117689c3 100644
--- a/t/core/config_etcd.t
+++ b/t/core/config_etcd.t
@@ -157,11 +157,12 @@ qr/(10:certificate has expired){1,}/
 --- yaml_config
 apisix:
   node_listen: 1984
-  admin_key: null
 deployment:
   role: traditional
   role_traditional:
     config_provider: etcd
+  admin:
+    admin_key: null
   etcd:
     host:
       - "https://127.0.0.1:12379";
@@ -207,6 +208,8 @@ deployment:
   role: traditional
   role_traditional:
     config_provider: etcd
+  admin:
+    admin_key: ~
   etcd:
     host:
       - "https://127.0.0.1:12379";
diff --git a/t/core/utils.t b/t/core/utils.t
index e6c4735d3..0d82c9315 100644
--- a/t/core/utils.t
+++ b/t/core/utils.t
@@ -128,8 +128,6 @@ qr/"address":.+,"name":"github.com"/
 apisix:
   node_listen: 1984
   enable_server_tokens: false
-  admin_key: null
-
 --- config
 location /t {
     content_by_lua_block {
diff --git a/t/deployment/conf_server.t b/t/deployment/conf_server.t
index cd5353e37..b440591e9 100644
--- a/t/deployment/conf_server.t
+++ b/t/deployment/conf_server.t
@@ -71,11 +71,13 @@ __DATA__
     }
 --- response_body
 prev_index updated
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
         config_provider: etcd
+    admin:
+        admin_key: ~
     etcd:
         prefix: "/apisix"
         host:
@@ -95,7 +97,7 @@ deployment:
             ngx.say(res.body.node.value)
         }
     }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -139,7 +141,7 @@ foo
             ngx.say(res.body.node.value)
         }
     }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -207,7 +209,7 @@ localhost is resolved to: 127.0.0.2
             end
         }
     }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -236,7 +238,7 @@ x.com is resolved to: 127.0.0.2
             ngx.say(res.body.node.value)
         }
     }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -281,7 +283,7 @@ server {
     }
 --- response_body
 foo
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -325,7 +327,7 @@ server {
     }
 --- response_body
 foo
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -365,7 +367,7 @@ server {
     }
 --- response_body
 foo
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -403,7 +405,7 @@ server {
     }
 --- response_body
 foo
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -434,7 +436,7 @@ Receive Host: localhost
             ngx.say(timeout)
         }
     }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
diff --git a/t/deployment/conf_server2.t b/t/deployment/conf_server2.t
index b8261c80c..02149053d 100644
--- a/t/deployment/conf_server2.t
+++ b/t/deployment/conf_server2.t
@@ -46,7 +46,7 @@ server {
         proxy_pass http://127.0.0.1:2379;
     }
 }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -89,7 +89,7 @@ server {
         proxy_pass http://127.0.0.1:2379;
     }
 }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
@@ -133,7 +133,7 @@ server {
         proxy_pass http://127.0.0.1:2379;
     }
 }
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: traditional
     role_traditional:
diff --git a/t/deployment/mtls.t b/t/deployment/mtls.t
index 8826dd2dd..a0e6cecfa 100644
--- a/t/deployment/mtls.t
+++ b/t/deployment/mtls.t
@@ -47,7 +47,7 @@ __DATA__
 curl --cert t/certs/mtls_client.crt --key t/certs/mtls_client.key -k 
https://localhost:12345/version
 --- response_body eval
 qr/"etcdserver":/
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: control_plane
     role_control_plane:
@@ -73,7 +73,7 @@ deployment:
 curl -k https://localhost:12345/version
 --- response_body eval
 qr/No required SSL certificate was sent/
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: control_plane
     role_control_plane:
@@ -99,7 +99,7 @@ deployment:
 curl --cert t/certs/apisix.crt --key t/certs/apisix.key -k 
https://localhost:12345/version
 --- response_body eval
 qr/The SSL certificate error/
---- extra_yaml_config
+--- yaml_config
 deployment:
     role: control_plane
     role_control_plane:
diff --git a/t/discovery/nacos2.t b/t/discovery/nacos2.t
index 51365c793..755ce16e0 100644
--- a/t/discovery/nacos2.t
+++ b/t/discovery/nacos2.t
@@ -223,7 +223,6 @@ done
 --- yaml_config
 apisix:
   node_listen: 1984
-  admin_key: null
 --- extra_yaml_config
 discovery:
   nacos:
diff --git a/t/node/route-status.t b/t/node/route-status.t
index 24ac4ca73..cad6a051a 100644
--- a/t/node/route-status.t
+++ b/t/node/route-status.t
@@ -27,7 +27,6 @@ apisix:
     node_listen: 1984
     router:
         http: 'radixtree_host_uri'
-    admin_key: null
 _EOC_
 
 run_tests();
diff --git a/t/node/upstream-mtls.t b/t/node/upstream-mtls.t
index eaf3fe2fd..3ee1c28cc 100644
--- a/t/node/upstream-mtls.t
+++ b/t/node/upstream-mtls.t
@@ -341,7 +341,6 @@ GET /t
 --- yaml_config
 apisix:
     node_listen: 1984
-    admin_key: null
     ssl:
         key_encrypt_salt: null
 --- config
diff --git a/t/plugin/dubbo-proxy/route.t b/t/plugin/dubbo-proxy/route.t
index da8fd5383..46cf9e834 100644
--- a/t/plugin/dubbo-proxy/route.t
+++ b/t/plugin/dubbo-proxy/route.t
@@ -162,7 +162,6 @@ dubbo success
 apisix:
     node_listen: 1984
     enable_admin: true
-    admin_key: null
 plugins:
     - key-auth
     - dubbo-proxy
@@ -230,7 +229,6 @@ passed
 apisix:
     node_listen: 1984
     enable_admin: true
-    admin_key: null
 plugins:
     - key-auth
     - dubbo-proxy
@@ -243,7 +241,6 @@ plugins:
 apisix:
     node_listen: 1984
     enable_admin: true
-    admin_key: null
 plugins:
     - key-auth
     - dubbo-proxy
diff --git a/t/plugin/error-log-logger-clickhouse.t 
b/t/plugin/error-log-logger-clickhouse.t
index 2e7c14aa7..02ad604ba 100644
--- a/t/plugin/error-log-logger-clickhouse.t
+++ b/t/plugin/error-log-logger-clickhouse.t
@@ -32,6 +32,14 @@ add_block_preprocessor(sub {
         $block->set_value("request", "GET /t");
     }
 
+    if (!defined $block->extra_yaml_config) {
+        my $extra_yaml_config = <<_EOC_;
+plugins:
+    - error-log-logger
+_EOC_
+        $block->set_value("extra_yaml_config", $extra_yaml_config);
+    }
+
     my $http_config = $block->http_config // <<_EOC_;
     server {
         listen 10420;
@@ -88,12 +96,6 @@ done
 
 
 === TEST 2: test unreachable server
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /t {
         content_by_lua_block {
@@ -128,12 +130,6 @@ clickhouse headers: x-clickhouse-database:default
 
 
 === TEST 3: put plugin metadata and log an error level message
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /t {
         content_by_lua_block {
@@ -169,12 +165,6 @@ clickhouse headers: x-clickhouse-database:default
 
 
 === TEST 4: log a warn level message
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /t {
         content_by_lua_block {
@@ -194,12 +184,6 @@ clickhouse headers: x-clickhouse-database:default
 
 
 === TEST 5: log some messages
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /t {
         content_by_lua_block {
@@ -219,12 +203,6 @@ clickhouse headers: x-clickhouse-database:default
 
 
 === TEST 6: log an info level message
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /t {
         content_by_lua_block {
@@ -240,12 +218,6 @@ this is an info message for test6
 
 
 === TEST 7: delete metadata for the plugin, recover to the default
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /t {
         content_by_lua_block {
diff --git a/t/plugin/error-log-logger-skywalking.t 
b/t/plugin/error-log-logger-skywalking.t
index 289ac369e..54354f34e 100644
--- a/t/plugin/error-log-logger-skywalking.t
+++ b/t/plugin/error-log-logger-skywalking.t
@@ -21,6 +21,19 @@ repeat_each(1);
 no_long_string();
 no_root_location();
 worker_connections(128);
+
+add_block_preprocessor(sub {
+    my ($block) = @_;
+
+    if (!defined $block->extra_yaml_config) {
+        my $extra_yaml_config = <<_EOC_;
+plugins:
+    - error-log-logger
+_EOC_
+        $block->set_value("extra_yaml_config", $extra_yaml_config);
+    }
+});
+
 run_tests;
 
 __DATA__
@@ -56,12 +69,6 @@ done
 
 
 === TEST 2: test unreachable server
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -90,12 +97,6 @@ qr/Batch Processor\[error-log-logger\] failed to process 
entries: error while se
 
 
 === TEST 3: put plugin metadata and log an error level message
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -126,12 +127,6 @@ qr/.*\[\{\"body\":\{\"text\":\{\"text\":\".*this is an 
error message for test.*\
 
 
 === TEST 4: log a warn level message
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -149,12 +144,6 @@ qr/.*\[\{\"body\":\{\"text\":\{\"text\":\".*this is a 
warning message for test.*
 
 
 === TEST 5: log some messages
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -173,12 +162,6 @@ qr/.*\[\{\"body\":\{\"text\":\{\"text\":\".*this is an 
error message for test.*\
 
 
 === TEST 6: log an info level message
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -196,12 +179,6 @@ qr/.*\[\{\"body\":\{\"text\":\{\"text\":\".*this is an 
info message for test.*\"
 
 
 === TEST 7: delete metadata for the plugin, recover to the default
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
diff --git a/t/plugin/error-log-logger.t b/t/plugin/error-log-logger.t
index 7aa37a422..451f85299 100644
--- a/t/plugin/error-log-logger.t
+++ b/t/plugin/error-log-logger.t
@@ -63,6 +63,15 @@ _EOC_
 _EOC_
 
     $block->set_value("stream_server_config", $stream_default_server);
+
+    if (!defined $block->extra_yaml_config) {
+        my $extra_yaml_config = <<_EOC_;
+plugins:
+    - error-log-logger
+_EOC_
+        $block->set_value("extra_yaml_config", $extra_yaml_config);
+    }
+
 });
 
 run_tests;
@@ -70,6 +79,7 @@ run_tests;
 __DATA__
 
 === TEST 1: not enable the plugin
+--- extra_yaml_config
 --- config
     location /tg {
         content_by_lua_block {
@@ -87,9 +97,6 @@ error-log-logger
 
 
 === TEST 2: enable the plugin, but not init the metadata
---- yaml_config
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -107,12 +114,6 @@ qr/please set the correct plugin_metadata for 
error-log-logger/
 
 
 === TEST 3: set a wrong metadata
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -145,12 +146,6 @@ qr/please set the correct plugin_metadata for 
error-log-logger/
 
 
 === TEST 4: test unreachable server
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -180,12 +175,6 @@ qr/\[Server\] receive data:.*this is a warning message for 
test./
 
 
 === TEST 5: log a warn level message
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -215,9 +204,6 @@ qr/\[Server\] receive data:.*this is a warning message for 
test./
 
 
 === TEST 6: log an error level message
---- yaml_config
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -236,9 +222,6 @@ qr/\[Server\] receive data:.*this is an error message for 
test./
 
 
 === TEST 7: log an info level message
---- yaml_config
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -257,12 +240,6 @@ qr/\[Server\] receive data:.*this is an info message for 
test./
 
 
 === TEST 8: delete metadata for the plugin, recover to the default
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -288,12 +265,6 @@ passed
 
 
 === TEST 9: want to reload the plugin by route
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -336,12 +307,6 @@ qr/please set the correct plugin_metadata for 
error-log-logger/
 
 
 === TEST 10: avoid sending stale error log
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -375,12 +340,6 @@ qr/\[Server\] receive data:.*this is an error message for 
test./
 
 
 === TEST 11: delete the route
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -406,12 +365,6 @@ passed
 
 
 === TEST 12: log a warn level message (schema compatibility testing)
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -441,9 +394,6 @@ qr/\[Server\] receive data:.*this is a warning message for 
test./
 
 
 === TEST 13: log an error level message (schema compatibility testing)
---- yaml_config
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -462,9 +412,6 @@ qr/\[Server\] receive data:.*this is an error message for 
test./
 
 
 === TEST 14: log an info level message (schema compatibility testing)
---- yaml_config
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
@@ -483,12 +430,6 @@ qr/\[Server\] receive data:.*this is an info message for 
test./
 
 
 === TEST 15: delete metadata for the plugin, recover to the default (schema 
compatibility testing)
---- yaml_config
-apisix:
-    enable_admin: true
-    admin_key: null
-plugins:
-  - error-log-logger
 --- config
     location /tg {
         content_by_lua_block {
diff --git a/t/plugin/log-rotate.t b/t/plugin/log-rotate.t
index 5e04be131..8ce51dd5d 100644
--- a/t/plugin/log-rotate.t
+++ b/t/plugin/log-rotate.t
@@ -25,11 +25,7 @@ no_root_location();
 add_block_preprocessor(sub {
     my ($block) = @_;
 
-    my $user_yaml_config = <<_EOC_;
-apisix:
-  node_listen: 1984
-  admin_key: null
-
+    my $extra_yaml_config = <<_EOC_;
 plugins:                          # plugin list
   - log-rotate
 
@@ -39,7 +35,7 @@ plugin_attr:
     max_kept: 3
 _EOC_
 
-    $block->set_value("yaml_config", $user_yaml_config);
+    $block->set_value("extra_yaml_config", $extra_yaml_config);
 
 
     if ((!defined $block->error_log) && (!defined $block->no_error_log)) {
diff --git a/t/plugin/log-rotate2.t b/t/plugin/log-rotate2.t
index 617a29b5a..faebee804 100644
--- a/t/plugin/log-rotate2.t
+++ b/t/plugin/log-rotate2.t
@@ -25,11 +25,7 @@ no_root_location();
 add_block_preprocessor(sub {
     my ($block) = @_;
 
-    if (!defined $block->yaml_config) {
-        my $yaml_config = <<_EOC_;
-apisix:
-  node_listen: 1984
-  admin_key: ~
+    my $extra_yaml_config = <<_EOC_;
 plugins:
   - log-rotate
 plugin_attr:
@@ -39,8 +35,7 @@ plugin_attr:
     enable_compression: true
 _EOC_
 
-        $block->set_value("yaml_config", $yaml_config);
-    }
+    $block->set_value("extra_yaml_config", $extra_yaml_config);
 
     if ((!defined $block->error_log) && (!defined $block->no_error_log)) {
         $block->set_value("no_error_log", "[error]");
diff --git a/t/plugin/log-rotate3.t b/t/plugin/log-rotate3.t
index bfab0f9b6..e6dbdd877 100644
--- a/t/plugin/log-rotate3.t
+++ b/t/plugin/log-rotate3.t
@@ -25,11 +25,8 @@ no_root_location();
 add_block_preprocessor(sub {
     my ($block) = @_;
 
-    if (!defined $block->yaml_config) {
-        my $yaml_config = <<_EOC_;
-apisix:
-  node_listen: 1984
-  admin_key: ~
+    if (!defined $block->extra_yaml_config) {
+        my $extra_yaml_config = <<_EOC_;
 plugins:
   - log-rotate
 plugin_attr:
@@ -40,7 +37,7 @@ plugin_attr:
     enable_compression: false
 _EOC_
 
-        $block->set_value("yaml_config", $yaml_config);
+        $block->set_value("extra_yaml_config", $extra_yaml_config);
     }
 
     if ((!defined $block->error_log) && (!defined $block->no_error_log)) {
diff --git a/t/router/radixtree-host-uri-priority.t 
b/t/router/radixtree-host-uri-priority.t
index a05b619fa..4190bb338 100644
--- a/t/router/radixtree-host-uri-priority.t
+++ b/t/router/radixtree-host-uri-priority.t
@@ -29,7 +29,6 @@ apisix:
     enable_admin: false
     router:
         http: 'radixtree_host_uri'
-    admin_key: null
 _EOC_
 
 run_tests();
diff --git a/t/router/radixtree-host-uri.t b/t/router/radixtree-host-uri.t
index 63e07d4b1..098a6c23b 100644
--- a/t/router/radixtree-host-uri.t
+++ b/t/router/radixtree-host-uri.t
@@ -27,7 +27,6 @@ apisix:
     node_listen: 1984
     router:
         http: 'radixtree_host_uri'
-    admin_key: null
 _EOC_
 
 run_tests();
diff --git a/t/router/radixtree-host-uri2.t b/t/router/radixtree-host-uri2.t
index 313bc6a14..7573bf804 100644
--- a/t/router/radixtree-host-uri2.t
+++ b/t/router/radixtree-host-uri2.t
@@ -29,7 +29,6 @@ apisix:
     enable_admin: false
     router:
         http: 'radixtree_host_uri'
-    admin_key: null
 _EOC_
 
 run_tests();
diff --git a/t/router/radixtree-host-uri3.t b/t/router/radixtree-host-uri3.t
index 9fa14c22f..2db4bb437 100644
--- a/t/router/radixtree-host-uri3.t
+++ b/t/router/radixtree-host-uri3.t
@@ -21,7 +21,6 @@ apisix:
     node_listen: 1984
     router:
         http: 'radixtree_host_uri'
-    admin_key: null
 _EOC_
 
 add_block_preprocessor(sub {
diff --git a/t/router/radixtree-uri-keep-end-slash.t 
b/t/router/radixtree-uri-keep-end-slash.t
index d51ac0755..01225e439 100644
--- a/t/router/radixtree-uri-keep-end-slash.t
+++ b/t/router/radixtree-uri-keep-end-slash.t
@@ -26,7 +26,6 @@ our $yaml_config = <<_EOC_;
 apisix:
     node_listen: 1984
     delete_uri_tail_slash: true
-    admin_key: null
 _EOC_
 
 run_tests();
diff --git a/t/router/radixtree-uri-sanity.t b/t/router/radixtree-uri-sanity.t
index d49285ff1..ac9ab5a1e 100644
--- a/t/router/radixtree-uri-sanity.t
+++ b/t/router/radixtree-uri-sanity.t
@@ -25,7 +25,6 @@ no_shuffle();
 our $servlet_yaml_config = <<_EOC_;
 apisix:
     node_listen: 1984
-    admin_key: null
     normalize_uri_like_servlet: true
 _EOC_
 
diff --git a/t/router/radixtree-uri-with-parameter.t 
b/t/router/radixtree-uri-with-parameter.t
index f591fab30..00686e996 100644
--- a/t/router/radixtree-uri-with-parameter.t
+++ b/t/router/radixtree-uri-with-parameter.t
@@ -25,7 +25,6 @@ no_shuffle();
 our $yaml_config = <<_EOC_;
 apisix:
     node_listen: 1984
-    admin_key: null
     router:
         http: 'radixtree_uri_with_parameter'
 _EOC_

Reply via email to