diff --git a/docs/_releasenotes/1327.BREAKING.tf-rename-master-to-controller b/docs/_releasenotes/1327.BREAKING.tf-rename-master-to-controller new file mode 100644 index 0000000000000000000000000000000000000000..69b0d8caab5481bae91a52a64bd8ddc59e023d01 --- /dev/null +++ b/docs/_releasenotes/1327.BREAKING.tf-rename-master-to-controller @@ -0,0 +1,6 @@ +The YAOOK/k8s Terraform module (along with the new config format) +now uses the term 'controller(s)' instead of 'master(s)' +to refer to control plane nodes. +The change is transparent to both Terraform state and the LCM layers above. + +_ diff --git a/docs/user/reference/cluster-configuration.rst b/docs/user/reference/cluster-configuration.rst index e7f6b838818adfec776afcb8520c7e450ef682bd..c97cfc1809571fb4c9ea9aa234a11d8361b8eac9 100644 --- a/docs/user/reference/cluster-configuration.rst +++ b/docs/user/reference/cluster-configuration.rst @@ -42,7 +42,7 @@ need to adjust these values if you e.g. want to enable .. note:: There is a variable ``nodes`` to configure - the k8s master and worker servers. + the k8s controller and worker servers. The ``role`` attribute must be used to distinguish both [1]_. The amount of gateway nodes can be controlled with the `gateway_count` variable. @@ -108,15 +108,15 @@ The name of a Terraform node is composed from the following parts: [terraform.gateway_defaults] common_name = "gateway-" - [terraform.nodes.master-X] - role = "master" + [terraform.nodes.controller-X] + role = "controller" [terraform.nodes.worker-A] role = "worker" # yields the following node names: # - yk8s-gateway-0 - # - yk8s-master-X + # - yk8s-controller-X # - yk8s-worker-A diff --git a/templates/config.template.toml b/templates/config.template.toml index 19d6372715fdc66d60475e7b0dfde7766444f687..67d375bec192a981b12f2574613d5a3fccd6756a 100644 --- a/templates/config.template.toml +++ b/templates/config.template.toml @@ -71,9 +71,9 @@ prevent_disruption = true #root_disk_size = 10 #root_disk_volume_type = "" # == default volume type in IaaS environment # -# Change the default values for all master nodes +# Change the default values for all controller nodes # Values can be selectively specified -#[terraform.master_defaults] +#[terraform.controller_defaults] #image = "Ubuntu 22.04 LTS x64" #flavor = "M" #root_disk_size = 50 @@ -88,9 +88,9 @@ prevent_disruption = true #root_disk_volume_type = "" # == default volume type in IaaS environment ##anti_affinity_group # == : don't join any group # -# Master nodes to be created (at least one) -#[terraform.nodes.] -#role = "master" +# Controller nodes to be created (at least one) +#[terraform.nodes.] +#role = "controller" #image = #flavor = #az = diff --git a/terraform/00-variables.tf b/terraform/00-variables.tf index 7461a176ff73682ed55ac3da9c333e85c1c8105d..b5e5b02901e4e307ab8326339cb6387ae2a46f5a 100644 --- a/terraform/00-variables.tf +++ b/terraform/00-variables.tf @@ -162,7 +162,7 @@ variable "gateway_defaults" { } } -variable "master_defaults" { +variable "controller_defaults" { description = <<-EOT Default attributes for control plane nodes @@ -184,8 +184,8 @@ variable "master_defaults" { } validation { - condition = var.master_defaults.root_disk_size != 0 - error_message = "Master 'root_disk_size' is zero" + condition = var.controller_defaults.root_disk_size != 0 + error_message = "Controller 'root_disk_size' is zero" } } @@ -225,14 +225,14 @@ variable "nodes" { User defined list of control plane and worker nodes to be created with specified values The list must contain at least one control plane node. - 'role' must be one of: "master", "worker". + 'role' must be one of: "controller", "worker". 'anti_affinity_group' must not be set when role!="worker" Leaving 'anti_affinity_group' empty means to not join any anti affinity group EOT type = map( object({ - role = string # one of: 'master', 'worker' + role = string # one of: 'controller', 'worker' image = optional(string) flavor = optional(string) az = optional(string) @@ -248,13 +248,13 @@ variable "nodes" { error_message = "At least one node with role=master must be given." } validation { # Validate role - condition = alltrue([for x in var.nodes: contains(["master", "worker"], x.role)]) - error_message = "Invalid node role: Must be 'master' or 'worker'." + condition = alltrue([for x in var.nodes: contains(["controller", "worker"], x.role)]) + error_message = "Invalid node role: Must be 'controller' or 'worker'." } - # Validate worker node attributes are not used for master nodes + # Validate worker node attributes are not used for controller nodes validation { - condition = alltrue([for x in var.nodes: x.anti_affinity_group == null if x.role == "master"]) - error_message = "'anti_affinity_group' must not be set for master nodes" + condition = alltrue([for x in var.nodes: x.anti_affinity_group == null if x.role == "controller"]) + error_message = "'anti_affinity_group' must not be set for control plane nodes" } } diff --git a/terraform/30-master-nodes.tf b/terraform/30-controller-nodes.tf similarity index 58% rename from terraform/30-master-nodes.tf rename to terraform/30-controller-nodes.tf index bb82ca826f5cfca32dd802194d6f2e6aed53f7cb..d3bd484aa1e5049a86422ffcd1135d1fd3c1966a 100644 --- a/terraform/30-master-nodes.tf +++ b/terraform/30-controller-nodes.tf @@ -1,20 +1,20 @@ locals { # NOTE: coalesce() is used to provide non-null default values from the templates - master_nodes = { + controller_nodes = { for name, values in var.nodes : "${local.nodes_prefix}${name}" => { - image = coalesce(values.image, var.master_defaults.image) - flavor = coalesce(values.flavor, var.master_defaults.flavor) + image = coalesce(values.image, var.controller_defaults.image) + flavor = coalesce(values.flavor, var.controller_defaults.flavor) az = values.az # default: null - volume_name = "${var.cluster_name}-master-volume-${name}" - root_disk_size = coalesce(values.root_disk_size, var.master_defaults.root_disk_size) - root_disk_volume_type = values.root_disk_volume_type != null ? values.root_disk_volume_type : var.master_defaults.root_disk_volume_type - } if values.role == "master" + volume_name = "${var.cluster_name}-controller-volume-${name}" + root_disk_size = coalesce(values.root_disk_size, var.controller_defaults.root_disk_size) + root_disk_volume_type = values.root_disk_volume_type != null ? values.root_disk_volume_type : var.controller_defaults.root_disk_volume_type + } if values.role == "controller" } } -resource "openstack_networking_port_v2" "master" { - for_each = local.master_nodes +resource "openstack_networking_port_v2" "controller" { + for_each = local.controller_nodes name = each.key network_id = openstack_networking_network_v2.cluster_network.id @@ -36,23 +36,23 @@ resource "openstack_networking_port_v2" "master" { port_security_enabled = false } -data "openstack_compute_flavor_v2" "master" { - for_each = local.master_nodes +data "openstack_compute_flavor_v2" "controller" { + for_each = local.controller_nodes name = each.value.flavor } -data "openstack_images_image_v2" "master" { - for_each = local.master_nodes +data "openstack_images_image_v2" "controller" { + for_each = local.controller_nodes name = each.value.image } -resource "openstack_blockstorage_volume_v3" "master-volume" { - for_each = var.create_root_disk_on_volume == true ? local.master_nodes : {} +resource "openstack_blockstorage_volume_v3" "controller-volume" { + for_each = var.create_root_disk_on_volume == true ? local.controller_nodes : {} name = each.value.volume_name - size = (data.openstack_compute_flavor_v2.master[each.key].disk > 0) ? data.openstack_compute_flavor_v2.master[each.key].disk : each.value.root_disk_size - image_id = data.openstack_images_image_v2.master[each.key].id + size = (data.openstack_compute_flavor_v2.controller[each.key].disk > 0) ? data.openstack_compute_flavor_v2.controller[each.key].disk : each.value.root_disk_size + image_id = data.openstack_images_image_v2.controller[each.key].id volume_type = each.value.root_disk_volume_type availability_zone = each.value.az @@ -66,14 +66,14 @@ resource "openstack_blockstorage_volume_v3" "master-volume" { } } -resource "openstack_compute_instance_v2" "master" { - for_each = local.master_nodes +resource "openstack_compute_instance_v2" "controller" { + for_each = local.controller_nodes name = each.key availability_zone = each.value.az config_drive = true - flavor_id = data.openstack_compute_flavor_v2.master[each.key].id - image_id = var.create_root_disk_on_volume == false ? data.openstack_images_image_v2.master[each.key].id : null + flavor_id = data.openstack_compute_flavor_v2.controller[each.key].id + image_id = var.create_root_disk_on_volume == false ? data.openstack_images_image_v2.controller[each.key].id : null key_pair = var.keypair dynamic block_device { @@ -81,7 +81,7 @@ resource "openstack_compute_instance_v2" "master" { # It's not working as a loop. The outer `each.key` is "passed" into the inner `for_each` for_each = var.create_root_disk_on_volume == true ? [each.key] : [] content { - uuid = openstack_blockstorage_volume_v3.master-volume[each.key].id + uuid = openstack_blockstorage_volume_v3.controller-volume[each.key].id source_type = "volume" boot_index = 0 destination_type = "volume" @@ -90,10 +90,14 @@ resource "openstack_compute_instance_v2" "master" { } network { - port = openstack_networking_port_v2.master[each.key].id + port = openstack_networking_port_v2.controller[each.key].id } lifecycle { ignore_changes = [key_pair, image_id, config_drive] } } +moved { + from = openstack_compute_instance_v2.master + to = openstack_compute_instance_v2.controller +} diff --git a/terraform/99-outputs.tf b/terraform/99-outputs.tf index 4a8bb080bf179f7466fabc5861c60dd6b2899499..4a8336ced5c7d0f4bf06f33b2a338421b81101e6 100644 --- a/terraform/99-outputs.tf +++ b/terraform/99-outputs.tf @@ -1,7 +1,7 @@ resource "local_file" "inventory_yaook-k8s" { content = templatefile("${path.module}/templates/inventory.tpl", { - masters = openstack_compute_instance_v2.master, - master_ports = openstack_networking_port_v2.master, + controllers = openstack_compute_instance_v2.controller, + controller_ports = openstack_networking_port_v2.controller, gateways = openstack_compute_instance_v2.gateway, gateway_ports = openstack_networking_port_v2.gateway, gateway_fips = openstack_networking_floatingip_v2.gateway, diff --git a/terraform/templates/inventory.tpl b/terraform/templates/inventory.tpl index 0af6196415dc9c67cf1d8810bc9a7b9dabcd5671..2a5c283da6ecad021618c02102bd52dc97681cbb 100644 --- a/terraform/templates/inventory.tpl +++ b/terraform/templates/inventory.tpl @@ -20,8 +20,8 @@ ${instance.name} ansible_host=${gateway_fips[index].address} local_ipv4_address= %{ endfor } [masters] -%{ for index, instance in masters ~} -${instance.name} ansible_host=${master_ports[index].all_fixed_ips[0]} local_ipv4_address=${master_ports[index].all_fixed_ips[0]} %{if ipv6_enabled }${try("local_ipv6_address=${master_ports[index].all_fixed_ips[1]}", "")}%{ endif } +%{ for index, instance in controllers ~} +${instance.name} ansible_host=${controller_ports[index].all_fixed_ips[0]} local_ipv4_address=${controller_ports[index].all_fixed_ips[0]} %{if ipv6_enabled }${try("local_ipv6_address=${controller_ports[index].all_fixed_ips[1]}", "")}%{ endif } %{ endfor } [workers]