From 19aa60160d7bcc1a9c48ee8f20f72490a23f4e3c Mon Sep 17 00:00:00 2001 From: Kelly Date: Wed, 12 Aug 2020 14:03:08 -0700 Subject: [PATCH 01/26] add example to show string w quotes --- .../v2.0/reference/cli/influx/stacks/init.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/content/v2.0/reference/cli/influx/stacks/init.md b/content/v2.0/reference/cli/influx/stacks/init.md index b8945cabd..f65f50d5a 100644 --- a/content/v2.0/reference/cli/influx/stacks/init.md +++ b/content/v2.0/reference/cli/influx/stacks/init.md @@ -35,10 +35,22 @@ influx stacks init [flags] | `-t` | `--token` | Authentication token | string | `INFLUX_TOKEN` | ## Examples + +### Initialize a stack with a name and description ```sh -# Initialize a stack with a name and description +# Use environment variables influx stack init -n $STACK_NAME -d $STACK_DESCRIPTION -# Initialize a stack with a name and urls to associate with stack. -influx stack init -n $STACK_NAME -u $PATH_TO_TEMPLATE +# Use strings +influx stack init -n "Example Stack" -d "InfluxDB stack for monitoring some awesome stuff" +``` + +### Initialize a stack with a name and urls to associate with the stack + +```sh +# Use environment variables +influx stack init -n $STACK_NAME -u $PATH_TO_TEMPLATE + +# Use strings +influx stack init -n "Example Stack" -u https://example.com/template-1.yml ``` From 2b334daf621436d47b9e7af91b60ba08a0171e94 Mon Sep 17 00:00:00 2001 From: Kelly Date: Fri, 14 Aug 2020 15:35:57 -0700 Subject: [PATCH 02/26] edit f Will --- content/v2.0/reference/cli/influx/stacks/init.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/reference/cli/influx/stacks/init.md b/content/v2.0/reference/cli/influx/stacks/init.md index f65f50d5a..42c72e4a6 100644 --- a/content/v2.0/reference/cli/influx/stacks/init.md +++ b/content/v2.0/reference/cli/influx/stacks/init.md @@ -45,7 +45,7 @@ influx stack init -n $STACK_NAME -d $STACK_DESCRIPTION influx stack init -n "Example Stack" -d "InfluxDB stack for monitoring some awesome stuff" ``` -### Initialize a stack with a name and urls to associate with the stack +### Initialize a stack with a name and URLs to associate with the stack ```sh # Use environment variables From 00fb942e5d743403ed2e954a538c119b74975503 Mon Sep 17 00:00:00 2001 From: Kelly Date: Tue, 25 Aug 2020 17:19:52 -0700 Subject: [PATCH 03/26] add stacks example --- .../v2.0/influxdb-templates/stacks/_index.md | 96 +++++++++++++++--- static/img/gitops-workflow.png | Bin 0 -> 181057 bytes 2 files changed, 80 insertions(+), 16 deletions(-) create mode 100644 static/img/gitops-workflow.png diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index df956bf03..1a89e4b6c 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -1,10 +1,8 @@ --- title: InfluxDB stacks description: > - InfluxDB stacks are stateful InfluxDB templates that let you add, - update, and remove templated resources over time, avoid duplicating resources - when applying the same or similar templates more than once, and apply - changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. + InfluxDB stacks are templates that let you apply changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. + Stacks recognize when a resource already exists, and only apply new resources to an instance. menu: v2_0: parent: InfluxDB templates @@ -13,24 +11,83 @@ related: - /v2.0/reference/cli/influx/pkg/stack/ --- -**InfluxDB stacks** are **stateful [InfluxDB templates](/v2.0/influxdb-templates)** -that let you add, update, and remove templated resources over time, avoid -duplicating resources when applying the same or similar templates more than once, -and apply changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. +**InfluxDB stacks** are stateful [templates](/v2.0/influxdb-templates) that let you apply changes +to distributed instances of InfluxDB OSS or InfluxDB Cloud. Stacks (like templates) are groups of +pre-defined resources, including buckets, dashboards, tasks, checks, labels, and Telegraf configurations. -## Ideal use cases for InfluxDB stacks -Stacks help save time and effort in the following use cases: +- [Review ideal use cases for InfluxDB stacks](#review-ideal-use-cases-for-influxdb-stacks), + like automating InfluxDB deployments with GitOps and stacks. +- [Manage InfluxDB stacks](#manage-influxdb-stacks) -- [Actively develop and extend templates](#actively-develop-and-extend-templates) +{{% note %}} +**Key differences between stacks and templates**: + +- A template is a file outside of InfluxDB. Once a template is applied to InfluxDB, it becomes a stack. +- Stacks only add a resource to an instance if the resource doesn't exist. +Templates add all resources even if a resource already exists, which creates duplicate resources. + {{% /note %}} + +## Review ideal use cases for InfluxDB stacks + +Use stacks to save time in the following cases: + +- [Automate deployments with GitOps and stacks](#automate-deployments-with-gitops-and-stacks) - [Apply updates from source-controlled templates](#apply-updates-from-source-controlled-templates) - [Apply template updates across multiple InfluxDB instances](#apply-template-updates-across-multiple-influxdb-instances) +- [Develop templates](#develop-templates) -### Actively develop and extend templates -InfluxDB stacks aid in developing and maintaining InfluxDB templates. -Stacks let you modify and update template manifests and apply those changes in -any stack that uses the template. +### Automate deployments with GitOps and stacks + +GitOps is popular way to configure and automate deployments. Use InfluxDB stacks in a GitOps workflow +to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. + +#### Set up a GitHub repository to back your InfluxDB instance + +Use our sample [`influxDB-assets` repository](https://github.com/russorat/influxdb-assets) to get started. + + {{% note %}} + The sample repository **contains** buckets, dashboards, tasks, checks, labels, Telegraf configurations, + and infrastructure scripts. It **does not contain** organizations, users, or tokens; these are set up + in your InfluxDB instance and do not change very often. It also **does not contain** hard-coded IDs, + which lets you spin up and run the resources against your local InfluxDB OSS instance or on InfluxDB Cloud. + {{% /note %}} + +1. Clone the [`influxDB-assets` repository](https://github.com/russorat/influxdb-assets). + For more information, see [GitHub docs for cloning a repository](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository). +2. In the cloned or duplicated repository, update resources to suit your needs, for example, + [clone dashboards](/v2.0/visualize-data/dashboards/create-dashboard/#clone-a-dashboard), [update tasks](/v2.0/process-data/manage-tasks/update-task/), or + [update Telegraf configurations](/v2.0/telegraf-configs/update/). +3. In your integrated development environment (IDE), update the `install.sh` script as needed. + For example, set your `CONFIG_PROFILE` to check for a specific configuration profile. +4. Start an instance of InfluxDB, and then in your IDE, run `./install.sh`. + The install script finds your instance (`CONFIG_PROFILE.url`) and sets one up if the instance doesn't exist, + and then creates the stacks with the specified resources. This script creates separate stacks for buckets, dashboards, tasks, and Telegraf configurations; + however, you can create a stack with any combination of resources. + A message confirms your stacks were set up successfully and provides a link to your instance, for example `http://localhost:9999`. + +5. Click the link to open your InfluxDB instance and sign in. Your stacks should be applied to your instance. +6. To start ingesting data into your instance, in your IDE, run `./start_telegraf.sh` script. + The script runs your Telegraf configurations and connects to your instance. You should see data coming into your instance. +7. Open the `.github/workflows` directory, and make changes to `main.yml` as needed. This file uses a [GitHub Action](https://github.com/features/actions) to pull in some secrets + set in the GitHub project, grab the latest nightly version of InfluxDB, unzip the build, go to the `GITHUB_WORKSPACE`, and then + deploy the changes to your instance. Note the final line in this script `./install.sh prod` passes in a the `prod` configuration variable, + which grabs the INFLUX_TOKEN, INFLUX_ORG, and INFLUX_URL to install everything into the Cloud instance. +8. Click **Actions** in the repository to see all the tasks in the `deploy-to-cloud` workflow. + + Optionally, you can set up another continuous integration platform, such as [Circle CI](https://circleci.com/). + +#### Make a change in your repository + +Once you've set up your GitHub repository to back your InfluxDB instance, follow the steps below +to make a change to your new repository and automatically deploy the change to your InfluxDB instances. + +1. In your integrated development environment (IDE), open the repository, make a change locally, and then test against your InfluxDB instance. +2. Commit your change. For more information, see [GitHub docs about commits](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/committing-and-reviewing-changes-to-your-project#about-commits). +3. Create a pull request. For more information, see [GitHub docs for creating a pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request). +4. Merge your pull request. For more information, see [GitHub docs for merging a pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/merging-a-pull-request). Your change is automatically deployed to your InfluxDB instance. ### Apply updates from source-controlled templates + You can use a variety of InfluxDB templates from many different sources including [Community Templates](https://github.com/influxdata/community-templates/) or self-built custom templates. @@ -38,13 +95,20 @@ As templates are updated over time, stacks allow template users to gracefully apply updates without creating duplicate resources. ### Apply template updates across multiple InfluxDB instances + In many cases, users have more than one instance of InfluxDB running and apply the same template to each separate instance. By using stacks, you can make changes to a stack on one instance, [export the stack as a template](/v2.0/influxdb-templates/create/#export-a-stack) and then apply the changes to your other InfluxDB instances. -## Manage InfluxDB Stacks +### Develop templates + +InfluxDB stacks aid in developing and maintaining InfluxDB templates. +Stacks let you modify and update template manifests and apply those changes in +any stack that uses the template. + +## Manage InfluxDB stacks {{< children type="anchored-list" >}} diff --git a/static/img/gitops-workflow.png b/static/img/gitops-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5d5aa7eedf8fd92e26aaa8cb9ec5980850b85d GIT binary patch literal 181057 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 ScHwgm`B0KmlP#Avd;5RQ{P`CE literal 0 HcmV?d00001 From b0f7f81d6480e71ab95958c8471eced919405551 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Tue, 25 Aug 2020 17:21:51 -0700 Subject: [PATCH 04/26] Update _index.md --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 1a89e4b6c..52e7c95c5 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -1,7 +1,7 @@ --- title: InfluxDB stacks description: > - InfluxDB stacks are templates that let you apply changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. + InfluxDB stacks are stateful templates that let you apply changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. Stacks recognize when a resource already exists, and only apply new resources to an instance. menu: v2_0: From 10836b29423b3d382413b97898281d2bff8aca56 Mon Sep 17 00:00:00 2001 From: Kelly Date: Fri, 28 Aug 2020 13:59:14 -0700 Subject: [PATCH 05/26] edits f Russ --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 52e7c95c5..9081e95e8 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -22,7 +22,7 @@ pre-defined resources, including buckets, dashboards, tasks, checks, labels, and {{% note %}} **Key differences between stacks and templates**: -- A template is a file outside of InfluxDB. Once a template is applied to InfluxDB, it becomes a stack. +- A template is a file outside of InfluxDB. When you apply an InfluxDB template, a stack is automatically created to manage the template state. - Stacks only add a resource to an instance if the resource doesn't exist. Templates add all resources even if a resource already exists, which creates duplicate resources. {{% /note %}} From 05f40d760e076ef45c1eac0db4e86cd4e833bf99 Mon Sep 17 00:00:00 2001 From: Kelly Date: Fri, 28 Aug 2020 14:08:25 -0700 Subject: [PATCH 06/26] edits from Russ --- content/v2.0/influxdb-templates/stacks/_index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 9081e95e8..8337b09ed 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -22,9 +22,9 @@ pre-defined resources, including buckets, dashboards, tasks, checks, labels, and {{% note %}} **Key differences between stacks and templates**: -- A template is a file outside of InfluxDB. When you apply an InfluxDB template, a stack is automatically created to manage the template state. -- Stacks only add a resource to an instance if the resource doesn't exist. -Templates add all resources even if a resource already exists, which creates duplicate resources. +- A template is a file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template resources. +- Stacks add, modify or delete resources in an instance. +- Templates do not recognize resources in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. {{% /note %}} ## Review ideal use cases for InfluxDB stacks From d52789a0f92b06a8f0d551bd4953b923b2c6d161 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Mon, 31 Aug 2020 10:49:11 -0700 Subject: [PATCH 07/26] Update _index.md --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 8337b09ed..639addf0c 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -2,7 +2,7 @@ title: InfluxDB stacks description: > InfluxDB stacks are stateful templates that let you apply changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. - Stacks recognize when a resource already exists, and only apply new resources to an instance. + When you apply a stack, it adds, updates, or deletes resources in an instance. menu: v2_0: parent: InfluxDB templates From 816f5e95583260c61b96c1c9a01b4365ac15ebd8 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Mon, 31 Aug 2020 10:51:44 -0700 Subject: [PATCH 08/26] Update _index.md --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 639addf0c..688fb3ead 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -54,7 +54,7 @@ Use our sample [`influxDB-assets` repository](https://github.com/russorat/influx 1. Clone the [`influxDB-assets` repository](https://github.com/russorat/influxdb-assets). For more information, see [GitHub docs for cloning a repository](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository). -2. In the cloned or duplicated repository, update resources to suit your needs, for example, +2. In the cloned repository, update resources to suit your needs, for example, [clone dashboards](/v2.0/visualize-data/dashboards/create-dashboard/#clone-a-dashboard), [update tasks](/v2.0/process-data/manage-tasks/update-task/), or [update Telegraf configurations](/v2.0/telegraf-configs/update/). 3. In your integrated development environment (IDE), update the `install.sh` script as needed. From fceb34f4d21a3618dd6014b6a2293baca58ea346 Mon Sep 17 00:00:00 2001 From: Russ Savage Date: Mon, 31 Aug 2020 15:53:41 -0700 Subject: [PATCH 09/26] feat(stacks): updating gitops documentation --- content/v2.0/influxdb-templates/_index.md | 22 +-- .../v2.0/influxdb-templates/stacks/_index.md | 146 +++++++++++++----- 2 files changed, 116 insertions(+), 52 deletions(-) diff --git a/content/v2.0/influxdb-templates/_index.md b/content/v2.0/influxdb-templates/_index.md index 80740a12c..5393dabd6 100644 --- a/content/v2.0/influxdb-templates/_index.md +++ b/content/v2.0/influxdb-templates/_index.md @@ -1,30 +1,30 @@ --- title: InfluxDB templates description: > - InfluxDB templates are prepackaged InfluxDB configurations that contain everything + InfluxDB templates are preconfigured InfluxDB resources and can contain everything from dashboards and Telegraf configurations to notifications and alerts. menu: v2_0 weight: 9 v2.0/tags: [templates] --- -InfluxDB templates are prepackaged InfluxDB configurations that contain everything +InfluxDB templates are preconfigured InfluxDB resources and can contain everything from dashboards and Telegraf configurations to notifications and alerts. -Use InfluxDB templates to quickly set up a fresh instance of InfluxDB, back up your -dashboard configuration, or share your configuration with the InfluxData community. +Use InfluxDB templates to quickly get set up monitoring a specific technology, set +up a fresh instance of InfluxDB, back up your InfluxDB resources, or share your work +with the InfluxData community. **InfluxDB templates do the following:** -- Reduce setup time -- Facilitate secure, portable, source-controlled InfluxDB platform states. +- Reduce setup time by giving you resources that are already configured for your use-case. +- Facilitate secure, portable, and source-controlled InfluxDB resource states. - Simplify sharing and using pre-built InfluxDB solutions. {{< youtube 2JjW4Rym9XE >}} ## Template manifests -A template consists of a single file known as a **manifest** that defines the -InfluxDB state and associated [resources](#template-resources). -Template manifests support the following formats: +A template consists of one or more files known as **manifests** that defines the +InfluxDB [resources](#template-resources). Template manifests support the following formats: - [YAML](https://yaml.org/) - [JSON](https://www.json.org/) @@ -38,7 +38,7 @@ Template manifests are compatible with The `metadata.name` field in manifests uniquely identifies each resource in the template. `metadata.name` values must be [DNS-1123](https://tools.ietf.org/html/rfc1123) compliant. If resources in the template depend on other InfluxDB resources, all dependencies -must be included in the template. +should be included in the template, otherwise, the resources may not be usable. _See [Create an InfluxDB template](/v2.0/influxdb-templates/create/) for information about generating template manifests._ @@ -57,7 +57,7 @@ Include the following **resources** in a template: - Telegraf configurations ## Stacks -**InfluxDB stacks** are stateful InfluxDB templates. +**InfluxDB stacks** are artifacts that can be used to manage InfluxDB templates. When you apply a template, InfluxDB associates resources in the template with a stack. Use stacks to add, update, or remove templated resources over time. diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 688fb3ead..11ec6c5c8 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -1,8 +1,7 @@ --- title: InfluxDB stacks description: > - InfluxDB stacks are stateful templates that let you apply changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. - When you apply a stack, it adds, updates, or deletes resources in an instance. + InfluxDB stacks are are artifacts that can be used to manage InfluxDB templates. Use stacks to add, update, or remove templated resources over time. menu: v2_0: parent: InfluxDB templates @@ -11,9 +10,8 @@ related: - /v2.0/reference/cli/influx/pkg/stack/ --- -**InfluxDB stacks** are stateful [templates](/v2.0/influxdb-templates) that let you apply changes -to distributed instances of InfluxDB OSS or InfluxDB Cloud. Stacks (like templates) are groups of -pre-defined resources, including buckets, dashboards, tasks, checks, labels, and Telegraf configurations. +**InfluxDB stacks** are artifacts that can be used to manage [InfluxDB templates](/v2.0/influxdb-templates). +When you apply a template, InfluxDB associates resources in the template with a stack. Use stacks to add, update, or remove templated resources over time. - [Review ideal use cases for InfluxDB stacks](#review-ideal-use-cases-for-influxdb-stacks), like automating InfluxDB deployments with GitOps and stacks. @@ -22,9 +20,9 @@ pre-defined resources, including buckets, dashboards, tasks, checks, labels, and {{% note %}} **Key differences between stacks and templates**: -- A template is a file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template resources. +- A template describes a set of resources in a text file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template resources. - Stacks add, modify or delete resources in an instance. -- Templates do not recognize resources in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. +- Templates do not recognize resources already in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. {{% /note %}} ## Review ideal use cases for InfluxDB stacks @@ -39,52 +37,118 @@ Use stacks to save time in the following cases: ### Automate deployments with GitOps and stacks GitOps is popular way to configure and automate deployments. Use InfluxDB stacks in a GitOps workflow -to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. +to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. For a complete example, check out the blog on [Building a GitOps Workflow with InfluxDB Templates](). #### Set up a GitHub repository to back your InfluxDB instance -Use our sample [`influxDB-assets` repository](https://github.com/russorat/influxdb-assets) to get started. +Start by determining how you want to organize the stacks (and my proxy, the resources) in your Github repository. +Depending on how you use InfluxDB, you might want to organize resources under folders for specific teams or functions. + +Regardless of the heiarchy, we recommend that all resources that would be updated as part of the same stack live in the same folder. For example, if you are monitoring [Redis](), you might have a Telegraf configration, a few dashboards, a label, and some checks, all defined in the same folder in your repository, but in multiple files. They could all be connected by a stack named `redis`. When there is a change you want to make to one or more of those resources, it's easy to find them. {{% note %}} - The sample repository **contains** buckets, dashboards, tasks, checks, labels, Telegraf configurations, - and infrastructure scripts. It **does not contain** organizations, users, or tokens; these are set up - in your InfluxDB instance and do not change very often. It also **does not contain** hard-coded IDs, - which lets you spin up and run the resources against your local InfluxDB OSS instance or on InfluxDB Cloud. + Since stacks manage the entire lifecycle of a resource, including deletion, be extremely careful when using the same resource in multiple stacks, as deleting a stack could delete the resource another stack is depending on. This usually occurs when dealing with buckets. Since your buckets most likely contain data that might be used by many different templates, we would recommend keeping buckets separate from the other stacks. {{% /note %}} -1. Clone the [`influxDB-assets` repository](https://github.com/russorat/influxdb-assets). - For more information, see [GitHub docs for cloning a repository](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository). -2. In the cloned repository, update resources to suit your needs, for example, - [clone dashboards](/v2.0/visualize-data/dashboards/create-dashboard/#clone-a-dashboard), [update tasks](/v2.0/process-data/manage-tasks/update-task/), or - [update Telegraf configurations](/v2.0/telegraf-configs/update/). -3. In your integrated development environment (IDE), update the `install.sh` script as needed. - For example, set your `CONFIG_PROFILE` to check for a specific configuration profile. -4. Start an instance of InfluxDB, and then in your IDE, run `./install.sh`. - The install script finds your instance (`CONFIG_PROFILE.url`) and sets one up if the instance doesn't exist, - and then creates the stacks with the specified resources. This script creates separate stacks for buckets, dashboards, tasks, and Telegraf configurations; - however, you can create a stack with any combination of resources. - A message confirms your stacks were set up successfully and provides a link to your instance, for example `http://localhost:9999`. +#### Populate your GitHub repository with the existing resources in your instance -5. Click the link to open your InfluxDB instance and sign in. Your stacks should be applied to your instance. -6. To start ingesting data into your instance, in your IDE, run `./start_telegraf.sh` script. - The script runs your Telegraf configurations and connects to your instance. You should see data coming into your instance. -7. Open the `.github/workflows` directory, and make changes to `main.yml` as needed. This file uses a [GitHub Action](https://github.com/features/actions) to pull in some secrets - set in the GitHub project, grab the latest nightly version of InfluxDB, unzip the build, go to the `GITHUB_WORKSPACE`, and then - deploy the changes to your instance. Note the final line in this script `./install.sh prod` passes in a the `prod` configuration variable, - which grabs the INFLUX_TOKEN, INFLUX_ORG, and INFLUX_URL to install everything into the Cloud instance. -8. Click **Actions** in the repository to see all the tasks in the `deploy-to-cloud` workflow. +You can skip this section if you are starting from scratch. Most likely, you already have some resources that you would like to use in your InfluxDB instance. You will need to export these resources and group them into the approriate stacks. - Optionally, you can set up another continuous integration platform, such as [Circle CI](https://circleci.com/). +You can use the [`influx export`]() command from the CLI to quickly export groups of resources, or all resources. It's up to you if you want to keep all your resources in a single file or have files for each one. You can always split or combine them later. -#### Make a change in your repository +Your folder structure might look something like this when you are done: -Once you've set up your GitHub repository to back your InfluxDB instance, follow the steps below -to make a change to your new repository and automatically deploy the change to your InfluxDB instances. +```sh +influxdb-assets/ +├── buckets/ +│ ├── telegraf_bucket.yml +├── redis/ +│ ├── redis_overview_dashboard.yml +│ ├── redis_label.yml +│ ├── redis_cpu_check.yml +│ └── redis_mem_check.yml +├── mysql/ +│ ├── mysql_assets.yml +└── README.md -1. In your integrated development environment (IDE), open the repository, make a change locally, and then test against your InfluxDB instance. -2. Commit your change. For more information, see [GitHub docs about commits](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/committing-and-reviewing-changes-to-your-project#about-commits). -3. Create a pull request. For more information, see [GitHub docs for creating a pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request). -4. Merge your pull request. For more information, see [GitHub docs for merging a pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/merging-a-pull-request). Your change is automatically deployed to your InfluxDB instance. +``` + {{% note %}} + When exporting a resource in InfluxDB, InfluxDB will automatically create a `meta.name` for that resource. These names should be unique inside you InfluxDB instance, and a good naming convention can help ensure there are no colisions. Changing the `meta.name` of the InfluxDB resource will cause the stack to orphan the resource with the previous name and create a new resource with the updated name. + {{% /note %}} + +#### Automate the creation of a stack for each folder + +Each folder in your Github repository will likely become its own stack, and you'll want to automate the process to apply your changes to your InfluxDB instance. You can do that using some shell scripts and the Influx CLI. Here is an example shell script that will create a `redis` stack, and automatically apply those changes to your instance. + +```sh +echo "Checking for existing redis stack..." +REDIS_STACK_ID=$(influx stacks --stack-name redis --json | jq -r '.[0].ID') +if [ "$REDIS_STACK_ID" == "null" ]; then + echo "No stack found. Initializing our stack..." + REDIS_STACK_ID=$(influx stacks init -n redis --json | jq -r '.ID') +fi + +# Setting the base path +BASE_PATH="$(pwd)" + +echo "Applying our redis stack..." +cat $BASE_PATH/redis/*.yml | \ +influx apply --force true --stack-id $REDIS_STACK_ID -q +``` + + {{% note %}} + The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI, as it allows you to grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). + {{% /note %}} + +You can do this for each of the stacks you are maintaining. Each time you make a change to one of the resources in the stack, you can re-run this script and your changes will be applied to the resources in your InfluxDB instance. There's no need to check for changes before re-applying a stack, since re-applying the same resources doesn't change anything. + +For a complete example, check out the blog on [Building a GitOps Workflow with InfluxDB Templates](). + +#### Automating deployment using Github Actions or CircleCI + +Once you have a script to apply changes being made to your local instance, you can start to automate the deployment to other environments as needed. The InfluxDB CLI has the ability to maintain multiple [configuration profiles]() that makes it easy to issue commands against other InfluxDB instances. To apply the same script to a different InfluxDB instance, just change your active configuration profile using the `influx config set` command. You can also set the desired profile dynamically using the `-c, --active-config` flag. + + {{% note %}} + Be careful anytime you are running automation scripts against shared environments. It might be useful to manually run the steps in your script first before setting up automation. + {{% /note %}} + +As long as your deployment automation software allows you to run a custom script, you can set it up to run the same script you've built locally, but against another environment. Here is an example of using a custom Github Action to do this: + +```yml +name: deploy-influxdb-resources + +on: + push: + branches: [ master ] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + - name: Deploys repo to cloud + env: + # These secrets can be configured in the Github repo to connect to + # your InfluxDB instance. + INFLUX_TOKEN: ${{ secrets.INFLUX_TOKEN }} + INFLUX_ORG: ${{ secrets.INFLUX_ORG }} + INFLUX_URL: ${{ secrets.INFLUX_URL }} + GITHUB_REPO: ${{ github.repository }} + GITHUB_BRANCH: ${{ github.ref }} + run: | + cd /tmp + wget https://dl.influxdata.com/platform/nightlies/influx_nightly_linux_amd64.tar.gz + tar xvfz influx_nightly_linux_amd64.tar.gz + sudo cp influx_nightly_linux_amd64/influx /usr/local/bin/ + cd $GITHUB_WORKSPACE + # This runs the script to set up your stacks + chmod +x ./setup.sh + ./setup.sh prod +``` + +Check out the complete [Github Actions documentation](https://github.com/features/actions) for more information about using these in your project. ### Apply updates from source-controlled templates From 95c5206225575bc0966e4ed94aca43316509f15c Mon Sep 17 00:00:00 2001 From: Russ Savage Date: Thu, 3 Sep 2020 16:27:31 -0700 Subject: [PATCH 10/26] Update content/v2.0/influxdb-templates/stacks/_index.md --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 11ec6c5c8..d80b80bf5 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -1,7 +1,7 @@ --- title: InfluxDB stacks description: > - InfluxDB stacks are are artifacts that can be used to manage InfluxDB templates. Use stacks to add, update, or remove templated resources over time. + InfluxDB stacks are artifacts that can be used to manage InfluxDB templates. Use stacks to add, update, or remove templated resources over time. menu: v2_0: parent: InfluxDB templates From c6c570f7ed5392f4d8d5511da6e0e1b177b2d9e2 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:27:26 -0700 Subject: [PATCH 11/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index d80b80bf5..a86bbfc01 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -11,7 +11,7 @@ related: --- **InfluxDB stacks** are artifacts that can be used to manage [InfluxDB templates](/v2.0/influxdb-templates). -When you apply a template, InfluxDB associates resources in the template with a stack. Use stacks to add, update, or remove templated resources over time. +When you apply a template, InfluxDB associates resources in the template with a stack. Use stacks to add, update, or remove InfluxDB templates over time. - [Review ideal use cases for InfluxDB stacks](#review-ideal-use-cases-for-influxdb-stacks), like automating InfluxDB deployments with GitOps and stacks. From 4d45fb508419bd1e18b629c54687a1a77a3ee9dd Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:27:56 -0700 Subject: [PATCH 12/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index a86bbfc01..9a61775d4 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -100,7 +100,7 @@ influx apply --force true --stack-id $REDIS_STACK_ID -q The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI, as it allows you to grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). {{% /note %}} -You can do this for each of the stacks you are maintaining. Each time you make a change to one of the resources in the stack, you can re-run this script and your changes will be applied to the resources in your InfluxDB instance. There's no need to check for changes before re-applying a stack, since re-applying the same resources doesn't change anything. +You can do this for each of the stacks you are maintaining. Each time you make a change to one of the resources in the stack, you can re-run this script and your changes will be applied to the resources in your InfluxDB instance. Re-applying a stack with an updated resource won't add, delete, or duplicate resources. For a complete example, check out the blog on [Building a GitOps Workflow with InfluxDB Templates](). From 2db77822dc8c71cc0b1236a6600809de7c77cedd Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:28:05 -0700 Subject: [PATCH 13/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 9a61775d4..b2dd28df5 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -104,7 +104,7 @@ You can do this for each of the stacks you are maintaining. Each time you make a For a complete example, check out the blog on [Building a GitOps Workflow with InfluxDB Templates](). -#### Automating deployment using Github Actions or CircleCI +#### Automate deployment using Github Actions or CircleCI Once you have a script to apply changes being made to your local instance, you can start to automate the deployment to other environments as needed. The InfluxDB CLI has the ability to maintain multiple [configuration profiles]() that makes it easy to issue commands against other InfluxDB instances. To apply the same script to a different InfluxDB instance, just change your active configuration profile using the `influx config set` command. You can also set the desired profile dynamically using the `-c, --active-config` flag. From bf3a4fa462a4625852968132ab2437129a93b581 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:28:20 -0700 Subject: [PATCH 14/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index b2dd28df5..1307a0b7e 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -97,7 +97,7 @@ influx apply --force true --stack-id $REDIS_STACK_ID -q ``` {{% note %}} - The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI, as it allows you to grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). + The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI. This flag lets you grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). {{% /note %}} You can do this for each of the stacks you are maintaining. Each time you make a change to one of the resources in the stack, you can re-run this script and your changes will be applied to the resources in your InfluxDB instance. Re-applying a stack with an updated resource won't add, delete, or duplicate resources. From 7c9a0a6e4a2c93d7dedc5010683e5bd092faf9a4 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:28:41 -0700 Subject: [PATCH 15/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 1307a0b7e..354b5db4c 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -47,7 +47,7 @@ Depending on how you use InfluxDB, you might want to organize resources under fo Regardless of the heiarchy, we recommend that all resources that would be updated as part of the same stack live in the same folder. For example, if you are monitoring [Redis](), you might have a Telegraf configration, a few dashboards, a label, and some checks, all defined in the same folder in your repository, but in multiple files. They could all be connected by a stack named `redis`. When there is a change you want to make to one or more of those resources, it's easy to find them. {{% note %}} - Since stacks manage the entire lifecycle of a resource, including deletion, be extremely careful when using the same resource in multiple stacks, as deleting a stack could delete the resource another stack is depending on. This usually occurs when dealing with buckets. Since your buckets most likely contain data that might be used by many different templates, we would recommend keeping buckets separate from the other stacks. + Because stacks manage the entire lifecycle of a resource, including deletion, be extremely careful when using the same resource in multiple stacks, as deleting a stack could delete the resource another stack is depending on. This usually occurs when dealing with buckets. Since your buckets most likely contain data that might be used by many different templates, we would recommend keeping buckets separate from the other stacks. {{% /note %}} #### Populate your GitHub repository with the existing resources in your instance From da92279b18047dbc64c29d256c2ea3ad3e7cdfdf Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:28:52 -0700 Subject: [PATCH 16/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 354b5db4c..50d7d61ac 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -44,7 +44,7 @@ to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. Start by determining how you want to organize the stacks (and my proxy, the resources) in your Github repository. Depending on how you use InfluxDB, you might want to organize resources under folders for specific teams or functions. -Regardless of the heiarchy, we recommend that all resources that would be updated as part of the same stack live in the same folder. For example, if you are monitoring [Redis](), you might have a Telegraf configration, a few dashboards, a label, and some checks, all defined in the same folder in your repository, but in multiple files. They could all be connected by a stack named `redis`. When there is a change you want to make to one or more of those resources, it's easy to find them. +Regardless of the hierarchy, we recommend that all resources that would be updated as part of the same stack live in the same folder. For example, if you are monitoring [Redis](), you might have a Telegraf configration, a few dashboards, a label, and some checks, all defined in the same folder in your repository, but in multiple files. They could all be connected by a stack named `redis`. When there is a change you want to make to one or more of those resources, it's easy to find them. {{% note %}} Because stacks manage the entire lifecycle of a resource, including deletion, be extremely careful when using the same resource in multiple stacks, as deleting a stack could delete the resource another stack is depending on. This usually occurs when dealing with buckets. Since your buckets most likely contain data that might be used by many different templates, we would recommend keeping buckets separate from the other stacks. From 79f73e41aa086e07ce816c2a2e5e413fc4460d83 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:29:03 -0700 Subject: [PATCH 17/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 50d7d61ac..dc3e5d56f 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -22,7 +22,7 @@ When you apply a template, InfluxDB associates resources in the template with a - A template describes a set of resources in a text file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template resources. - Stacks add, modify or delete resources in an instance. -- Templates do not recognize resources already in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. +- Templates do not recognize resources in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. {{% /note %}} ## Review ideal use cases for InfluxDB stacks From c45613981e0be0c930780f51aba11b5dfc9b233a Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:29:17 -0700 Subject: [PATCH 18/26] Update content/v2.0/influxdb-templates/stacks/_index.md Co-authored-by: Russ Savage --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index dc3e5d56f..2fe19ac9c 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -20,7 +20,7 @@ When you apply a template, InfluxDB associates resources in the template with a {{% note %}} **Key differences between stacks and templates**: -- A template describes a set of resources in a text file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template resources. +- A template defines a set of resources in a text file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template resources. - Stacks add, modify or delete resources in an instance. - Templates do not recognize resources in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. {{% /note %}} From 138a0a43a72faee207626376437059e2b3abfc28 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:33:43 -0700 Subject: [PATCH 19/26] edit --- content/v2.0/influxdb-templates/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/_index.md b/content/v2.0/influxdb-templates/_index.md index 5393dabd6..c6f725703 100644 --- a/content/v2.0/influxdb-templates/_index.md +++ b/content/v2.0/influxdb-templates/_index.md @@ -57,7 +57,7 @@ Include the following **resources** in a template: - Telegraf configurations ## Stacks -**InfluxDB stacks** are artifacts that can be used to manage InfluxDB templates. +Use **InfluxDB stacks** to manage InfluxDB templates. When you apply a template, InfluxDB associates resources in the template with a stack. Use stacks to add, update, or remove templated resources over time. From 842eb5e4a3acc483de24a27bb31b892f4e017f00 Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Thu, 3 Sep 2020 17:58:08 -0700 Subject: [PATCH 20/26] edits --- .../v2.0/influxdb-templates/stacks/_index.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index 2fe19ac9c..eba5a44f3 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -1,7 +1,7 @@ --- title: InfluxDB stacks description: > - InfluxDB stacks are artifacts that can be used to manage InfluxDB templates. Use stacks to add, update, or remove templated resources over time. + Use an InfluxDB stack to manage your InfluxDB templates—add, update, or remove templates over time. menu: v2_0: parent: InfluxDB templates @@ -10,8 +10,8 @@ related: - /v2.0/reference/cli/influx/pkg/stack/ --- -**InfluxDB stacks** are artifacts that can be used to manage [InfluxDB templates](/v2.0/influxdb-templates). -When you apply a template, InfluxDB associates resources in the template with a stack. Use stacks to add, update, or remove InfluxDB templates over time. +Use **InfluxDB stacks** to manage [InfluxDB templates](/v2.0/influxdb-templates). +When you apply a template, InfluxDB associates resources in the template with a stack. Use the stack to add, update, or remove InfluxDB templates over time. - [Review ideal use cases for InfluxDB stacks](#review-ideal-use-cases-for-influxdb-stacks), like automating InfluxDB deployments with GitOps and stacks. @@ -20,7 +20,7 @@ When you apply a template, InfluxDB associates resources in the template with a {{% note %}} **Key differences between stacks and templates**: -- A template defines a set of resources in a text file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template resources. +- A template defines a set of resources in a text file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template. - Stacks add, modify or delete resources in an instance. - Templates do not recognize resources in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. {{% /note %}} @@ -41,20 +41,17 @@ to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. #### Set up a GitHub repository to back your InfluxDB instance -Start by determining how you want to organize the stacks (and my proxy, the resources) in your Github repository. -Depending on how you use InfluxDB, you might want to organize resources under folders for specific teams or functions. +Determine how you want to organize the resources in your stacks within your Github repository. For example, organize resources under folders for specific teams or functions. -Regardless of the hierarchy, we recommend that all resources that would be updated as part of the same stack live in the same folder. For example, if you are monitoring [Redis](), you might have a Telegraf configration, a few dashboards, a label, and some checks, all defined in the same folder in your repository, but in multiple files. They could all be connected by a stack named `redis`. When there is a change you want to make to one or more of those resources, it's easy to find them. +We recommend storing all resources for one stack in the same folder. For example, if you monitor Redis, create a `redis` stack and put your Redis monitoring resources (a Telegraf configuration, four dashboards, a label, and two alert checks) into one Redis folder, each resource in a separate file. Then, when you need to update a Redis resource, it's easy to find and make changes in one location. {{% note %}} - Because stacks manage the entire lifecycle of a resource, including deletion, be extremely careful when using the same resource in multiple stacks, as deleting a stack could delete the resource another stack is depending on. This usually occurs when dealing with buckets. Since your buckets most likely contain data that might be used by many different templates, we would recommend keeping buckets separate from the other stacks. + Typically, we **do not recommend** using the same resource in multiple stacks. If your organization uses the same resource in multiple stacks, before you delete a stack, verify the stack does not include resources that another stack depends on. Stacks with buckets often contain data used by many different templates. Because of this, we recommend keeping buckets separate from the other stacks. {{% /note %}} #### Populate your GitHub repository with the existing resources in your instance -You can skip this section if you are starting from scratch. Most likely, you already have some resources that you would like to use in your InfluxDB instance. You will need to export these resources and group them into the approriate stacks. - -You can use the [`influx export`]() command from the CLI to quickly export groups of resources, or all resources. It's up to you if you want to keep all your resources in a single file or have files for each one. You can always split or combine them later. +Skip this section if you are starting from scratch or don’t have existing resources you want to add to your stack. If you do have resources you'd like to use, run the `influx export` command to quickly export resources. Keep all your resources in a single file or have files for each one. You can always split or combine them later. Your folder structure might look something like this when you are done: From aa81297646d906ae4d9cc7f92f58a02e65f2b0cc Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Tue, 8 Sep 2020 10:15:44 -0700 Subject: [PATCH 21/26] Update _index.md --- content/v2.0/influxdb-templates/stacks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index eba5a44f3..e400ab4c4 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -53,7 +53,7 @@ We recommend storing all resources for one stack in the same folder. For example Skip this section if you are starting from scratch or don’t have existing resources you want to add to your stack. If you do have resources you'd like to use, run the `influx export` command to quickly export resources. Keep all your resources in a single file or have files for each one. You can always split or combine them later. -Your folder structure might look something like this when you are done: +For example, if you export resources for three stacks: `buckets`, `redis`, and `mysql`, your folder structure might look something like this when you are done: ```sh influxdb-assets/ From ab9755b5aae1929b812a342928a9f3a27bd735b2 Mon Sep 17 00:00:00 2001 From: Kelly Date: Fri, 25 Sep 2020 15:54:49 -0700 Subject: [PATCH 22/26] edits --- content/v2.0/influxdb-templates/_index.md | 7 +++++-- .../v2.0/influxdb-templates/stacks/_index.md | 18 ++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/content/v2.0/influxdb-templates/_index.md b/content/v2.0/influxdb-templates/_index.md index c6f725703..7fcb21255 100644 --- a/content/v2.0/influxdb-templates/_index.md +++ b/content/v2.0/influxdb-templates/_index.md @@ -16,14 +16,15 @@ with the InfluxData community. **InfluxDB templates do the following:** -- Reduce setup time by giving you resources that are already configured for your use-case. +- Reduce setup time by giving you resources that are already configured for your use case. - Facilitate secure, portable, and source-controlled InfluxDB resource states. - Simplify sharing and using pre-built InfluxDB solutions. {{< youtube 2JjW4Rym9XE >}} ## Template manifests -A template consists of one or more files known as **manifests** that defines the + +A template consists of one or more files known as **manifests** that define the InfluxDB [resources](#template-resources). Template manifests support the following formats: - [YAML](https://yaml.org/) @@ -44,6 +45,7 @@ _See [Create an InfluxDB template](/v2.0/influxdb-templates/create/) for informa generating template manifests._ ### Template resources + Include the following **resources** in a template: - buckets @@ -57,6 +59,7 @@ Include the following **resources** in a template: - Telegraf configurations ## Stacks + Use **InfluxDB stacks** to manage InfluxDB templates. When you apply a template, InfluxDB associates resources in the template with a stack. Use stacks to add, update, or remove templated resources over time. diff --git a/content/v2.0/influxdb-templates/stacks/_index.md b/content/v2.0/influxdb-templates/stacks/_index.md index e400ab4c4..c6efc7745 100644 --- a/content/v2.0/influxdb-templates/stacks/_index.md +++ b/content/v2.0/influxdb-templates/stacks/_index.md @@ -37,7 +37,7 @@ Use stacks to save time in the following cases: ### Automate deployments with GitOps and stacks GitOps is popular way to configure and automate deployments. Use InfluxDB stacks in a GitOps workflow -to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. For a complete example, check out the blog on [Building a GitOps Workflow with InfluxDB Templates](). +to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. #### Set up a GitHub repository to back your InfluxDB instance @@ -70,12 +70,12 @@ influxdb-assets/ ``` {{% note %}} - When exporting a resource in InfluxDB, InfluxDB will automatically create a `meta.name` for that resource. These names should be unique inside you InfluxDB instance, and a good naming convention can help ensure there are no colisions. Changing the `meta.name` of the InfluxDB resource will cause the stack to orphan the resource with the previous name and create a new resource with the updated name. + When you export a resource, InfluxDB creates a `meta.name` for that resource. These resource names should be unique inside your InfluxDB instance. Use a good naming convention to prevent duplicate `meta.names`. Changing the `meta.name` of the InfluxDB resource will cause the stack to orphan the resource with the previous name and create a new resource with the updated name. {{% /note %}} #### Automate the creation of a stack for each folder -Each folder in your Github repository will likely become its own stack, and you'll want to automate the process to apply your changes to your InfluxDB instance. You can do that using some shell scripts and the Influx CLI. Here is an example shell script that will create a `redis` stack, and automatically apply those changes to your instance. +To automatically create a stack from each folder in your GitHub repository, create a shell script to check for an existing stack and if the stack isn't found, use the `influx stacks init` command to create a new stack. The following sample script creates a `redis` stack and automatically apply those changes to your instance: ```sh echo "Checking for existing redis stack..." @@ -97,19 +97,17 @@ influx apply --force true --stack-id $REDIS_STACK_ID -q The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI. This flag lets you grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). {{% /note %}} -You can do this for each of the stacks you are maintaining. Each time you make a change to one of the resources in the stack, you can re-run this script and your changes will be applied to the resources in your InfluxDB instance. Re-applying a stack with an updated resource won't add, delete, or duplicate resources. - -For a complete example, check out the blog on [Building a GitOps Workflow with InfluxDB Templates](). +Repeat this step for each of the stacks in your repository. When a resource in your stack changes, re-run this script to apply updated resources to your InfluxDB instance. Re-applying a stack with an updated resource won't add, delete, or duplicate resources. #### Automate deployment using Github Actions or CircleCI -Once you have a script to apply changes being made to your local instance, you can start to automate the deployment to other environments as needed. The InfluxDB CLI has the ability to maintain multiple [configuration profiles]() that makes it easy to issue commands against other InfluxDB instances. To apply the same script to a different InfluxDB instance, just change your active configuration profile using the `influx config set` command. You can also set the desired profile dynamically using the `-c, --active-config` flag. +Once you have a script to apply changes being made to your local instance, automate the deployment to other environments as needed. Use the InfluxDB CLI to maintain multiple [configuration profiles]() to easily switch profile and issue commands against other InfluxDB instances. To apply the same script to a different InfluxDB instance, change your active configuration profile using the `influx config set` command. Or set the desired profile dynamically using the `-c, --active-config` flag. {{% note %}} - Be careful anytime you are running automation scripts against shared environments. It might be useful to manually run the steps in your script first before setting up automation. + Before you run automation scripts against shared environments, we recommend manually running the steps in your script. {{% /note %}} -As long as your deployment automation software allows you to run a custom script, you can set it up to run the same script you've built locally, but against another environment. Here is an example of using a custom Github Action to do this: +Verify your deployment automation software lets you run a custom script, and then set up the custom script you've built locally another environment. For example, here's a custom Github Action that automates deployment: ```yml name: deploy-influxdb-resources @@ -145,7 +143,7 @@ jobs: ./setup.sh prod ``` -Check out the complete [Github Actions documentation](https://github.com/features/actions) for more information about using these in your project. +For more information about using GitHub Actions in your project, check out the complete [Github Actions documentation](https://github.com/features/actions). ### Apply updates from source-controlled templates From ec7d0f3faaf2d61b2ddc8a9afdf1286460c4cd6e Mon Sep 17 00:00:00 2001 From: kelseiv <47797004+kelseiv@users.noreply.github.com> Date: Tue, 29 Sep 2020 11:41:50 -0700 Subject: [PATCH 23/26] Update _index.md --- content/v2.0/influxdb-templates/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/v2.0/influxdb-templates/_index.md b/content/v2.0/influxdb-templates/_index.md index 7fcb21255..c3afb66ce 100644 --- a/content/v2.0/influxdb-templates/_index.md +++ b/content/v2.0/influxdb-templates/_index.md @@ -1,14 +1,14 @@ --- title: InfluxDB templates description: > - InfluxDB templates are preconfigured InfluxDB resources and can contain everything + InfluxDB templates are preconfigured InfluxDB resources. Resources include everything from dashboards and Telegraf configurations to notifications and alerts. menu: v2_0 weight: 9 v2.0/tags: [templates] --- -InfluxDB templates are preconfigured InfluxDB resources and can contain everything +InfluxDB templates are preconfigured InfluxDB resources. Resouces include everything from dashboards and Telegraf configurations to notifications and alerts. Use InfluxDB templates to quickly get set up monitoring a specific technology, set up a fresh instance of InfluxDB, back up your InfluxDB resources, or share your work From eb5b4c5a04c209f75aede7fe6ec4ac231967fe4c Mon Sep 17 00:00:00 2001 From: Kelly Date: Tue, 29 Sep 2020 12:22:54 -0700 Subject: [PATCH 24/26] add stacks changes --- .../v2.0/influxdb-templates/stacks/_index.md | 159 ++++++++++++++++-- 1 file changed, 141 insertions(+), 18 deletions(-) diff --git a/content/influxdb/v2.0/influxdb-templates/stacks/_index.md b/content/influxdb/v2.0/influxdb-templates/stacks/_index.md index af589b96b..9a11bfa73 100644 --- a/content/influxdb/v2.0/influxdb-templates/stacks/_index.md +++ b/content/influxdb/v2.0/influxdb-templates/stacks/_index.md @@ -1,36 +1,152 @@ --- title: InfluxDB stacks description: > - InfluxDB stacks are stateful InfluxDB templates that let you add, - update, and remove templated resources over time, avoid duplicating resources - when applying the same or similar templates more than once, and apply - changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. + Use an InfluxDB stack to manage your InfluxDB templates—add, update, or remove templates over time. menu: influxdb_2_0: parent: InfluxDB templates weight: 105 related: - - /influxdb/v2.0/reference/cli/stacks/ + - /v2.0/reference/cli/influx/pkg/stack/ --- -**InfluxDB stacks** are **stateful [InfluxDB templates](/influxdb/v2.0/influxdb-templates)** -that let you add, update, and remove templated resources over time, avoid -duplicating resources when applying the same or similar templates more than once, -and apply changes to distributed instances of InfluxDB OSS or InfluxDB Cloud. +Use **InfluxDB stacks** to manage [InfluxDB templates](/v2.0/influxdb-templates). +When you apply a template, InfluxDB associates resources in the template with a stack. Use the stack to add, update, or remove InfluxDB templates over time. -## Ideal use cases for InfluxDB stacks -Stacks help save time and effort in the following use cases: +- [Review ideal use cases for InfluxDB stacks](#review-ideal-use-cases-for-influxdb-stacks), + like automating InfluxDB deployments with GitOps and stacks. +- [Manage InfluxDB stacks](#manage-influxdb-stacks) -- [Actively develop and extend templates](#actively-develop-and-extend-templates) +{{% note %}} +**Key differences between stacks and templates**: + +- A template defines a set of resources in a text file outside of InfluxDB. When you apply a template, a stack is automatically created to manage the applied template. +- Stacks add, modify or delete resources in an instance. +- Templates do not recognize resources in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. + {{% /note %}} + +## Review ideal use cases for InfluxDB stacks + +Use stacks to save time in the following cases: + +- [Automate deployments with GitOps and stacks](#automate-deployments-with-gitops-and-stacks) - [Apply updates from source-controlled templates](#apply-updates-from-source-controlled-templates) - [Apply template updates across multiple InfluxDB instances](#apply-template-updates-across-multiple-influxdb-instances) +- [Develop templates](#develop-templates) -### Actively develop and extend templates -InfluxDB stacks aid in developing and maintaining InfluxDB templates. -Stacks let you modify and update template manifests and apply those changes in -any stack that uses the template. +### Automate deployments with GitOps and stacks + +GitOps is popular way to configure and automate deployments. Use InfluxDB stacks in a GitOps workflow +to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. + +#### Set up a GitHub repository to back your InfluxDB instance + +Determine how you want to organize the resources in your stacks within your Github repository. For example, organize resources under folders for specific teams or functions. + +We recommend storing all resources for one stack in the same folder. For example, if you monitor Redis, create a `redis` stack and put your Redis monitoring resources (a Telegraf configuration, four dashboards, a label, and two alert checks) into one Redis folder, each resource in a separate file. Then, when you need to update a Redis resource, it's easy to find and make changes in one location. + + {{% note %}} + Typically, we **do not recommend** using the same resource in multiple stacks. If your organization uses the same resource in multiple stacks, before you delete a stack, verify the stack does not include resources that another stack depends on. Stacks with buckets often contain data used by many different templates. Because of this, we recommend keeping buckets separate from the other stacks. + {{% /note %}} + +#### Populate your GitHub repository with the existing resources in your instance + +Skip this section if you are starting from scratch or don’t have existing resources you want to add to your stack. If you do have resources you'd like to use, run the `influx export` command to quickly export resources. Keep all your resources in a single file or have files for each one. You can always split or combine them later. + +For example, if you export resources for three stacks: `buckets`, `redis`, and `mysql`, your folder structure might look something like this when you are done: + +```sh +influxdb-assets/ +├── buckets/ +│ ├── telegraf_bucket.yml +├── redis/ +│ ├── redis_overview_dashboard.yml +│ ├── redis_label.yml +│ ├── redis_cpu_check.yml +│ └── redis_mem_check.yml +├── mysql/ +│ ├── mysql_assets.yml +└── README.md + +``` + {{% note %}} + When you export a resource, InfluxDB creates a `meta.name` for that resource. These resource names should be unique inside your InfluxDB instance. Use a good naming convention to prevent duplicate `meta.names`. Changing the `meta.name` of the InfluxDB resource will cause the stack to orphan the resource with the previous name and create a new resource with the updated name. + {{% /note %}} + +#### Automate the creation of a stack for each folder + +To automatically create a stack from each folder in your GitHub repository, create a shell script to check for an existing stack and if the stack isn't found, use the `influx stacks init` command to create a new stack. The following sample script creates a `redis` stack and automatically apply those changes to your instance: + +```sh +echo "Checking for existing redis stack..." +REDIS_STACK_ID=$(influx stacks --stack-name redis --json | jq -r '.[0].ID') +if [ "$REDIS_STACK_ID" == "null" ]; then + echo "No stack found. Initializing our stack..." + REDIS_STACK_ID=$(influx stacks init -n redis --json | jq -r '.ID') +fi + +# Setting the base path +BASE_PATH="$(pwd)" + +echo "Applying our redis stack..." +cat $BASE_PATH/redis/*.yml | \ +influx apply --force true --stack-id $REDIS_STACK_ID -q +``` + + {{% note %}} + The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI. This flag lets you grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). + {{% /note %}} + +Repeat this step for each of the stacks in your repository. When a resource in your stack changes, re-run this script to apply updated resources to your InfluxDB instance. Re-applying a stack with an updated resource won't add, delete, or duplicate resources. + +#### Automate deployment using Github Actions or CircleCI + +Once you have a script to apply changes being made to your local instance, automate the deployment to other environments as needed. Use the InfluxDB CLI to maintain multiple [configuration profiles]() to easily switch profile and issue commands against other InfluxDB instances. To apply the same script to a different InfluxDB instance, change your active configuration profile using the `influx config set` command. Or set the desired profile dynamically using the `-c, --active-config` flag. + + {{% note %}} + Before you run automation scripts against shared environments, we recommend manually running the steps in your script. + {{% /note %}} + +Verify your deployment automation software lets you run a custom script, and then set up the custom script you've built locally another environment. For example, here's a custom Github Action that automates deployment: + +```yml +name: deploy-influxdb-resources + +on: + push: + branches: [ master ] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + - name: Deploys repo to cloud + env: + # These secrets can be configured in the Github repo to connect to + # your InfluxDB instance. + INFLUX_TOKEN: ${{ secrets.INFLUX_TOKEN }} + INFLUX_ORG: ${{ secrets.INFLUX_ORG }} + INFLUX_URL: ${{ secrets.INFLUX_URL }} + GITHUB_REPO: ${{ github.repository }} + GITHUB_BRANCH: ${{ github.ref }} + run: | + cd /tmp + wget https://dl.influxdata.com/platform/nightlies/influx_nightly_linux_amd64.tar.gz + tar xvfz influx_nightly_linux_amd64.tar.gz + sudo cp influx_nightly_linux_amd64/influx /usr/local/bin/ + cd $GITHUB_WORKSPACE + # This runs the script to set up your stacks + chmod +x ./setup.sh + ./setup.sh prod +``` + +For more information about using GitHub Actions in your project, check out the complete [Github Actions documentation](https://github.com/features/actions). ### Apply updates from source-controlled templates + You can use a variety of InfluxDB templates from many different sources including [Community Templates](https://github.com/influxdata/community-templates/) or self-built custom templates. @@ -38,13 +154,20 @@ As templates are updated over time, stacks allow template users to gracefully apply updates without creating duplicate resources. ### Apply template updates across multiple InfluxDB instances + In many cases, users have more than one instance of InfluxDB running and apply the same template to each separate instance. By using stacks, you can make changes to a stack on one instance, -[export the stack as a template](/influxdb/v2.0/influxdb-templates/create/#export-a-stack) +[export the stack as a template](/v2.0/influxdb-templates/create/#export-a-stack) and then apply the changes to your other InfluxDB instances. -## Manage InfluxDB Stacks +### Develop templates + +InfluxDB stacks aid in developing and maintaining InfluxDB templates. +Stacks let you modify and update template manifests and apply those changes in +any stack that uses the template. + +## Manage InfluxDB stacks {{< children type="anchored-list" >}} From 79cd039e9fd0f70883ded8f27b52423743759944 Mon Sep 17 00:00:00 2001 From: Kelly Date: Tue, 29 Sep 2020 12:42:32 -0700 Subject: [PATCH 25/26] add example with explicit strings --- .../v2.0/reference/cli/influx/stacks/init.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/content/influxdb/v2.0/reference/cli/influx/stacks/init.md b/content/influxdb/v2.0/reference/cli/influx/stacks/init.md index ae45145ae..23c8caac0 100644 --- a/content/influxdb/v2.0/reference/cli/influx/stacks/init.md +++ b/content/influxdb/v2.0/reference/cli/influx/stacks/init.md @@ -35,10 +35,23 @@ influx stacks init [flags] | `-t` | `--token` | Authentication token | string | `INFLUX_TOKEN` | ## Examples + +### Initialize a stack with a name and description + ```sh -# Initialize a stack with a name and description +# Use environment variables influx stack init -n $STACK_NAME -d $STACK_DESCRIPTION -# Initialize a stack with a name and urls to associate with stack. -influx stack init -n $STACK_NAME -u $PATH_TO_TEMPLATE +# Use strings +influx stack init -n "Example Stack" -d "InfluxDB stack for monitoring some awesome stuff" +``` + +### Initialize a stack with a name and URLs to associate with the stack + +```sh +# Use environment variables +influx stack init -n $STACK_NAME -u $PATH_TO_TEMPLATE + +# Use strings +influx stack init -n "Example Stack" -u https://example.com/template-1.yml ``` From f2656f641fc9265d3ce73cbe1ef2c8e23fa97c1e Mon Sep 17 00:00:00 2001 From: Kelly Date: Tue, 29 Sep 2020 14:35:43 -0700 Subject: [PATCH 26/26] stack updates --- .../v2.0/influxdb-templates/_index.md | 30 ++-- .../v2.0/influxdb-templates/stacks/_index.md | 156 +---------------- .../v2.0/influxdb-templates/stacks/init.md | 2 +- .../v2.0/influxdb-templates/stacks/remove.md | 2 +- .../influxdb-templates/stacks/save-time.md | 165 ++++++++++++++++++ .../v2.0/influxdb-templates/stacks/update.md | 2 +- .../v2.0/influxdb-templates/stacks/view.md | 5 +- 7 files changed, 193 insertions(+), 169 deletions(-) create mode 100644 content/influxdb/v2.0/influxdb-templates/stacks/save-time.md diff --git a/content/influxdb/v2.0/influxdb-templates/_index.md b/content/influxdb/v2.0/influxdb-templates/_index.md index 5ef20b17f..f7716879c 100644 --- a/content/influxdb/v2.0/influxdb-templates/_index.md +++ b/content/influxdb/v2.0/influxdb-templates/_index.md @@ -1,29 +1,31 @@ --- title: InfluxDB templates description: > - InfluxDB templates are prepackaged InfluxDB configurations that contain everything + InfluxDB templates are preconfigured InfluxDB resources and can contain everything from dashboards and Telegraf configurations to notifications and alerts. menu: influxdb_2_0 weight: 9 influxdb/v2.0/tags: [templates] --- -InfluxDB templates are prepackaged InfluxDB configurations that contain everything +InfluxDB templates are preconfigured InfluxDB resources and can contain everything from dashboards and Telegraf configurations to notifications and alerts. -Use InfluxDB templates to quickly set up a fresh instance of InfluxDB, back up your -dashboard configuration, or share your configuration with the InfluxData community. +Use InfluxDB templates to quickly get set up monitoring a specific technology, +set up a fresh instance of InfluxDB, back up your dashboard configuration, or +share your configuration with the InfluxData community. **InfluxDB templates do the following:** -- Reduce setup time -- Facilitate secure, portable, source-controlled InfluxDB platform states. +- Reduce setup time by giving you resources that are already configured for your use-case. +- Facilitate secure, portable, and source-controlled InfluxDB resource states. - Simplify sharing and using pre-built InfluxDB solutions. {{< youtube 2JjW4Rym9XE >}} ## Template manifests -A template consists of a single file known as a **manifest** that defines the -InfluxDB state and associated [resources](#template-resources). + +A template consists of one or more files known as **manifests** that define the +InfluxDB [resources](#template-resources). Template manifests support the following formats: - [YAML](https://yaml.org/) @@ -38,12 +40,13 @@ Template manifests are compatible with The `metadata.name` field in manifests uniquely identifies each resource in the template. `metadata.name` values must be [DNS-1123](https://tools.ietf.org/html/rfc1123) compliant. If resources in the template depend on other InfluxDB resources, all dependencies -must be included in the template. +should be included in the template, otherwise, the resources may not be usable. _See [Create an InfluxDB template](/influxdb/v2.0/influxdb-templates/create/) for information about generating template manifests._ ### Template resources + Include the following **resources** in a template: - buckets @@ -57,11 +60,12 @@ Include the following **resources** in a template: - Telegraf configurations ## Stacks -**InfluxDB stacks** are stateful InfluxDB templates. -When you apply a template, InfluxDB associates resources in the template with a stack. -Use stacks to add, update, or remove templated resources over time. -For more information, see [InfluxDB Stacks](#influxdb-stacks) below. +Use **InfluxDB stacks** to manage InfluxDB templates. +When you apply a template, InfluxDB associates resources in the template with a stack. +Use stacks to add, update, or remove InfluxDB templates over time. + +For more information, see [InfluxDB stacks](#influxdb-stacks) below. --- diff --git a/content/influxdb/v2.0/influxdb-templates/stacks/_index.md b/content/influxdb/v2.0/influxdb-templates/stacks/_index.md index 9a11bfa73..ceaac56d9 100644 --- a/content/influxdb/v2.0/influxdb-templates/stacks/_index.md +++ b/content/influxdb/v2.0/influxdb-templates/stacks/_index.md @@ -10,12 +10,12 @@ related: - /v2.0/reference/cli/influx/pkg/stack/ --- -Use **InfluxDB stacks** to manage [InfluxDB templates](/v2.0/influxdb-templates). +Use InfluxDB stacks to manage [InfluxDB templates](/influxdb/v2.0/influxdb-templates). When you apply a template, InfluxDB associates resources in the template with a stack. Use the stack to add, update, or remove InfluxDB templates over time. -- [Review ideal use cases for InfluxDB stacks](#review-ideal-use-cases-for-influxdb-stacks), - like automating InfluxDB deployments with GitOps and stacks. -- [Manage InfluxDB stacks](#manage-influxdb-stacks) + {{< children type="anchored-list" >}} + + {{< children readmore=true >}} {{% note %}} **Key differences between stacks and templates**: @@ -24,151 +24,3 @@ When you apply a template, InfluxDB associates resources in the template with a - Stacks add, modify or delete resources in an instance. - Templates do not recognize resources in an instance. All resources in the template are added, creating duplicate resources if a resource already exists. {{% /note %}} - -## Review ideal use cases for InfluxDB stacks - -Use stacks to save time in the following cases: - -- [Automate deployments with GitOps and stacks](#automate-deployments-with-gitops-and-stacks) -- [Apply updates from source-controlled templates](#apply-updates-from-source-controlled-templates) -- [Apply template updates across multiple InfluxDB instances](#apply-template-updates-across-multiple-influxdb-instances) -- [Develop templates](#develop-templates) - -### Automate deployments with GitOps and stacks - -GitOps is popular way to configure and automate deployments. Use InfluxDB stacks in a GitOps workflow -to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. - -#### Set up a GitHub repository to back your InfluxDB instance - -Determine how you want to organize the resources in your stacks within your Github repository. For example, organize resources under folders for specific teams or functions. - -We recommend storing all resources for one stack in the same folder. For example, if you monitor Redis, create a `redis` stack and put your Redis monitoring resources (a Telegraf configuration, four dashboards, a label, and two alert checks) into one Redis folder, each resource in a separate file. Then, when you need to update a Redis resource, it's easy to find and make changes in one location. - - {{% note %}} - Typically, we **do not recommend** using the same resource in multiple stacks. If your organization uses the same resource in multiple stacks, before you delete a stack, verify the stack does not include resources that another stack depends on. Stacks with buckets often contain data used by many different templates. Because of this, we recommend keeping buckets separate from the other stacks. - {{% /note %}} - -#### Populate your GitHub repository with the existing resources in your instance - -Skip this section if you are starting from scratch or don’t have existing resources you want to add to your stack. If you do have resources you'd like to use, run the `influx export` command to quickly export resources. Keep all your resources in a single file or have files for each one. You can always split or combine them later. - -For example, if you export resources for three stacks: `buckets`, `redis`, and `mysql`, your folder structure might look something like this when you are done: - -```sh -influxdb-assets/ -├── buckets/ -│ ├── telegraf_bucket.yml -├── redis/ -│ ├── redis_overview_dashboard.yml -│ ├── redis_label.yml -│ ├── redis_cpu_check.yml -│ └── redis_mem_check.yml -├── mysql/ -│ ├── mysql_assets.yml -└── README.md - -``` - {{% note %}} - When you export a resource, InfluxDB creates a `meta.name` for that resource. These resource names should be unique inside your InfluxDB instance. Use a good naming convention to prevent duplicate `meta.names`. Changing the `meta.name` of the InfluxDB resource will cause the stack to orphan the resource with the previous name and create a new resource with the updated name. - {{% /note %}} - -#### Automate the creation of a stack for each folder - -To automatically create a stack from each folder in your GitHub repository, create a shell script to check for an existing stack and if the stack isn't found, use the `influx stacks init` command to create a new stack. The following sample script creates a `redis` stack and automatically apply those changes to your instance: - -```sh -echo "Checking for existing redis stack..." -REDIS_STACK_ID=$(influx stacks --stack-name redis --json | jq -r '.[0].ID') -if [ "$REDIS_STACK_ID" == "null" ]; then - echo "No stack found. Initializing our stack..." - REDIS_STACK_ID=$(influx stacks init -n redis --json | jq -r '.ID') -fi - -# Setting the base path -BASE_PATH="$(pwd)" - -echo "Applying our redis stack..." -cat $BASE_PATH/redis/*.yml | \ -influx apply --force true --stack-id $REDIS_STACK_ID -q -``` - - {{% note %}} - The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI. This flag lets you grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). - {{% /note %}} - -Repeat this step for each of the stacks in your repository. When a resource in your stack changes, re-run this script to apply updated resources to your InfluxDB instance. Re-applying a stack with an updated resource won't add, delete, or duplicate resources. - -#### Automate deployment using Github Actions or CircleCI - -Once you have a script to apply changes being made to your local instance, automate the deployment to other environments as needed. Use the InfluxDB CLI to maintain multiple [configuration profiles]() to easily switch profile and issue commands against other InfluxDB instances. To apply the same script to a different InfluxDB instance, change your active configuration profile using the `influx config set` command. Or set the desired profile dynamically using the `-c, --active-config` flag. - - {{% note %}} - Before you run automation scripts against shared environments, we recommend manually running the steps in your script. - {{% /note %}} - -Verify your deployment automation software lets you run a custom script, and then set up the custom script you've built locally another environment. For example, here's a custom Github Action that automates deployment: - -```yml -name: deploy-influxdb-resources - -on: - push: - branches: [ master ] - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - name: Deploys repo to cloud - env: - # These secrets can be configured in the Github repo to connect to - # your InfluxDB instance. - INFLUX_TOKEN: ${{ secrets.INFLUX_TOKEN }} - INFLUX_ORG: ${{ secrets.INFLUX_ORG }} - INFLUX_URL: ${{ secrets.INFLUX_URL }} - GITHUB_REPO: ${{ github.repository }} - GITHUB_BRANCH: ${{ github.ref }} - run: | - cd /tmp - wget https://dl.influxdata.com/platform/nightlies/influx_nightly_linux_amd64.tar.gz - tar xvfz influx_nightly_linux_amd64.tar.gz - sudo cp influx_nightly_linux_amd64/influx /usr/local/bin/ - cd $GITHUB_WORKSPACE - # This runs the script to set up your stacks - chmod +x ./setup.sh - ./setup.sh prod -``` - -For more information about using GitHub Actions in your project, check out the complete [Github Actions documentation](https://github.com/features/actions). - -### Apply updates from source-controlled templates - -You can use a variety of InfluxDB templates from many different sources including -[Community Templates](https://github.com/influxdata/community-templates/) or -self-built custom templates. -As templates are updated over time, stacks allow template users to gracefully -apply updates without creating duplicate resources. - -### Apply template updates across multiple InfluxDB instances - -In many cases, users have more than one instance of InfluxDB running and apply -the same template to each separate instance. -By using stacks, you can make changes to a stack on one instance, -[export the stack as a template](/v2.0/influxdb-templates/create/#export-a-stack) -and then apply the changes to your other InfluxDB instances. - -### Develop templates - -InfluxDB stacks aid in developing and maintaining InfluxDB templates. -Stacks let you modify and update template manifests and apply those changes in -any stack that uses the template. - -## Manage InfluxDB stacks - -{{< children type="anchored-list" >}} - -{{< children readmore=true >}} diff --git a/content/influxdb/v2.0/influxdb-templates/stacks/init.md b/content/influxdb/v2.0/influxdb-templates/stacks/init.md index 4d7bf1b86..be9e63a24 100644 --- a/content/influxdb/v2.0/influxdb-templates/stacks/init.md +++ b/content/influxdb/v2.0/influxdb-templates/stacks/init.md @@ -9,7 +9,7 @@ menu: influxdb_2_0: parent: InfluxDB stacks name: Initialize a stack -weight: 201 +weight: 202 related: - /influxdb/v2.0/reference/cli/influx/stacks/init/ list_code_example: | diff --git a/content/influxdb/v2.0/influxdb-templates/stacks/remove.md b/content/influxdb/v2.0/influxdb-templates/stacks/remove.md index 2f52db016..68520402a 100644 --- a/content/influxdb/v2.0/influxdb-templates/stacks/remove.md +++ b/content/influxdb/v2.0/influxdb-templates/stacks/remove.md @@ -8,7 +8,7 @@ menu: influxdb_2_0: parent: InfluxDB stacks name: Remove a stack -weight: 204 +weight: 205 related: - /influxdb/v2.0/reference/cli/influx/stacks/remove/ list_code_example: | diff --git a/content/influxdb/v2.0/influxdb-templates/stacks/save-time.md b/content/influxdb/v2.0/influxdb-templates/stacks/save-time.md new file mode 100644 index 000000000..4d16a48ca --- /dev/null +++ b/content/influxdb/v2.0/influxdb-templates/stacks/save-time.md @@ -0,0 +1,165 @@ +--- +title: Save time with InfluxDB stacks +list_title: Save time with stacks +description: > + Discover how to use InfluxDB stacks to save time. +menu: + influxdb_2_0: + parent: InfluxDB stacks + name: Save time with stacks +weight: 201 +related: + - /influxdb/v2.0/reference/cli/influx/stacks/ + +--- + +Save time and money using InfluxDB stacks. Here's a few ideal use cases: + +- [Automate deployments with GitOps and stacks](#automate-deployments-with-gitops-and-stacks) +- [Apply updates from source-controlled templates](#apply-updates-from-source-controlled-templates) +- [Apply template updates across multiple InfluxDB instances](#apply-template-updates-across-multiple-influxdb-instances) +- [Develop templates](#develop-templates) + +### Automate deployments with GitOps and stacks + +GitOps is popular way to configure and automate deployments. Use InfluxDB stacks in a GitOps workflow +to automatically update distributed instances of InfluxDB OSS or InfluxDB Cloud. + +To automate an InfluxDB deployment with GitOps and stacks, complete the following steps: + +1. [Set up a GitHub repository](#set-up-a-github-repository) +2. [Add existing resources to the GitHub repository](#add-existing-resources-to-the-github-repository) +3. [Automate the creation of a stack for each folder](#automate-the-creation-of-a-stack-for-each-folder) +4. [Set up Github Actions or CircleCI](#set-up-github-actions-or-circleci) + +#### Set up a GitHub repository + +Set up a GitHub repository to back your InfluxDB instance. Determine how you want to organize the resources in your stacks within your Github repository. For example, organize resources under folders for specific teams or functions. + +We recommend storing all resources for one stack in the same folder. For example, if you monitor Redis, create a `redis` stack and put your Redis monitoring resources (a Telegraf configuration, four dashboards, a label, and two alert checks) into one Redis folder, each resource in a separate file. Then, when you need to update a Redis resource, it's easy to find and make changes in one location. + + {{% note %}} + Typically, we **do not recommend** using the same resource in multiple stacks. If your organization uses the same resource in multiple stacks, before you delete a stack, verify the stack does not include resources that another stack depends on. Stacks with buckets often contain data used by many different templates. Because of this, we recommend keeping buckets separate from the other stacks. + {{% /note %}} + +#### Add existing resources to the GitHub repository + +Skip this section if you are starting from scratch or don’t have existing resources you want to add to your stack. + +Use the `influx export` command to quickly export resources. Keep all your resources in a single file or have files for each one. You can always split or combine them later. + +For example, if you export resources for three stacks: `buckets`, `redis`, and `mysql`, your folder structure might look something like this when you are done: + + ```sh + influxdb-assets/ + ├── buckets/ + │ ├── telegraf_bucket.yml + ├── redis/ + │ ├── redis_overview_dashboard.yml + │ ├── redis_label.yml + │ ├── redis_cpu_check.yml + │ └── redis_mem_check.yml + ├── mysql/ + │ ├── mysql_assets.yml + └── README.md + + ``` + {{% note %}} + When you export a resource, InfluxDB creates a `meta.name` for that resource. These resource names should be unique inside your InfluxDB instance. Use a good naming convention to prevent duplicate `meta.names`. Changing the `meta.name` of the InfluxDB resource will cause the stack to orphan the resource with the previous name and create a new resource with the updated name. + {{% /note %}} + +Add the exported resources to your new GitHub repository. + +#### Automate the creation of a stack for each folder + +To automatically create a stack from each folder in your GitHub repository, create a shell script to check for an existing stack and if the stack isn't found, use the `influx stacks init` command to create a new stack. The following sample script creates a `redis` stack and automatically applies those changes to your instance: + +```sh +echo "Checking for existing redis stack..." +REDIS_STACK_ID=$(influx stacks --stack-name redis --json | jq -r '.[0].ID') +if [ "$REDIS_STACK_ID" == "null" ]; then + echo "No stack found. Initializing our stack..." + REDIS_STACK_ID=$(influx stacks init -n redis --json | jq -r '.ID') +fi + +# Setting the base path +BASE_PATH="$(pwd)" + +echo "Applying our redis stack..." +cat $BASE_PATH/redis/*.yml | \ +influx apply --force true --stack-id $REDIS_STACK_ID -q +``` + + {{% note %}} + The `--json` flag in the InfluxDB CLI is very useful when scripting against the CLI. This flag lets you grab important information easily using [`jq`](https://stedolan.github.io/jq/manual/v1.6/). + {{% /note %}} + +Repeat this step for each of the stacks in your repository. When a resource in your stack changes, re-run this script to apply updated resources to your InfluxDB instance. Re-applying a stack with an updated resource won't add, delete, or duplicate resources. + +#### Set up Github Actions or CircleCI + +Once you have a script to apply changes being made to your local instance, automate the deployment to other environments as needed. Use the InfluxDB CLI to maintain multiple [configuration profiles]() to easily switch profile and issue commands against other InfluxDB instances. To apply the same script to a different InfluxDB instance, change your active configuration profile using the `influx config set` command. Or set the desired profile dynamically using the `-c, --active-config` flag. + + {{% note %}} + Before you run automation scripts against shared environments, we recommend manually running the steps in your script. + {{% /note %}} + +Verify your deployment automation software lets you run a custom script, and then set up the custom script you've built locally another environment. For example, here's a custom Github Action that automates deployment: + +```yml +name: deploy-influxdb-resources + +on: + push: + branches: [ master ] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + - name: Deploys repo to cloud + env: + # These secrets can be configured in the Github repo to connect to + # your InfluxDB instance. + INFLUX_TOKEN: ${{ secrets.INFLUX_TOKEN }} + INFLUX_ORG: ${{ secrets.INFLUX_ORG }} + INFLUX_URL: ${{ secrets.INFLUX_URL }} + GITHUB_REPO: ${{ github.repository }} + GITHUB_BRANCH: ${{ github.ref }} + run: | + cd /tmp + wget https://dl.influxdata.com/platform/nightlies/influx_nightly_linux_amd64.tar.gz + tar xvfz influx_nightly_linux_amd64.tar.gz + sudo cp influx_nightly_linux_amd64/influx /usr/local/bin/ + cd $GITHUB_WORKSPACE + # This runs the script to set up your stacks + chmod +x ./setup.sh + ./setup.sh prod +``` + +For more information about using GitHub Actions in your project, check out the complete [Github Actions documentation](https://github.com/features/actions). + +### Apply updates from source-controlled templates + +You can use a variety of InfluxDB templates from many different sources including +[Community Templates](https://github.com/influxdata/community-templates/) or +self-built custom templates. +As templates are updated over time, stacks let you gracefully +apply updates without creating duplicate resources. + +### Apply template updates across multiple InfluxDB instances + +In many cases, you may have more than one instance of InfluxDB running and want to apply +the same template to each separate instance. +Using stacks, you can make changes to a stack on one instance, +[export the stack as a template](/influxdb/v2.0/influxdb-templates/create/#export-a-stack) +and then apply the changes to your other InfluxDB instances. + +### Develop templates + +InfluxDB stacks aid in developing and maintaining InfluxDB templates. +Stacks let you modify and update template manifests and apply those changes in +any stack that uses the template. diff --git a/content/influxdb/v2.0/influxdb-templates/stacks/update.md b/content/influxdb/v2.0/influxdb-templates/stacks/update.md index b8e7c3ed8..4fe3cd0df 100644 --- a/content/influxdb/v2.0/influxdb-templates/stacks/update.md +++ b/content/influxdb/v2.0/influxdb-templates/stacks/update.md @@ -12,7 +12,7 @@ menu: influxdb_2_0: parent: InfluxDB stacks name: Update a stack -weight: 202 +weight: 203 related: - /influxdb/v2.0/reference/cli/influx/apply - /influxdb/v2.0/reference/cli/influx/stacks/update/ diff --git a/content/influxdb/v2.0/influxdb-templates/stacks/view.md b/content/influxdb/v2.0/influxdb-templates/stacks/view.md index c19d91f05..0ea7b21e0 100644 --- a/content/influxdb/v2.0/influxdb-templates/stacks/view.md +++ b/content/influxdb/v2.0/influxdb-templates/stacks/view.md @@ -8,7 +8,7 @@ menu: influxdb_2_0: parent: InfluxDB stacks name: View stacks -weight: 203 +weight: 204 related: - /influxdb/v2.0/reference/cli/influx/stacks/ list_code_example: | @@ -34,10 +34,12 @@ influx stacks -o example-org ``` ### Filter stacks + To output information about specific stacks, use the `--stack-name` or `--stack-id` flags to filter output by stack names or stack IDs. ##### Filter by stack name + ```sh # Syntax influx stacks \ @@ -52,6 +54,7 @@ influx stacks \ ``` ### Filter by stack ID + ```sh # Syntax influx stacks \