bitovi/bitops

Operations Repo Composability

Opened this issue · 2 comments

Purpose

Operations repos give an opportunity to configure sets of configurations across multiple IaC tools. Once you have a catalog (either your own set of ops repos/ops repo environments or a community provided set), it becomes easier to quick-start with stacks of configurations.
The problem even with a catalog is that users still need to copy configuration into their own ops repo environments.

This issue is to outline an approach to allow referencing external ops repos/ops repo environments rather than having to copy them directly.

Implementation thoughts

Introduce a bitops.config.yaml at the environment level (which has other benefits as well) which has a block to the effect of:

default-environments:
- repo: https://github.com/bitops-operations-repos/kubernetes
  environment: eks
  version: 1.0.0
- repo: https://github.com/bitops-operations-repos/observability
  environment: promStack
  version: 1.2.0
- repo: https://github.com/bitops-operations-repos/observability
  environment: grafanaStack
  version: 1.1.0
- repo: https://github.com/bitops-operations-repos/k8s-ingress
  environment: nginx
  version: 1.0.0
- repo: https://github.com/bitops-operations-repos/k8s-service-mesh
  environment: istio
  version: 1.0.5

In this example, the deploy time execution of bitops against the environment in which this bitops.config.yaml is specified would first pull each of the external repos, then it would extract the specified environment contents, and then it would include the contents into the deployment configuration.

The above example would be sufficient to spin up an EKS cluster and add a prometheus stack (prom, node-exporter, alertmanager, etc), a grafana stack (grafana, loki, etc), an nginx ingress controller, and istio.

Obviously, much discussion should be had on exactly how these mechanisms work and what else can/should be specified.

You could add stackstorm like:

default-environments:
- repo: https://github.com/bitops-operations-repos/kubernetes
  environment: eks
  version: 1.0.0
- repo: https://github.com/bitops-operations-repos/observability
  environment: promStack
  version: 1.2.0
- repo: https://github.com/bitops-operations-repos/observability
  environment: grafanaStack
  version: 1.1.0
- repo: https://github.com/bitops-operations-repos/k8s-ingress
  environment: nginx
  version: 1.0.0
- repo: https://github.com/bitops-operations-repos/k8s-service-mesh
  environment: istio
  version: 1.0.5
- repo: https://github.com/bitops-operations-repos/stackstorm
  environment: ha-k8s
  version: 1.0.0

You could have a VM-based HA stackstorm like:

default-environments:
- repo: https://github.com/bitops-operations-repos/stackstorm
  environment: ha-vm-aws
  version: 1.0.0

this would pull in terraform to spin up a set of VMs and then use ansible to provision StackStorm in a HA setup