If I want to orchestrate docker containers or virtual machines in a simple way, what should I use?
Maybe https://bigconfig.it can help here.
bigconfig looks like a step toward a full clojure orchestration system. Delegating to ansible and terraform doesn't make sense to me.
Something like gnu guix for IaC in clojure would be cool.
Gnu guix specifies an entire OS in guile scheme. I prefer doing everything in one language.
I also don't feel comfortable about using terraform because hashicorp threatened opentofu for forking terraform.
@mr.doojin Please share the code of the final solution if you can. I'm curious to see new ideas applied to this problem. I'm replacing Terraform with Terraform/Tofu in the documentation to avoid the misunderstanding that BigConfig works Terraform but not with Opentofu.
I don't have anything, yet. I just have ideas for now. In the absence of a final solution, your solution may be good enough if you actually prefer terraform and ansible. I know what ansible is. I'm just getting familiar with terraform. I had been away from professional development for 10 years. I'm just getting back. I was thinking about using platform-specific(AWS, GCP, ...) orchestration APIs in clojure and using gnu guix for specifying an OS, but that's already two languages. If I use cloud APIs, then I don't cover on-premise deployment. Kubernetes seems a lot more complex than it can be. I'm just getting to know.
Welcome back to professional development. When choosing between the AWS API and Terraform, I recommend Terraform for its declarative power. Think of BigConfig as a workflow engine where each step is simply a function. These functions are highly versatile; they can execute anything from internal logic to subprocesses like OpenTofu. While Kubernetes offers a powerful programmable platform, it’s likely overkill for your initial needs. The ultimate goal of a BigConfig Package is universal portability, it’s essentially a single workflow that uses branching logic to adapt to different destination environments. https://bigconfig.it/use-cases/package/
I studied file formats and APIs for declarative cloud configuration. If I want to programmatically declare cloud infrastructure in one language, it seems my choice is either self-hosted pulumi server and pulumi java library or (bigconfig) terraform generation in clojure.
Unless and until I use nixos or gnu guix, ansible is a good choice for declaring OS configuration.
You don't recommend pulumi?
After comparing pulumi and terraform, I concluded that generating terraform JSON config in clojure is better. If I don't want to pay pulumi, I have to manage a self-hosted pulumi instance. That's extra burden. I get programmable declarative configuration from either programmatic terraform config or pulumi java API. Pulumi employees said pulumi is declarative. If both pulumi and terraform are declarative, terraform also can be programmatically orchestrated and doesn't require an extra server.
So, I will be generating terraform and ansible from clojure.
docker compose may be handy in addition to terraform and ansible if I want to orchestrate working app snapshots. I can also generate docker compose config from clojure?
probably docker compose
If docker containers run in one host, docker compose is good enough.
I think there is value in picking small-scale solutions for small businesses.
If your business is growing, you can always learn the right tools for higher-scale operations on the fly.
I think docker containers are good for capturing a working snapshot of an application and its operating environment. It might be difficult to reproduce that environment in the future.