38 lines
2.2 KiB
Markdown
38 lines
2.2 KiB
Markdown
|
|
||
|
# 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
|