diff --git a/agents.tf b/agents.tf index 6732d30..b7f45cc 100644 --- a/agents.tf +++ b/agents.tf @@ -3,7 +3,7 @@ module "agents" { for_each = local.agent_nodepools - name = "${var.use_cluster_name_in_node_name ? "${random_pet.cluster.id}-" : ""}${each.value.nodepool_name}" + name = "${var.use_cluster_name_in_node_name ? "${var.cluster_name}-" : ""}${each.value.nodepool_name}" ssh_keys = [hcloud_ssh_key.k3s.id] public_key = var.public_key private_key = var.private_key diff --git a/control_planes.tf b/control_planes.tf index a8957aa..fee3bb2 100644 --- a/control_planes.tf +++ b/control_planes.tf @@ -2,7 +2,7 @@ module "control_planes" { source = "./modules/host" count = var.control_plane_count - name = "${var.use_cluster_name_in_node_name ? "${random_pet.cluster.id}-" : ""}control-plane" + name = "${var.use_cluster_name_in_node_name ? "${var.cluster_name}-" : ""}control-plane" ssh_keys = [hcloud_ssh_key.k3s.id] public_key = var.public_key private_key = var.private_key diff --git a/init.tf b/init.tf index e07bc45..4b64e15 100644 --- a/init.tf +++ b/init.tf @@ -94,7 +94,7 @@ resource "null_resource" "kustomization" { content = local.is_single_node_cluster ? "" : templatefile( "${path.module}/templates/traefik_config.yaml.tpl", { - name = "${random_pet.cluster.id}-traefik" + name = "${var.cluster_name}-traefik" load_balancer_disable_ipv6 = var.load_balancer_disable_ipv6 load_balancer_type = var.load_balancer_type location = var.location diff --git a/main.tf b/main.tf index ff61cbd..0db3b0d 100644 --- a/main.tf +++ b/main.tf @@ -1,21 +1,24 @@ -resource "random_pet" "cluster" { - length = 1 - prefix = var.cluster_prefix -} - resource "random_password" "k3s_token" { length = 48 special = false } resource "hcloud_ssh_key" "k3s" { - name = random_pet.cluster.id + name = var.cluster_name public_key = local.ssh_public_key } resource "hcloud_network" "k3s" { - name = random_pet.cluster.id - ip_range = local.network_ipv4_cidr + name = var.cluster_name + ip_range = var.network_ipv4_range +} + +# This is the default subnet to be used by the load balancer. +resource "hcloud_network_subnet" "default" { + network_id = hcloud_network.k3s.id + type = "cloud" + network_zone = var.network_region + ip_range = "10.0.0.0/16" } resource "hcloud_network_subnet" "subnet" { @@ -27,7 +30,7 @@ resource "hcloud_network_subnet" "subnet" { } resource "hcloud_firewall" "k3s" { - name = random_pet.cluster.id + name = var.cluster_name dynamic "rule" { for_each = concat(local.base_firewall_rules, var.extra_firewall_rules) @@ -42,7 +45,7 @@ resource "hcloud_firewall" "k3s" { } resource "hcloud_placement_group" "k3s" { - name = random_pet.cluster.id + name = var.cluster_name type = "spread" labels = { "provisioner" = "terraform", @@ -52,7 +55,7 @@ resource "hcloud_placement_group" "k3s" { data "hcloud_load_balancer" "traefik" { count = local.is_single_node_cluster ? 0 : 1 - name = "${random_pet.cluster.id}-traefik" + name = "${var.cluster_name}-traefik" depends_on = [null_resource.kustomization] } diff --git a/modules/host/locals.tf b/modules/host/locals.tf index 46e0f81..4edc40e 100644 --- a/modules/host/locals.tf +++ b/modules/host/locals.tf @@ -12,5 +12,5 @@ locals { ssh_args = "-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ${local.ssh_identity_file}" # the hosts name with its unique suffix attached - name = "${var.name}-${random_pet.server.id}" + name = "${var.name}-${random_string.server.id}" } diff --git a/modules/host/main.tf b/modules/host/main.tf index a4de8c6..70b2aaa 100644 --- a/modules/host/main.tf +++ b/modules/host/main.tf @@ -1,5 +1,10 @@ -resource "random_pet" "server" { - length = 1 +resource "random_string" "server" { + length = 3 + lower = true + special = false + number = false + upper = false + keepers = { # We re-create the id (and server) whenever one of those attributes # changes. This should include all input variables to this module, diff --git a/output.tf b/output.tf index 9337e1d..e0089fd 100644 --- a/output.tf +++ b/output.tf @@ -1,5 +1,5 @@ output "cluster_name" { - value = random_pet.cluster.id + value = var.cluster_name description = "Shared suffix for all resources belonging to this cluster." } diff --git a/terraform.tfvars.example b/terraform.tfvars.example index b7310ad..7d31c13 100644 --- a/terraform.tfvars.example +++ b/terraform.tfvars.example @@ -67,11 +67,11 @@ load_balancer_type = "lb11" # Allows you to specify either stable, latest, or testing (defaults to stable), see https://rancher.com/docs/k3s/latest/en/upgrades/basic/ # initial_k3s_channel = "latest" -# Whether to use the cluster name in the node name, i.e. add the prefix k3s-(cluster_name)- to the nodes? The default is "true". +# Whether to use the cluster name in the node name, the default is "true". # use_cluster_name_in_node_name = false -# Prefix for the cluster name, by default "k3s" -# cluster_prefix = "" +# The cluster name, by default "k3s" +# cluster_name = "" # Adding extra firewall rules, like opening a port # In this example with allow port TCP 5432 for a Postgres service we will open via a nodeport diff --git a/variables.tf b/variables.tf index 3460697..825f198 100644 --- a/variables.tf +++ b/variables.tf @@ -116,10 +116,15 @@ variable "use_cluster_name_in_node_name" { description = "Whether to use the cluster name in the node name" } -variable "cluster_prefix" { +variable "cluster_name" { type = string default = "k3s" - description = "Prefix for the cluster name" + description = "Name of the cluster" + + validation { + condition = can(regex("^[a-z1-9\\-]+$", var.cluster_name)) + error_message = "The cluster name must be in the form of lowercase alphanumeric characters and/or dashes." + } } variable "traefik_additional_options" {