This is an idea that is on my mind for quite some time and I struggle to find the software that implements it. And I am not implementing it by myself, for the moment. But maybe this is some challenge for you?

The Idea

To create a software that can offer a simple portal to instantiate Terraform modules and manage the state of the instance (CREATE/UPDATE/DELETE). The focus is on allowing novice users to create their own instances of a Terraform module created and maintained by experts. The novice user shall be able to create VMs, Cluster, Users, Groups, Permissions, etc.. that are offered in a catalog of services, the “ServiceHub”.

Features

Following a list of features.

Type Description
must Service catalog
must Instance CREATE/UPDATE/DELETE
must Mass management of service instances (eg. CREATE/DELETE)
must Simple portal in self-service fashion, catalog and service instances
must Parameterized CREATE
must State storage
could LDAP/AD authentication
could State sub-store (eg. path) of user’s instances
could Role based access control
could Permission management for instances
could Obfuscate secrets
could Inheritance of predefined parameters and secrets
could Versioning of catalog items and instances pinned that version
could Smooth Git integration
could High Availability, Microservice

Possible implementation

When thinking of a possible implementation, I would see the following components. Preferably as microservices on a container cluster.

  • Web interface with Ruby on Rails or Sinatra
  • Central Terraform state storage with s3/minio object storage
  • Other storage also by s3/minio
  • Sidekiq as job queue
  • Workers executing Terraform as jobs from queue

What about Terraform Cloud & Enterprise?

Terraform Cloud & Enterprise seem nice for a skilled group of experts to leverage a service kind of portal. However it is not suitable (in my humble opinion) for the average person, the non-expert and a large sized enterprise as a self-service portal.

What about others?

There is ServiceNow and some other GUIs that implement a kinda like solution, however they are either too specific or too closed source to leverage.

Post

Do you have ideas? Are you open to implement this idea?