-
Notifications
You must be signed in to change notification settings - Fork 159
Deploy + manage: self-managed ES #678
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 44 commits
Commits
Show all changes
55 commits
Select commit
Hold shift + click to select a range
d5a8901
some stuff
shainaraskas 334c967
more
shainaraskas 47056c7
more
shainaraskas d370ff1
more"
shainaraskas c79b7f5
more subs
shainaraskas 9aaa01a
so much stuff
shainaraskas 25a613e
more
shainaraskas 513a428
Merge branch 'main' into self-managed
shainaraskas 3127d42
errors batch
shainaraskas b8653f9
more errors
shainaraskas a182f40
kib
shainaraskas 90e854a
air gapped
shainaraskas a36e79e
stuff
shainaraskas 5ca3a87
Merge branch 'main' into self-managed
shainaraskas 4a5b52d
conflicts
shainaraskas aba29a1
overview
shainaraskas 4fe35e9
getting closer
shainaraskas 82d1037
more
shainaraskas 3fb382a
Merge branch 'main' into self-managed
shainaraskas ace2bcf
clean up some labels
shainaraskas 35ec379
Merge branch 'self-managed' of github.com:elastic/docs-content into s…
shainaraskas 46a4cbb
fix more annotations
shainaraskas baa6aa1
broken window
shainaraskas 4bf536f
Merge branch 'main' into self-managed
shainaraskas e5fb206
toc cleanup
shainaraskas 9c16fd2
more cleanup
shainaraskas 3c0e693
next steps
shainaraskas a8d5b23
tools + apis
shainaraskas f410023
little fix
shainaraskas 9f06678
fewer redirects
shainaraskas fa86a58
Merge branch 'main' into self-managed
shainaraskas 9840696
fix errors
shainaraskas 95d5fa5
Merge branch 'self-managed' of github.com:elastic/docs-content into s…
shainaraskas cecb26a
use snippet
shainaraskas 36d2f93
fix links"
shainaraskas b245873
more fixes
shainaraskas 9d18e87
more fix
shainaraskas f8aadbe
more
shainaraskas 3ccb9f7
more fixes
shainaraskas cd024e9
syntax fix
shainaraskas a47ae9f
Merge branch 'main' into self-managed
shainaraskas 95cc162
Update deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md
shainaraskas 1a5e88d
too many hashes
shainaraskas 09481d9
Merge branch 'self-managed' of github.com:elastic/docs-content into s…
shainaraskas db2a35b
Merge branch 'main' into self-managed
shainaraskas 089e652
Apply suggestions from code review
shainaraskas 9ef75ba
add kibana command line tools
shainaraskas 80b8390
changes related to subs=true
shainaraskas 406a737
tidy
shainaraskas a6cba55
Merge branch 'main' into self-managed
shainaraskas 8ad2631
additional connection
shainaraskas 94acbc4
Merge branch 'self-managed' of github.com:elastic/docs-content into s…
shainaraskas a2c3c24
thanks colleen
shainaraskas 3ccfdf3
better start-stop page"
shainaraskas 9ab2541
fix anchor
shainaraskas File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
If you're deploying the {{stack}} in a self-managed cluster, then install the {{stack}} products you want to use in the following order: | ||
|
||
* {{es}} | ||
* {{kib}} | ||
* [Logstash](logstash://reference/index.md) | ||
* [{{agent}}](/reference/ingestion-tools/fleet/index.md) or [Beats](asciidocalypse://docs/beats/docs/reference/index.md) | ||
* [APM](/solutions/observability/apps/application-performance-monitoring-apm.md) | ||
* [Elasticsearch Hadoop](elasticsearch-hadoop://reference/index.md) | ||
|
||
Installing in this order ensures that the components each product depends on are in place. |
3 changes: 3 additions & 0 deletions
3
deploy-manage/deploy/_snippets/stack-version-compatibility.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
When installing the {{stack}}, you must use the same version across the entire stack. For example, if you are using {{es}} {{stack-version}}, you install Beats {{stack-version}}, APM Server {{stack-version}}, Elasticsearch Hadoop {{stack-version}}, {{kib}} {{stack-version}}, and Logstash {{stack-version}}. | ||
|
||
If you’re upgrading an existing installation, see [](/deploy-manage/upgrade.md) for information about how to ensure compatibility with {{stack-version}}. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,113 @@ | ||
--- | ||
mapped_pages: | ||
- https://www.elastic.co/guide/en/elasticsearch/reference/current/dependencies-versions.html | ||
sub: | ||
stack-version: "9.0.0" | ||
applies_to: | ||
deployment: | ||
self: | ||
--- | ||
|
||
# Self-managed cluster [dependencies-versions] | ||
# Self-managed cluster | ||
|
||
See [Elastic Stack Third-party Dependencices](https://artifacts.elastic.co/reports/dependencies/dependencies-current.html) for the complete list of dependencies for {{es}}. | ||
If you want to install Elastic on your own premises without the assistance of an [orchestrator](/deploy-manage/deploy.md#about-orchestration), then you can deploy a self-managed cluster. If you deploy a self-managed cluster, then you have complete control and responsibility over every aspect of your Elastic deployment. | ||
|
||
To quickly set up {{es}} and {{kib}} in Docker for local development or testing, jump to [](/deploy-manage/deploy/self-managed/local-development-installation-quickstart.md). | ||
|
||
:::{admonition} Simplify the deployment process | ||
Self-managed clusters are useful for local development, and for exploring Elastic features. However, Elastic offer several deployment options that can simplify the process of deploying and managing multi-node deployments, especially in production. They also allow you to deploy and manage multiple deployments from a single surface. | ||
|
||
Managed by Elastic: | ||
* [{{serverless-full}}](/deploy-manage/deploy/elastic-cloud/serverless.md) | ||
* [{{ech}}](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md) | ||
|
||
Self-hosted options: | ||
* [{{eck}}](/deploy-manage/deploy/cloud-on-k8s.md) | ||
* [{{ece}}](/deploy-manage/deploy/cloud-enterprise.md) | ||
|
||
For a comparison of these deployment options, refer to [Choosing your deployment type](/deploy-manage/deploy.md#choosing-your-deployment-type) and [](/deploy-manage/deploy/deployment-comparison.md). | ||
::: | ||
|
||
## Section overview | ||
|
||
This section focuses on deploying {{es}} and {{kib}} without an orchestrator. | ||
|
||
Depending on your use case, you might need to deploy other components, such as APM, Fleet, or Logstash. Deploying those components is not covered in this section. [Learn more about optional components](/get-started/the-stack.md). | ||
|
||
This section covers the following tasks: | ||
|
||
### Deploying Elasticsearch | ||
|
||
Learn how to install and configure {{es}}. {{es}} is the distributed search and analytics engine, scalable data store, and vector database at the heart of all Elastic solutions. | ||
|
||
* [](/deploy-manage/deploy/self-managed/installing-elasticsearch.md) | ||
* [](/deploy-manage/deploy/self-managed/important-system-configuration.md): Prepare your environment for an {{es}} installation. | ||
* [](/deploy-manage/deploy/self-managed/installing-elasticsearch.md#installation-methods): Install and run {{es}} using one of our install packages or container images. | ||
* [](/deploy-manage/deploy/self-managed/local-development-installation-quickstart.md): Quickly set up {{es}} and {{kib}} in Docker for local development or testing. | ||
* [](/deploy-manage/deploy/self-managed/configure-elasticsearch.md): Learn how to make configuration changes to {{es}} | ||
* [](/deploy-manage/deploy/self-managed/important-settings-configuration.md): Learn about key settings required for production environments. | ||
* [](/deploy-manage/deploy/self-managed/plugins.md): Learn about how to extend {{es}} functionality with plugins. | ||
|
||
:::{note} | ||
For a complete list of settings that you can apply to your {{es}} cluster, refer to the [Elasticsearch configuration reference](elasticsearch://reference/elasticsearch/configuration-reference/index.md). | ||
::: | ||
|
||
### Deploying Kibana | ||
|
||
After you deploy {{es}}, you can install {{kib}}. {{kib}} provides the user interface for all Elastic solutions. It’s a powerful tool for visualizing and analyzing your data, and for managing and monitoring the {{stack}}. Although {{kib}} is not required to use {{es}}, it's required for most use cases. | ||
shainaraskas marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
* [](/deploy-manage/deploy/self-managed/install-kibana.md): Install {{kib}} using one of our install packages or container images, and enroll {{kib}} with your {{es}} cluster. | ||
* [](/deploy-manage/deploy/self-managed/configure-kibana.md): Learn how to make configuration changes to {{kib}}. | ||
* [](/deploy-manage/deploy/self-managed/access-kibana.md): Learn how to access {{kib}} using a web browser. | ||
|
||
### Installing in air gapped environments | ||
|
||
Some components of the {{stack}} require additional configuration and local dependencies in order to deploy in environments without internet access. | ||
|
||
Refer to [](/deploy-manage/deploy/self-managed/air-gapped-install.md) to learn how to install {{es}}, {{kib}}, and optional components in an environment without internet access. | ||
|
||
### Tools and APIs | ||
|
||
Review a list of all of the resources that you can use to interact with your self-managed cluster, including tools, APIs, client libraries, and more. | ||
|
||
[](/deploy-manage/deploy/self-managed/tools-apis.md). | ||
|
||
## Other important sections | ||
|
||
Review these other sections for critical information about securing and managing your self-managed cluster. | ||
|
||
### Secure and control access | ||
|
||
Learn how to secure your Elastic environment to restrict access to only authorized parties, and allow communication between your environment and external parties. | ||
|
||
* [](/deploy-manage/security.md): Learn about security features that prevent bad actors from tampering with your data, and encrypt communications to, from, and within your cluster. | ||
* [](/deploy-manage/users-roles/cluster-or-deployment-auth.md): Set up authentication and authorization for your cluster, and learn about the underlying security technologies that {{es}} uses to authenticate and authorize requests internally and across services. | ||
shainaraskas marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
* [](/deploy-manage/manage-spaces.md): Learn how to organize content in {{kib}}, and restrict access to this content to specific users. | ||
* [](/deploy-manage/api-keys.md): Authenticate and authorize programmatic access to your deployments and {{es}} resources. | ||
* [](/deploy-manage/manage-connectors.md): Manage connection information between Elastic and third-party systems. | ||
* [](/deploy-manage/remote-clusters/remote-clusters-self-managed.md): Enable communication between {{es}} clusters to support [cross-cluster replication](/deploy-manage/tools/cross-cluster-replication.md) and [cross-cluster search](/solutions/search/cross-cluster-search.md). | ||
|
||
### Administer and maintain | ||
|
||
Monitor the performance of your Elastic environment, administer your license, set up backup and resilience tools, and maintain the health of your environment. | ||
|
||
* [](/deploy-manage/tools.md): Learn about the tools available to safeguard data, ensure continuous availability, and maintain resilience in your {{es}} environment. | ||
* [](/deploy-manage/monitor.md): View health and performance data for Elastic components, and receive recommendations and insights. | ||
* [](/deploy-manage/license.md): Learn how to manage your Elastic license. | ||
* [](/deploy-manage/maintenance/start-stop-services.md): Learn how to isolate or deactivate parts of your Elastic environment to perform maintenance, or restart parts of Elastic. | ||
* [](/deploy-manage/maintenance/add-and-remove-elasticsearch-nodes.md): Learn how to add nodes to a cluster or remove them from a cluster to change the size and capacity of {{es}}. | ||
|
||
### Upgrade | ||
|
||
You can [upgrade your Elastic environment](/deploy-manage/upgrade.md) to gain access to the latest features. | ||
|
||
### Design guidance | ||
|
||
Learn how to design a production-ready Elastic environment. | ||
|
||
* [](/deploy-manage/production-guidance.md): Review tips and guidance that you can use to design a production environment that matches your workloads, policies, and deployment needs. | ||
* [](/deploy-manage/reference-architectures.md): Explore blueprints for deploying clusters tailored to different use cases. | ||
|
||
### Architectural information | ||
|
||
In the [](/deploy-manage/distributed-architecture.md) section, learn about the architecture of {{es}} and {{kib}}, and how Elastic stores and retrieves data and executes tasks in clusters with multiple nodes. |
12 changes: 12 additions & 0 deletions
12
deploy-manage/deploy/self-managed/_snippets/auto-security-config.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
When you start {{es}} for the first time, the following security configuration occurs automatically: | ||
|
||
* [Certificates and keys](/deploy-manage/security/security-certificates-keys.md#stack-security-certificates) for TLS are generated for the transport and HTTP layers. | ||
* The TLS configuration settings are written to `elasticsearch.yml`. | ||
* A password is generated for the `elastic` user. | ||
* An enrollment token is generated for {{kib}}, which is valid for 30 minutes. | ||
|
||
You can then start {{kib}} and enter the enrollment token. This token automatically applies the security settings from your {{es}} cluster, authenticates to {{es}} with the built-in `kibana` service account, and writes the security configuration to `kibana.yml`. | ||
|
||
::::{note} | ||
There are [some cases](/deploy-manage/security/security-certificates-keys.md#stack-skip-auto-configuration) where security can’t be configured automatically because the node startup process detects that the node is already part of a cluster, or that security is already configured or explicitly disabled. | ||
:::: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
If your library doesn’t support a method of validating the fingerprint, the auto-generated CA certificate is created in the following directory on each {{es}} node: | ||
|
||
```sh | ||
{{es-conf}}{{slash}}certs{{slash}}http_ca.crt | ||
``` | ||
|
||
Copy the `http_ca.crt` file to your machine and configure your client to use this certificate to establish trust when it connects to {{es}}. |
14 changes: 14 additions & 0 deletions
14
deploy-manage/deploy/self-managed/_snippets/ca-fingerprint.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
Copy the fingerprint value that’s output to your terminal when {{es}} starts, and configure your client to use this fingerprint to establish trust when it connects to {{es}}. | ||
|
||
If the auto-configuration process already completed, you can still obtain the fingerprint of the security certificate by running the following command. The path is to the auto-generated CA certificate for the HTTP layer. | ||
|
||
```sh | ||
openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt | ||
``` | ||
|
||
The command returns the security certificate, including the fingerprint. The `issuer` should be `{{es}} security auto-configuration HTTP CA`. | ||
|
||
```sh | ||
issuer= /CN={{es}} security auto-configuration HTTP CA | ||
SHA256 Fingerprint=<fingerprint> | ||
``` |
32 changes: 32 additions & 0 deletions
32
deploy-manage/deploy/self-managed/_snippets/check-es-running.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
You can test that your {{es}} node is running by sending an HTTPS request to port `9200` on `localhost`: | ||
|
||
```sh | ||
curl --cacert {{es-conf}}{{slash}}certs{{slash}}http_ca.crt {{escape}} <1> | ||
-u elastic:$ELASTIC_PASSWORD https://localhost:9200 <2> | ||
``` | ||
1. `--cacert`: Path to the generated `http_ca.crt` certificate for the HTTP layer. | ||
2. Ensure that you use `https` in your call, or the request will fail. | ||
|
||
|
||
|
||
The call returns a response like this: | ||
|
||
```js | ||
{ | ||
"name" : "Cp8oag6", | ||
"cluster_name" : "elasticsearch", | ||
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA", | ||
"version" : { | ||
"number" : "9.0.0-SNAPSHOT", | ||
"build_type" : "tar", | ||
"build_hash" : "f27399d", | ||
"build_flavor" : "default", | ||
"build_date" : "2016-03-30T09:51:41.449Z", | ||
"build_snapshot" : false, | ||
"lucene_version" : "10.0.0", | ||
"minimum_wire_compatibility_version" : "1.2.3", | ||
"minimum_index_compatibility_version" : "1.2.3" | ||
}, | ||
"tagline" : "You Know, for Search" | ||
} | ||
``` |
21 changes: 21 additions & 0 deletions
21
deploy-manage/deploy/self-managed/_snippets/cmd-line-config.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
{{es}} loads its configuration from the following location by default: | ||
|
||
``` | ||
{{es-conf}}{{slash}}elasticsearch.yml | ||
``` | ||
shainaraskas marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
The format of this config file is explained in [](/deploy-manage/deploy/self-managed/configure-elasticsearch.md). | ||
|
||
Any settings that can be specified in the config file can also be specified on the command line, using the `-E` syntax as follows: | ||
|
||
```sh | ||
.\bin\elasticsearch.bat -Ecluster.name=my_cluster -Enode.name=node_1 | ||
``` | ||
shainaraskas marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
:::{note} | ||
Values that contain spaces must be surrounded with quotes. For instance `-Epath.logs="C:\My Logs\logs"`. | ||
::: | ||
|
||
:::{tip} | ||
Typically, any cluster-wide settings (like `cluster.name`) should be added to the `elasticsearch.yml` config file, while any node-specific settings such as `node.name` could be specified on the command line. | ||
:::: |
12 changes: 12 additions & 0 deletions
12
deploy-manage/deploy/self-managed/_snippets/connect-clients.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
% This file is reused in each of the installation pages. Ensure that any changes | ||
% you make to this file are applicable across all installation environments. | ||
|
||
When you start {{es}} for the first time, TLS is configured automatically for the HTTP layer. A CA certificate is generated and stored on disk at: | ||
|
||
```sh | ||
{{es-conf}}{{slash}}certs{{slash}}http_ca.crt | ||
``` | ||
|
||
The hex-encoded SHA-256 fingerprint of this certificate is also output to the terminal. Any clients that connect to {{es}}, such as the [{{es}} Clients](https://www.elastic.co/guide/en/elasticsearch/client/index.html), {{beats}}, standalone {{agent}}s, and {{ls}} must validate that they trust the certificate that {{es}} uses for HTTPS. {{fleet-server}} and {{fleet}}-managed {{agent}}s are automatically configured to trust the CA certificate. Other clients can establish trust by using either the fingerprint of the CA certificate or the CA certificate itself. | ||
|
||
If the auto-configuration process already completed, you can still obtain the fingerprint of the security certificate. You can also copy the CA certificate to your machine and configure your client to use it. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
In production, we recommend you run {{es}} on a dedicated host or as a primary service. Several {{es}} features, such as automatic JVM heap sizing, assume that {{es}} is the only resource-intensive application on the host or container. For example, you might run {{metricbeat}} alongside {{es}} for cluster statistics, but a resource-heavy {{ls}} deployment should be on its own host. |
9 changes: 9 additions & 0 deletions
9
deploy-manage/deploy/self-managed/_snippets/enable-auto-indices.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Some features automatically create indices within {{es}}. By default, {{es}} is configured to allow automatic index creation, and no additional steps are required. However, if you have disabled automatic index creation in {{es}}, you must configure [`action.auto_create_index`](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-create) in `elasticsearch.yml` to allow features to create the following indices: | ||
shainaraskas marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
```yaml | ||
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml* | ||
``` | ||
::::{important} | ||
If you are using [Logstash](https://www.elastic.co/products/logstash) or [Beats](https://www.elastic.co/products/beats) then you will most likely require additional index names in your `action.auto_create_index` setting, and the exact value will depend on your local configuration. If you are unsure of the correct value for your environment, you may consider setting the value to `*` which will allow automatic creation of all indices. | ||
:::: |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.