mirror of https://github.com/status-im/consul.git
Add some config entry docs (#5808)
* Add some config entry docs * Update website/source/docs/agent/config_entries.html.md Co-Authored-By: mkeeler <mkeeler@users.noreply.github.com> * Update website/source/docs/agent/config_entries.html.md Co-Authored-By: mkeeler <mkeeler@users.noreply.github.com> * Get rid of double negative * Some incremental updates * Update the config list docs to not point to service-default related things. * A few more doc updates to get rid of some service-defaults specific linking info in the cli docs * In progress update * Update website/source/docs/agent/config_entries.html.md Co-Authored-By: mkeeler <mkeeler@users.noreply.github.com> * Reword bootstrap section * Update example proxy-defaults config * Finish up the examples section for managing config entries with the CLI * Update website/source/docs/agent/config_entries.html.md Co-Authored-By: mkeeler <mkeeler@users.noreply.github.com> * Use $ for shell command start * Make it very clear that the normal way to manage things is via the API/CLI * Update website/source/docs/agent/options.html.md Co-Authored-By: mkeeler <mkeeler@users.noreply.github.com>
This commit is contained in:
parent
5d5a406a5f
commit
c4973a63f3
|
@ -12,8 +12,9 @@ description: |-
|
||||||
The `/config` endpoints create, update, delete and query central configuration
|
The `/config` endpoints create, update, delete and query central configuration
|
||||||
entries registered with Consul. See the
|
entries registered with Consul. See the
|
||||||
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
||||||
for more information on how to enable this functionality for centrally
|
for more information on how to enable this functionality for centrally
|
||||||
configuring services.
|
configuring services and [configuration entries docs](/docs/agent/config_entries.html) for a description
|
||||||
|
of the configuration entries content.
|
||||||
|
|
||||||
## Apply Configuration
|
## Apply Configuration
|
||||||
|
|
||||||
|
@ -46,9 +47,9 @@ The table below shows this endpoint's support for
|
||||||
the datacenter of the agent being queried. This is specified as part of the
|
the datacenter of the agent being queried. This is specified as part of the
|
||||||
URL as a query parameter.
|
URL as a query parameter.
|
||||||
|
|
||||||
- `cas` `(int: 0)` - Specifies to use a Check-And-Set operation. If the index is
|
- `cas` `(int: 0)` - Specifies to use a Check-And-Set operation. If the index is
|
||||||
0, Consul will only store the entry if it does not already exist. If the index is
|
0, Consul will only store the entry if it does not already exist. If the index is
|
||||||
non-zero, the entry is only set if the current index matches the `ModifyIndex`
|
non-zero, the entry is only set if the current index matches the `ModifyIndex`
|
||||||
of that entry.
|
of that entry.
|
||||||
|
|
||||||
### Sample Payload
|
### Sample Payload
|
||||||
|
@ -59,9 +60,6 @@ The table below shows this endpoint's support for
|
||||||
"Kind": "service-defaults",
|
"Kind": "service-defaults",
|
||||||
"Name": "web",
|
"Name": "web",
|
||||||
"Protocol": "http",
|
"Protocol": "http",
|
||||||
"Connect": {
|
|
||||||
"SidecarProxy": false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -106,10 +104,10 @@ The table below shows this endpoint's support for
|
||||||
URL as a query parameter.
|
URL as a query parameter.
|
||||||
|
|
||||||
- `kind` `(string: <required>)` - Specifies the kind of the entry to read. This
|
- `kind` `(string: <required>)` - Specifies the kind of the entry to read. This
|
||||||
is specified as part of the URL.
|
is specified as part of the URL.
|
||||||
|
|
||||||
- `name` `(string: <required>)` - Specifies the name of the entry to read. This
|
- `name` `(string: <required>)` - Specifies the name of the entry to read. This
|
||||||
is specified as part of the URL.
|
is specified as part of the URL.
|
||||||
|
|
||||||
### Sample Request
|
### Sample Request
|
||||||
|
|
||||||
|
@ -126,9 +124,6 @@ $ curl \
|
||||||
"Kind": "service-defaults",
|
"Kind": "service-defaults",
|
||||||
"Name": "web",
|
"Name": "web",
|
||||||
"Protocol": "http",
|
"Protocol": "http",
|
||||||
"Connect": {
|
|
||||||
"SidecarProxy": true
|
|
||||||
},
|
|
||||||
"CreateIndex": 15,
|
"CreateIndex": 15,
|
||||||
"ModifyIndex": 35
|
"ModifyIndex": 35
|
||||||
}
|
}
|
||||||
|
@ -166,7 +161,7 @@ The table below shows this endpoint's support for
|
||||||
URL as a query parameter.
|
URL as a query parameter.
|
||||||
|
|
||||||
- `kind` `(string: <required>)` - Specifies the kind of the entry to list. This
|
- `kind` `(string: <required>)` - Specifies the kind of the entry to list. This
|
||||||
is specified as part of the URL.
|
is specified as part of the URL.
|
||||||
|
|
||||||
### Sample Request
|
### Sample Request
|
||||||
|
|
||||||
|
@ -184,9 +179,6 @@ $ curl \
|
||||||
"Kind": "service-defaults",
|
"Kind": "service-defaults",
|
||||||
"Name": "db",
|
"Name": "db",
|
||||||
"Protocol": "tcp",
|
"Protocol": "tcp",
|
||||||
"Connect": {
|
|
||||||
"SidecarProxy": false
|
|
||||||
},
|
|
||||||
"CreateIndex": 16,
|
"CreateIndex": 16,
|
||||||
"ModifyIndex": 16
|
"ModifyIndex": 16
|
||||||
},
|
},
|
||||||
|
@ -194,9 +186,6 @@ $ curl \
|
||||||
"Kind": "service-defaults",
|
"Kind": "service-defaults",
|
||||||
"Name": "web",
|
"Name": "web",
|
||||||
"Protocol": "http",
|
"Protocol": "http",
|
||||||
"Connect": {
|
|
||||||
"SidecarProxy": true
|
|
||||||
},
|
|
||||||
"CreateIndex": 13,
|
"CreateIndex": 13,
|
||||||
"ModifyIndex": 13
|
"ModifyIndex": 13
|
||||||
}
|
}
|
||||||
|
@ -235,10 +224,10 @@ The table below shows this endpoint's support for
|
||||||
URL as a query parameter.
|
URL as a query parameter.
|
||||||
|
|
||||||
- `kind` `(string: <required>)` - Specifies the kind of the entry to delete. This
|
- `kind` `(string: <required>)` - Specifies the kind of the entry to delete. This
|
||||||
is specified as part of the URL.
|
is specified as part of the URL.
|
||||||
|
|
||||||
- `name` `(string: <required>)` - Specifies the name of the entry to delete. This
|
- `name` `(string: <required>)` - Specifies the name of the entry to delete. This
|
||||||
is specified as part of the URL.
|
is specified as part of the URL.
|
||||||
|
|
||||||
### Sample Request
|
### Sample Request
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,160 @@
|
||||||
|
---
|
||||||
|
layout: "docs"
|
||||||
|
page_title: "Configuration Entry Definitions"
|
||||||
|
sidebar_current: "docs-agent-cfg_entries"
|
||||||
|
description: |-
|
||||||
|
Consul allows storing configuration entries centrally to be used as defaults for configuring other aspects of Consul.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Configuration Entries
|
||||||
|
|
||||||
|
Configuration entries can be created to provide cluster-wide defaults for various aspects of Consul. Every configuration
|
||||||
|
entry has at least two fields: `Kind` and `Name`. Those two fields are used to uniquely identify a configuration entry.
|
||||||
|
When put into configuration files, configuration entries can be specified as HCL or JSON objects.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
Kind = "<supported kind>"
|
||||||
|
Name = "<name of entry>"
|
||||||
|
```
|
||||||
|
|
||||||
|
The two supported `Kind` configuration entries are detailed below.
|
||||||
|
|
||||||
|
## Configuration Entry Kinds
|
||||||
|
|
||||||
|
### Proxy Defaults - `proxy-defaults`
|
||||||
|
|
||||||
|
Proxy defaults allow for configuring global config defaults across all services for Connect proxy configuration. Currently,
|
||||||
|
only one global entry is supported.
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
Kind = "proxy-defaults"
|
||||||
|
Name = "global"
|
||||||
|
Config {
|
||||||
|
local_connect_timeout_ms = 1000
|
||||||
|
handshake_timeout_ms = 10000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* `Kind` - Must be set to `proxy-defaults`
|
||||||
|
|
||||||
|
* `Name` - Must be set to `global`
|
||||||
|
|
||||||
|
* `Config` - An arbitrary map of configuration values used by Connect proxies. See
|
||||||
|
|
||||||
|
#### Proxy Configuration References
|
||||||
|
|
||||||
|
* [Consul's Builtin Proxy](/docs/connect/configuration.html#built-in-proxy-options)
|
||||||
|
* [Envoy](/docs/connect/proxies/envoy.html#bootstrap-configuration)
|
||||||
|
|
||||||
|
### Service Defaults - `service-defaults`
|
||||||
|
|
||||||
|
Service defaults control default global values for a service, such as its protocol.
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
Kind = "service-defaults"
|
||||||
|
Name = "web"
|
||||||
|
Protocol = "http"
|
||||||
|
```
|
||||||
|
|
||||||
|
* `Kind` - Must be set to `service-defaults`
|
||||||
|
|
||||||
|
* `Name` - Set to the name of the service being configured.
|
||||||
|
|
||||||
|
* `Protocol` - Sets the protocol of the service. This is used by Connect proxies for things like observability features.
|
||||||
|
|
||||||
|
## Managing Configuration Entries
|
||||||
|
|
||||||
|
Configuration entries should be managed with the Consul [CLI](/docs/commands/config.html) or [API](/api/config.html). Additionally,
|
||||||
|
as a convenience for initial cluster bootstrapping, configuration entries can be specified in all of the Consul servers's
|
||||||
|
[configuration files](/docs/agent/options.html#config_entries_bootstrap)
|
||||||
|
|
||||||
|
### Managing Configuration Entries with the CLI
|
||||||
|
|
||||||
|
#### Creating or Updating a Configuration Entry
|
||||||
|
|
||||||
|
The [`consul config write`](/docs/commands/config/write.html) command is used to create and update configuration entries. This command
|
||||||
|
will load either a JSON or HCL file holding the configuration entry definition and then will push this configuration to Consul.
|
||||||
|
|
||||||
|
Example HCL Configuration File - `proxy-defaults.hcl`:
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
Kind = "proxy-defaults"
|
||||||
|
Name = "global"
|
||||||
|
Config {
|
||||||
|
local_connect_timeout_ms = 1000
|
||||||
|
handshake_timeout_ms = 10000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then to apply this configuration, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ consul config write proxy-defaults.hcl
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to make changes to a configuration entry, simple edit that file and then rerun the command.
|
||||||
|
This command will not output anything unless there is an error in applying the configuration entry.
|
||||||
|
The `write` command also supports a `-cas` option to enable performing a compare-and-swap operation to
|
||||||
|
prevent overwriting other unknown modifications.
|
||||||
|
|
||||||
|
#### Reading a Configuration Entry
|
||||||
|
|
||||||
|
The [`consul config read`](/docs/commands/config/read.html) command is used to read the current value of a configuration entry. The
|
||||||
|
configuration entry will be displayed in JSON form which is how its transmitted between the CLI client and Consul's HTTP API.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ consul config read -kind service-defaults -name web
|
||||||
|
{
|
||||||
|
"Kind": "service-defaults",
|
||||||
|
"Name": "web",
|
||||||
|
"Protocol": "http"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Listing Configuration Entries
|
||||||
|
|
||||||
|
The [`consul config list`](/docs/commands/config/list.html) command is used to list out all the configuration entries for a
|
||||||
|
given kind.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ consul config list -kind service-defaults
|
||||||
|
web
|
||||||
|
api
|
||||||
|
db
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Deleting Configuration Entries
|
||||||
|
|
||||||
|
The [`consul config delete`](/docs/commands/config/delete.html) command is used to delete an entry by specifying both its
|
||||||
|
`kind` and `name`.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ consul config delete -kind service-defaults -name web
|
||||||
|
```
|
||||||
|
|
||||||
|
This command will not output anything when the deletion is successful.
|
||||||
|
|
||||||
|
### Bootstrapping From A Configuration File
|
||||||
|
|
||||||
|
|
||||||
|
Configuration entries can be bootstrapped by adding them inline to each Consul server’s configuration file. When a server
|
||||||
|
gains leadership, it will attempt to initialize the configuration entries. If a configuration entry does not already exist
|
||||||
|
outside of the servers configuration, then it will create it. If a configuration entry does exist, that matches both `kind`
|
||||||
|
and `name`, then the server will do nothing.
|
||||||
|
|
||||||
|
|
||||||
|
## Using Configuration Entries For Service Defaults
|
||||||
|
|
||||||
|
When the agent is [configured](/docs/agent/options.html#enable_central_service_config) to enable central service configurations,
|
||||||
|
it will look for service configuration defaults that match a registering service instance. If it finds any, the agent will merge
|
||||||
|
those defaults with the service instance configuration. This allows for things like service protocol or proxy configuration to
|
||||||
|
be defined globally and inherited by any affected service registrations.
|
|
@ -821,15 +821,14 @@ default will automatically work with some tooling.
|
||||||
|
|
||||||
The following sub-keys are available:
|
The following sub-keys are available:
|
||||||
|
|
||||||
* <a name="bootstrap"></a><a href="#config_entries_bootstrap">`bootstrap`</a>
|
* <a name="config_entries_bootstrap"></a><a href="#config_entries_bootstrap">`bootstrap`</a>
|
||||||
This object allows configuring centralized config entries to be bootstrapped
|
This is a list of inlined config entries to insert into the state store when the Consul server
|
||||||
by the leader. These entries will be reloaded during an agent config reload.
|
gains leadership. This option is only applicable to server nodes. Each bootstrap
|
||||||
|
entry will be created only if it does not exist. When reloading, any new entries
|
||||||
|
that have been added to the configuration will be processed. See the
|
||||||
|
[configuration entry docs](/docs/agent/config_entries.html) for more details about the
|
||||||
|
contents of each entry.
|
||||||
|
|
||||||
The following sub-keys are available:
|
|
||||||
|
|
||||||
* <a name="proxy_defaults"></a><a href="#config_entries_bootstrap_proxy_defaults">`proxy_defaults`</a>
|
|
||||||
This object should contain a mapping of config entry names to an opaque proxy configuration mapping.
|
|
||||||
Currently the only supported name is `global`
|
|
||||||
|
|
||||||
* <a name="connect"></a><a href="#connect">`connect`</a>
|
* <a name="connect"></a><a href="#connect">`connect`</a>
|
||||||
This object allows setting options for the Connect feature.
|
This object allows setting options for the Connect feature.
|
||||||
|
@ -1120,12 +1119,10 @@ default will automatically work with some tooling.
|
||||||
be checked using the agent's credentials. This was added in Consul 1.0.1 and defaults to false.
|
be checked using the agent's credentials. This was added in Consul 1.0.1 and defaults to false.
|
||||||
|
|
||||||
* <a name="enable_central_service_config"></a><a href="#enable_central_service_config">`enable_central_service_config`</a>
|
* <a name="enable_central_service_config"></a><a href="#enable_central_service_config">`enable_central_service_config`</a>
|
||||||
When set, the Consul agent will look for any centralized service configurations that match a registering service instance.
|
When set, the Consul agent will look for any centralized service configurations that match a registering service instance.
|
||||||
If it finds any, the agent will merge the centralized defaults with the service instance configuration. This allows for
|
If it finds any, the agent will merge the centralized defaults with the service instance configuration. This allows for
|
||||||
things like service protocol or proxy configuration to be defined centrally and inherited by any
|
things like service protocol or proxy configuration to be defined centrally and inherited by any
|
||||||
affected service registrations.
|
affected service registrations.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* <a name="enable_debug"></a><a href="#enable_debug">`enable_debug`</a> When set, enables some
|
* <a name="enable_debug"></a><a href="#enable_debug">`enable_debug`</a> When set, enables some
|
||||||
additional debugging features. Currently, this is only used to access runtime profiling HTTP endpoints, which
|
additional debugging features. Currently, this is only used to access runtime profiling HTTP endpoints, which
|
||||||
|
|
|
@ -9,11 +9,12 @@ sidebar_current: "docs-commands-config"
|
||||||
Command: `consul config`
|
Command: `consul config`
|
||||||
|
|
||||||
The `config` command is used to interact with Consul's central configuration
|
The `config` command is used to interact with Consul's central configuration
|
||||||
system. It exposes commands for creating, updating, reading, and deleting
|
system. It exposes commands for creating, updating, reading, and deleting
|
||||||
different kinds of config entries. See the
|
different kinds of config entries. See the
|
||||||
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
||||||
for more information on how to enable this functionality for centrally
|
for more information on how to enable this functionality for centrally
|
||||||
configuring services.
|
configuring services and [configuration entries docs](/docs/agent/config_entries.html) for a description
|
||||||
|
of the configuration entries content.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,9 @@ sidebar_current: "docs-commands-config-delete"
|
||||||
|
|
||||||
Command: `consul config delete`
|
Command: `consul config delete`
|
||||||
|
|
||||||
The `config delete` command deletes the configuration entry
|
The `config delete` command deletes the configuration entry specified by the
|
||||||
specified by the kind and name. See the
|
kind and name. See the [configuration entries docs](/docs/agent/config_entries.html)
|
||||||
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
for more details about configuration entries.
|
||||||
for more information on how to enable this functionality for centrally
|
|
||||||
configuring services.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,8 @@ sidebar_current: "docs-commands-config-list"
|
||||||
Command: `consul config list`
|
Command: `consul config list`
|
||||||
|
|
||||||
The `config list` command lists all given config entries of the given kind.
|
The `config list` command lists all given config entries of the given kind.
|
||||||
See the
|
See the [configuration entries docs](/docs/agent/config_entries.html) for more
|
||||||
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
details about configuration entries.
|
||||||
for more information on how to enable this functionality for centrally
|
|
||||||
configuring services.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,10 @@ sidebar_current: "docs-commands-config-read"
|
||||||
|
|
||||||
Command: `consul config read`
|
Command: `consul config read`
|
||||||
|
|
||||||
The `config read` command reads the config entry specified by the given
|
The `config read` command reads the config entry specified by the given
|
||||||
kind and name and outputs its JSON representation. See the
|
kind and name and outputs its JSON representation. See the
|
||||||
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
[configuration entries docs](/docs/agent/config_entries.html) for more
|
||||||
for more information on how to enable this functionality for centrally
|
details about configuration entries.
|
||||||
configuring services.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -35,9 +34,6 @@ Usage: `consul config read [options]`
|
||||||
"Kind": "service-defaults",
|
"Kind": "service-defaults",
|
||||||
"Name": "web",
|
"Name": "web",
|
||||||
"Protocol": "http",
|
"Protocol": "http",
|
||||||
"Connect": {
|
|
||||||
"SidecarProxy": false
|
|
||||||
},
|
|
||||||
"CreateIndex": 13,
|
"CreateIndex": 13,
|
||||||
"ModifyIndex": 13
|
"ModifyIndex": 13
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,8 @@ sidebar_current: "docs-commands-config-write"
|
||||||
Command: `consul config write`
|
Command: `consul config write`
|
||||||
|
|
||||||
The `config write` command creates or updates a centralized config entry.
|
The `config write` command creates or updates a centralized config entry.
|
||||||
See the
|
See the [configuration entries docs](/docs/agent/config_entries.html) for more
|
||||||
[agent configuration](/docs/agent/options.html#enable_central_service_config)
|
details about configuration entries.
|
||||||
for more information on how to enable this functionality for centrally
|
|
||||||
configuring services.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -24,9 +22,9 @@ Usage: `consul config write [options] FILE`
|
||||||
|
|
||||||
#### Config Write Options
|
#### Config Write Options
|
||||||
|
|
||||||
* `-cas` - Specifies to use a Check-And-Set operation. If the index is
|
* `-cas` - Specifies to use a Check-And-Set operation. If the index is
|
||||||
0, Consul will only store the entry if it does not already exist. If the index is
|
0, Consul will only store the entry if it does not already exist. If the index is
|
||||||
non-zero, the entry is only set if the current index matches the `ModifyIndex`
|
non-zero, the entry is only set if the current index matches the `ModifyIndex`
|
||||||
of that entry.
|
of that entry.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
@ -47,17 +45,14 @@ supported types are `service-defaults` and `proxy-defaults`.
|
||||||
|
|
||||||
#### Service defaults
|
#### Service defaults
|
||||||
|
|
||||||
Service defaults control default global values for a service, such as the
|
Service defaults control default global values for a service, such as the
|
||||||
protocol and Connect fields.
|
protocol and Connect fields.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"Kind": "service-defaults",
|
"Kind": "service-defaults",
|
||||||
"Name": "web",
|
"Name": "web",
|
||||||
"Protocol": "http",
|
"Protocol": "http",
|
||||||
"Connect": {
|
|
||||||
"SidecarProxy": false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -408,6 +408,9 @@
|
||||||
<li<%= sidebar_current("docs-agent-config") %>>
|
<li<%= sidebar_current("docs-agent-config") %>>
|
||||||
<a href="/docs/agent/options.html">Configuration</a>
|
<a href="/docs/agent/options.html">Configuration</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li<%= sidebar_current("docs-agent-cfg_entries") %>>
|
||||||
|
<a href="/docs/agent/config_entries.html">Configuration Entries</a>
|
||||||
|
</li>
|
||||||
<li<%= sidebar_current("docs-agent-cloud-auto-join") %>>
|
<li<%= sidebar_current("docs-agent-cloud-auto-join") %>>
|
||||||
<a href="/docs/agent/cloud-auto-join.html">Cloud Auto-join</a>
|
<a href="/docs/agent/cloud-auto-join.html">Cloud Auto-join</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
Loading…
Reference in New Issue