From 07858e8f71d552ef4ba8a876acbddfd4aec431de Mon Sep 17 00:00:00 2001 From: rptaylor Date: Sun, 11 Oct 2020 23:54:47 -0700 Subject: [PATCH] allow pre-existing floating IPs to be specified with k8s_master_fips (#6755) k8s_master_no_etcd_fips should not be input var --- contrib/terraform/openstack/README.md | 1 + contrib/terraform/openstack/kubespray.tf | 1 + contrib/terraform/openstack/modules/ips/main.tf | 6 ++++-- contrib/terraform/openstack/modules/ips/outputs.tf | 6 ++++-- contrib/terraform/openstack/modules/ips/variables.tf | 2 ++ contrib/terraform/openstack/variables.tf | 6 ++++++ 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/contrib/terraform/openstack/README.md b/contrib/terraform/openstack/README.md index 9696e4dd7..2e1175b06 100644 --- a/contrib/terraform/openstack/README.md +++ b/contrib/terraform/openstack/README.md @@ -239,6 +239,7 @@ For your cluster, edit `inventory/$CLUSTER/cluster.tfvars`. |`network_dns_domain` | (Optional) The dns_domain for the internal network that will be generated | |`dns_nameservers`| An array of DNS name server names to be used by hosts in the internal subnet. | |`floatingip_pool` | Name of the pool from which floating IPs will be allocated | +|`k8s_master_fips` | A list of floating IPs that you have already pre-allocated; they will be attached to master nodes instead of creating new random floating IPs. | |`external_net` | UUID of the external network that will be routed to | |`flavor_k8s_master`,`flavor_k8s_node`,`flavor_etcd`, `flavor_bastion`,`flavor_gfs_node` | Flavor depends on your openstack installation, you can get available flavor IDs through `openstack flavor list` | |`image`,`image_gfs` | Name of the image to use in provisioning the compute resources. Should already be loaded into glance. | diff --git a/contrib/terraform/openstack/kubespray.tf b/contrib/terraform/openstack/kubespray.tf index daf21900f..f4aa24d5a 100644 --- a/contrib/terraform/openstack/kubespray.tf +++ b/contrib/terraform/openstack/kubespray.tf @@ -27,6 +27,7 @@ module "ips" { network_name = var.network_name router_id = module.network.router_id k8s_nodes = var.k8s_nodes + k8s_master_fips = var.k8s_master_fips } module "compute" { diff --git a/contrib/terraform/openstack/modules/ips/main.tf b/contrib/terraform/openstack/modules/ips/main.tf index 7950045c1..9f98df7a5 100644 --- a/contrib/terraform/openstack/modules/ips/main.tf +++ b/contrib/terraform/openstack/modules/ips/main.tf @@ -4,14 +4,16 @@ resource "null_resource" "dummy_dependency" { } } +# If user specifies pre-existing IPs to use in k8s_master_fips, do not create new ones. resource "openstack_networking_floatingip_v2" "k8s_master" { - count = var.number_of_k8s_masters + count = length(var.k8s_master_fips) > 0 ? 0 : var.number_of_k8s_masters pool = var.floatingip_pool depends_on = [null_resource.dummy_dependency] } +# If user specifies pre-existing IPs to use in k8s_master_fips, do not create new ones. resource "openstack_networking_floatingip_v2" "k8s_master_no_etcd" { - count = var.number_of_k8s_masters_no_etcd + count = length(var.k8s_master_fips) > 0 ? 0 : var.number_of_k8s_masters_no_etcd pool = var.floatingip_pool depends_on = [null_resource.dummy_dependency] } diff --git a/contrib/terraform/openstack/modules/ips/outputs.tf b/contrib/terraform/openstack/modules/ips/outputs.tf index a8bf044b2..987549140 100644 --- a/contrib/terraform/openstack/modules/ips/outputs.tf +++ b/contrib/terraform/openstack/modules/ips/outputs.tf @@ -1,9 +1,11 @@ +# If k8s_master_fips is already defined as input, keep the same value since new FIPs have not been created. output "k8s_master_fips" { - value = openstack_networking_floatingip_v2.k8s_master[*].address + value = length(var.k8s_master_fips) > 0 ? var.k8s_master_fips : openstack_networking_floatingip_v2.k8s_master[*].address } +# If k8s_master_fips is already defined as input, keep the same value since new FIPs have not been created. output "k8s_master_no_etcd_fips" { - value = openstack_networking_floatingip_v2.k8s_master_no_etcd[*].address + value = length(var.k8s_master_fips) > 0 ? var.k8s_master_fips : openstack_networking_floatingip_v2.k8s_master_no_etcd[*].address } output "k8s_node_fips" { diff --git a/contrib/terraform/openstack/modules/ips/variables.tf b/contrib/terraform/openstack/modules/ips/variables.tf index 40e4a759f..d1fb9c5b3 100644 --- a/contrib/terraform/openstack/modules/ips/variables.tf +++ b/contrib/terraform/openstack/modules/ips/variables.tf @@ -17,3 +17,5 @@ variable "router_id" { } variable "k8s_nodes" {} + +variable "k8s_master_fips" {} diff --git a/contrib/terraform/openstack/variables.tf b/contrib/terraform/openstack/variables.tf index 04b7e5ab8..d161e8947 100644 --- a/contrib/terraform/openstack/variables.tf +++ b/contrib/terraform/openstack/variables.tf @@ -156,6 +156,12 @@ variable "dns_nameservers" { default = [] } +variable "k8s_master_fips" { + description = "specific pre-existing floating IPs to use for master nodes" + type = list(string) + default = [] +} + variable "floatingip_pool" { description = "name of the floating ip pool to use" default = "external"