rootsystem/terraform-modules/ReadMe.md

38 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

# rootsystem-terraform-modules
[Terraform](https://terraform.io/) is an infrastructure-as-code automation tool that is designed to make it easier to deploy and maintain cloud resources.
Rootsystem uses Terraform to manage cloud resources as a part of a [server.garden](https://server.garden) deployment.
## Why is this needed?
[server.garden](https://server.garden) strives to make it easy for any internet user to host thier own server(s). This is difficult because hosting a server does not "just work" on most networks, especially home networks. [server.garden](https://server.garden) solves this using something that the software industry calls "Hybrid Cloud Architechture", meaning that the system is built from both servers that you own & operate, and cloud resources that you pay someone else to operate.
Hybrid Cloud Architechture works well with self-hosting because we get to chose where we draw the line between what we own and what the cloud provider owns.
| Owned by User | Owned by Cloud Service Provider |
| ------------- | ------------- |
| Server Computers | Public IP Address |
| Transport Layer Security (TLS) Keys | Domain Name & DNS Records |
| Decrypted TCP Packets | Encrypted TLS Packets |
In other words, we get the best of both worlds, and we can be flexible on how much work we want to take on ourselves.
We use terraform to manage the cloud resources to make that happen.
## How does rootsystem build a terraform project out of this?
Rootsystem analyzes the modules and records the names of the inputs and outputs. Modules with matching input/output names will automatically be wired together. This allows, for example, the user to chose which cloud provider(s) they want to use.
Input names that end in `list` will match up with any outputs that have a matching prefix. For example:
The two outputs
`dns_entry_root` and `dns_entry_www`
would be wired into entries in a list for a single input called `dns_entry_list`
When the user creates server.garden installation media, they will be prompted to select which modules they want to use via an installation wizard.
## Third party Terraform providers used by these modules
https://github.com/tiramiseb/terraform-provider-gandi