Terraform module for managing servers in the Hetzner Cloud.
It implements the following provider resources:
module "server" {
source = "github.com/peterpramb/terraform-hcloud-servers?ref=<release>"
servers = [
{
name = "server-1.example.net"
image = "rocky-9"
server_type = "cx11"
backups = false
datacenter = null
dns_ptr = "server-1.example.net"
firewalls = []
iso = null
keep_disk = true
location = "nbg1"
networks = [
{
name = "network-1"
subnet_id = "171740-10.0.0.0/24"
alias_ips = []
ip = "10.0.0.10"
}
]
placement = "57826"
protection = true
public_net = [
"11011913",
"disabled"
]
rescue = null
ssh_keys = [
"ssh-key-1"
]
user_data = file("${path.module}/cloud-init.yml")
labels = {
"managed" = "true"
"managed_by" = "Terraform"
}
}
]
}
See examples for more usage details.
Name | Version |
---|---|
terraform | ≥ 0.13 |
Name | Version |
---|---|
hcloud | ≥ 1.35 |
Name | Description | Type | Default | Required |
---|---|---|---|---|
servers | List of server objects to be managed. | list(map(server)) | See below | yes |
Name | Description | Type | Required |
---|---|---|---|
name | Unique name of the server. | string | yes |
image | Name or ID of the server image. | string | yes |
server_type | Type of the server to be created. | string | yes |
backups | Enable backups for the server. | bool | no |
datacenter | Name of the datacenter to create the server in. | string | no |
dns_ptr | DNS name the host IPs should resolve to. | string | no |
firewalls | List of firewall IDs to assign to the server. | list(number) | no |
iso | Name or ID of the ISO image to mount. | string | no |
keep_disk | Keep disk unchanged on server rescale. | bool | no |
location | Name of the location to create the server in. | string | no |
networks | List of network objects. | list(map(network)) | no |
placement | ID of the placement group to assign to the server. | string | no |
protection | Protect server from deletion. | bool | no |
public_net | The primary IP(s) to assign to the server. | tuple(public_net) | no |
rescue | Name of the rescue system to boot into. | string | no |
ssh_keys | List of SSH key names or IDs to be deployed. | list(string) | no |
user_data | Cloud-Init user data to be used for setup. | string | no |
labels | Map of user-defined labels. | map(string) | no |
Name | Description | Type | Required |
---|---|---|---|
name | Name of the network to assign to the server. | string | yes |
subnet_id | ID of the subnet to assign to the server. | string | yes |
alias_ips | List of additional IPs to assign to the server. | list(string) | no |
ip | Main IP address to assign to the server. | string | no |
Index | Description | Type | Required |
---|---|---|---|
[0] | The primary IPv4 address to assign to the server. | string | yes |
[1] | The primary IPv6 network to assign to the server. | string | yes |
servers = [
{
name = "server-1"
image = "rocky-9"
server_type = "cx11"
backups = false
datacenter = null
dns_ptr = null
firewalls = []
iso = null
keep_disk = false
location = null
networks = []
placement = null
protection = false
public_net = null
rescue = null
ssh_keys = []
user_data = null
labels = {}
}
]
Name | Description |
---|---|
servers | List of all server objects. |
server_ids | Map of all server objects indexed by ID. |
server_names | Map of all server objects indexed by name. |
server_rdns | List of all server RDNS objects. |
server_rdns_ids | Map of all server RDNS objects indexed by ID. |
server_rdns_names | Map of all server RDNS objects indexed by name. |
server_networks | List of all server network objects. |
server_network_ids | Map of all server network objects indexed by ID. |
server_network_names | Map of all server network objects indexed by name. |
servers = [
{
"backup_window" = ""
"backups" = false
"datacenter" = "nbg1-dc3"
"delete_protection" = false
"firewall_ids" = []
"id" = "8002775"
"image" = "rocky-9"
"ipv4_address" = "192.0.2.1"
"ipv6_address" = "2001:DB8::1"
"ipv6_network" = "2001:DB8::/64"
"keep_disk" = false
"labels" = {}
"location" = "nbg1"
"name" = "server-1"
"networks" = []
"public_net" = [
{
"ipv4" = 0
"ipv4_enabled" = true
"ipv6" = 0
"ipv6_enabled" = true
},
]
"rdns" = []
"rebuild_protection" = false
"server_type" = "cx11"
"ssh_keys" = []
"status" = "running"
},
]
server_ids = {
"8002775" = {
"backup_window" = ""
"backups" = false
"datacenter" = "nbg1-dc3"
"delete_protection" = false
"firewall_ids" = []
"id" = "8002775"
"image" = "rocky-9"
"ipv4_address" = "192.0.2.1"
"ipv6_address" = "2001:DB8::1"
"ipv6_network" = "2001:DB8::/64"
"keep_disk" = false
"labels" = {}
"location" = "nbg1"
"name" = "server-1"
"networks" = []
"public_net" = [
{
"ipv4" = 0
"ipv4_enabled" = true
"ipv6" = 0
"ipv6_enabled" = true
},
]
"rdns" = []
"rebuild_protection" = false
"server_type" = "cx11"
"ssh_keys" = []
"status" = "running"
}
}
server_names = {
"server-1" = {
"backup_window" = ""
"backups" = false
"datacenter" = "nbg1-dc3"
"delete_protection" = false
"firewall_ids" = []
"id" = "8002775"
"image" = "rocky-9"
"ipv4_address" = "192.0.2.1"
"ipv6_address" = "2001:DB8::1"
"ipv6_network" = "2001:DB8::/64"
"keep_disk" = false
"labels" = {}
"location" = "nbg1"
"name" = "server-1"
"networks" = []
"public_net" = [
{
"ipv4" = 0
"ipv4_enabled" = true
"ipv6" = 0
"ipv6_enabled" = true
},
]
"rdns" = []
"rebuild_protection" = false
"server_type" = "cx11"
"ssh_keys" = []
"status" = "running"
}
}
server_rdns = []
server_rdns_ids = {}
server_rdns_names = {}
server_networks = []
server_network_ids = {}
server_network_names = {}
This module is released under the MIT License.