🔥 Real-World Examples: Explore Our Salesforce & ManoMano Case Studies! 🔥 Read Now

Sync Chaos Engineering Templates with Ease

10.10.2024 Manuel Gerding - 8 minute read
Sync Chaos Engineering Templates with Ease

Knowledge sharing is crucial to success when rolling out Chaos Engineering in your organization. With the recent release of experiment templates, we invested heavily in making it easier to share knowledge and help teams get started with Chaos Engineering.

Administrators can create their own experiment templates to offer tailored experiment suggestions to their teams. However, as some of our customers use Steadybit on-premise and run multiple platform instances, keeping all templates in sync across platform instances has always been challenging. This blog post covers how to solve this challenge using hub connections and API-based template synchronization.

 

Recap: Ease Experiment Creation via Templates

Let’s quickly recap why experiment templates are so powerful for knowledge sharing and helping your teams to start with Chaos Engineering.

First, let’s focus on using a template to create a new experiment: You are guided step-by-step through the creation of the experiment via a customizable wizard. This approach helps to build the overall scenario. Of course, you get the same powerful auto-completion of values to avoid trial-and-error when setting up everything.

Steadybit interface showing the process to create a new experiment from a template, focused on a Kubernetes deployment with Redis latency.

Naturally, administrators can tailor the available templates and create their own experiment templates in the template editor. Here, they get the powerful drag-and-drop editor to design their scenario easily.

Steadybit interface displaying experiment configuration steps for testing Redis latency in Kubernetes deployment

To make a template universally applicable, you can use template placeholders that result in wizard steps when using the template. You can arrange the placeholders freely, describe them via Markdown, and reference them across multiple steps. This makes it easy for teams to use a template by giving them full context on what to fill in.

Template placeholders screen on Steadybit, highlighting variables for Kubernetes deployments and Redis configurations.

Hub Connections

Now, with hub connections, you can connect Reliability Hubs – like the one from Steadybit available at https://hub.steadybit.com/ – to sync content to your platform.

Steadybit’s Reliability Hub is connected by default, and templates may already be synced to your platform. You can import new templates or update already imported ones whenever you want. This way, the Hub is always the single point of truth for all your Chaos Engineering efforts. In addition, you can host your own private hub, as you’ll learn in the next section.

Steadybit interface displaying template selection options for Kubernetes deployment and database alert scenarios.

 

Private Hubs

Hosting your own private hub is easy! All you need is a JSON-based index file served via HTTP that references available content (i.e., template).

The easiest way to learn how it works is to check out Steadybit’s Reliability Hub Database, which is available as a public GitHub repository: steadybit/reliability-hub-db. The index.json contains a `lastChange` UNIX timestamp and references all supported templates. An individual template.json file is exactly the template file exported from the platform.

Code snippet showing template files and their paths for various scenarios including AWS, Redis, and PostgreSQL.

Whenever you sync the platform with the hub, it only fetches all individual templates when the `lastChange` UNIX timestamp has changed.

 

Sync Templates via API

To keep multiple platforms in sync, you can use the Hub as a single source of truth by connecting it to all your on-premise platforms and periodically re-importing existing templates. This is a perfect job for automation via API!

To do this, you need to set up an Administrator Access Token. Once authenticated, you need to perform three simple steps:

  1. Connect and sync new Hub
  2. Fetch Templates from Hub
  3. Import Templates from Hub

 

1. Connect and Sync New Hub

The first step is to connect the new hub. This step only needs to be done once. When connecting the hub, you can also immediately fetch all templates, but we’ll do this in step 2.

curl 'https://platform.steadybit.com/api/hubs?synchronize=false' \

--header 'Content-Type: application/json' \

--header 'Accept: application/vnd.steadybit.api.v1+json' \

--header 'Authorization: accessToken <replace-access-token>' \

--data '{

  "hubName": "My Private Reliability Hub",

  "repositoryUrl": "<link-to-index.json>",

  "hubLink": "<optional-public-link-for-hosted-UI>"

}'

The response body contains the id of the newly added hub, which you can extract by piping it to jq (appending `| jq ‘.id’` to the above command).

2. Fetch Templates From Hub

Now, you must fetch all the templates available in the connected hub. You can easily do that using the following curl command, referencing the added hub of step 1 via id.

curl -X POST 'https://platform.steadybit.com/api/hubs/<replace-hub-id>/resync' \

--header 'Content-Type: application/json' \

--header 'Authorization: accessToken <replace-access-token>' | jq -r '.templates | map(.id)'

The body contains all template IDs you can import in the last step.

[

  "0363a90e-9563-494c-bd25-81da6e4c3d20",

  "0363a90e-9563-494c-bd25-81da6e4c3d21",

  //…

]

3. Import Templates From Hub

Finally, we import the templates from the connected hub via a single API command. You can decide always to overwrite or just import the missing ones.

curl --location 'https://platform.steadybit.com/api/experiments/templates/imports?overwrite=true' \

--header 'Content-Type: application/json' \

--header 'Authorization: accessToken <replace-access-token>' \

--data '{

  "hubId": "<replace-hub-id>",

  "templates": [

    <replace-template-ids>

  ]

}'

Summary

In this blog post, we addressed the challenge of maintaining the consistency of experiment templates across multiple on-premise platforms by providing a robust solution using hub connections and API-based synchronization. You can ensure your templates remain up-to-date by leveraging Steadybit’s Reliability Hub or hosting your own private hub.

If you want to explore which templates we provide, check out the Steadybit Reliability Hub or sign up for a free trial at signup.steadybit.com and create your first experiment using one of the templates.