@ -20,7 +20,8 @@ data "template_file" "cloudinit" {
}
data " openstack_networking_network_v2 " " k8s_network " {
name = var . network_name
count = var . use_existing_network ? 1 : 0
name = var . network_name
}
resource " openstack_compute_keypair_v2 " " k8s " {
@ -158,25 +159,25 @@ resource "openstack_compute_servergroup_v2" "k8s_etcd" {
locals {
# master groups
master_sec_groups = compact ( [
openstack_networking_secgroup_v2 . k8s_master . name ,
openstack_networking_secgroup_v2 . k8s . name ,
var . extra_sec_groups ? openstack_networking_secgroup_v2 . k8s_master_extra [ 0 ] . name : " " ,
openstack_networking_secgroup_v2 . k8s_master . id ,
openstack_networking_secgroup_v2 . k8s . id ,
var . extra_sec_groups ? openstack_networking_secgroup_v2 . k8s_master_extra [ 0 ] . id : " " ,
] )
# worker groups
worker_sec_groups = compact ( [
openstack_networking_secgroup_v2 . k8s . name ,
openstack_networking_secgroup_v2 . worker . name ,
var . extra_sec_groups ? openstack_networking_secgroup_v2 . worker_extra [ 0 ] . name : " " ,
openstack_networking_secgroup_v2 . k8s . id ,
openstack_networking_secgroup_v2 . worker . id ,
var . extra_sec_groups ? openstack_networking_secgroup_v2 . worker_extra [ 0 ] . id : " " ,
] )
# bastion groups
bastion_sec_groups = compact ( concat ( [
openstack_networking_secgroup_v2 . k8s . name ,
openstack_networking_secgroup_v2 . bastion [ 0 ] . name ,
openstack_networking_secgroup_v2 . k8s . id ,
openstack_networking_secgroup_v2 . bastion [ 0 ] . id ,
] ) )
# etcd groups
etcd_sec_groups = compact ( [ openstack_networking_secgroup_v2 . k8s . name ] )
etcd_sec_groups = compact ( [ openstack_networking_secgroup_v2 . k8s . id ] )
# glusterfs groups
gfs_sec_groups = compact ( [ openstack_networking_secgroup_v2 . k8s . name ] )
gfs_sec_groups = compact ( [ openstack_networking_secgroup_v2 . k8s . id ] )
# Image uuid
image_to_use_node = var . image_uuid ! = " " ? var . image_uuid : data . openstack_images_image_v2 . vm_image [ 0 ] . id
@ -189,11 +190,15 @@ locals {
resource " openstack_networking_port_v2 " " bastion_port " {
count = var . number_of_bastions
name = " ${ var . cluster_name } -bastion- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . bastion_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " bastion " {
@ -223,7 +228,7 @@ resource "openstack_compute_instance_v2" "bastion" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " bastion "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
@ -235,11 +240,15 @@ resource "openstack_compute_instance_v2" "bastion" {
resource " openstack_networking_port_v2 " " k8s_master_port " {
count = var . number_of_k8s_masters
name = " ${ var . cluster_name } -k8s-master- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . master_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_master " {
@ -279,7 +288,7 @@ resource "openstack_compute_instance_v2" "k8s_master" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " etcd,kube_control_plane, ${ var . supplementary_master_groups } ,k8s_cluster "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
@ -288,14 +297,76 @@ resource "openstack_compute_instance_v2" "k8s_master" {
}
}
resource " openstack_networking_port_v2 " " k8s_masters_port " {
for_each = var . number_of_k8s_masters == 0 && var . number_of_k8s_masters_no_etcd == 0 && var . number_of_k8s_masters_no_floating_ip == 0 && var . number_of_k8s_masters_no_floating_ip_no_etcd == 0 ? var . k8s_masters : { }
name = " ${ var . cluster_name } -k8s- ${ each . key } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . master_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_masters " {
for_each = var . number_of_k8s_masters == 0 && var . number_of_k8s_masters_no_etcd == 0 && var . number_of_k8s_masters_no_floating_ip == 0 && var . number_of_k8s_masters_no_floating_ip_no_etcd == 0 ? var . k8s_masters : { }
name = " ${ var . cluster_name } -k8s- ${ each . key } "
availability_zone = each . value . az
image_id = var . master_root_volume_size_in_gb == 0 ? local . image_to_use_master : null
flavor_id = each . value . flavor
key_pair = openstack_compute_keypair_v2 . k8s . name
dynamic " block_device " {
for_each = var . master_root_volume_size_in_gb > 0 ? [ local . image_to_use_master ] : [ ]
content {
uuid = local . image_to_use_master
source_type = " image "
volume_size = var . master_root_volume_size_in_gb
volume_type = var . master_volume_type
boot_index = 0
destination_type = " volume "
delete_on_termination = true
}
}
network {
port = openstack_networking_port_v2 . k8s_masters_port [ each . key ] . id
}
dynamic " scheduler_hints " {
for_each = var . master_server_group_policy ! = " " ? [ openstack_compute_servergroup_v2 . k8s_master [ 0 ] ] : [ ]
content {
group = openstack_compute_servergroup_v2 . k8s_master [ 0 ] . id
}
}
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " %{if each.value.etcd == true}etcd,%{endif}kube_control_plane, ${ var . supplementary_master_groups } ,k8s_cluster%{if each.value.floating_ip == false},no_floating%{endif} "
depends_on = var . network_router_id
use_access_ip = var . use_access_ip
}
provisioner " local-exec " {
command = " %{if each.value.floating_ip}sed s/USER/ ${ var . ssh_user } / ${ path . root } /ansible_bastion_template.txt | sed s/BASTION_ADDRESS/ ${ element ( concat ( var . bastion_fips , [ for key , value in var . k8s_masters_fips : value . address ] ) , 0 ) } / > ${ var . group_vars_path } /no_floating.yml%{else}true%{endif} "
}
}
resource " openstack_networking_port_v2 " " k8s_master_no_etcd_port " {
count = var . number_of_k8s_masters_no_etcd
name = " ${ var . cluster_name } -k8s-master-ne- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . master_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_master_no_etcd " {
@ -335,7 +406,7 @@ resource "openstack_compute_instance_v2" "k8s_master_no_etcd" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " kube_control_plane, ${ var . supplementary_master_groups } ,k8s_cluster "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
@ -347,11 +418,15 @@ resource "openstack_compute_instance_v2" "k8s_master_no_etcd" {
resource " openstack_networking_port_v2 " " etcd_port " {
count = var . number_of_etcd
name = " ${ var . cluster_name } -etcd- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . etcd_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " etcd " {
@ -389,7 +464,7 @@ resource "openstack_compute_instance_v2" "etcd" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " etcd,no_floating "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
}
@ -397,11 +472,15 @@ resource "openstack_compute_instance_v2" "etcd" {
resource " openstack_networking_port_v2 " " k8s_master_no_floating_ip_port " {
count = var . number_of_k8s_masters_no_floating_ip
name = " ${ var . cluster_name } -k8s-master-nf- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . master_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_master_no_floating_ip " {
@ -439,7 +518,7 @@ resource "openstack_compute_instance_v2" "k8s_master_no_floating_ip" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " etcd,kube_control_plane, ${ var . supplementary_master_groups } ,k8s_cluster,no_floating "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
}
@ -447,11 +526,15 @@ resource "openstack_compute_instance_v2" "k8s_master_no_floating_ip" {
resource " openstack_networking_port_v2 " " k8s_master_no_floating_ip_no_etcd_port " {
count = var . number_of_k8s_masters_no_floating_ip_no_etcd
name = " ${ var . cluster_name } -k8s-master-ne-nf- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . master_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_master_no_floating_ip_no_etcd " {
@ -490,7 +573,7 @@ resource "openstack_compute_instance_v2" "k8s_master_no_floating_ip_no_etcd" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " kube_control_plane, ${ var . supplementary_master_groups } ,k8s_cluster,no_floating "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
}
@ -498,11 +581,15 @@ resource "openstack_compute_instance_v2" "k8s_master_no_floating_ip_no_etcd" {
resource " openstack_networking_port_v2 " " k8s_node_port " {
count = var . number_of_k8s_nodes
name = " ${ var . cluster_name } -k8s-node- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . worker_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_node " {
@ -542,7 +629,7 @@ resource "openstack_compute_instance_v2" "k8s_node" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " kube_node,k8s_cluster, ${ var . supplementary_node_groups } "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
@ -554,11 +641,15 @@ resource "openstack_compute_instance_v2" "k8s_node" {
resource " openstack_networking_port_v2 " " k8s_node_no_floating_ip_port " {
count = var . number_of_k8s_nodes_no_floating_ip
name = " ${ var . cluster_name } -k8s-node-nf- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . worker_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_node_no_floating_ip " {
@ -597,7 +688,7 @@ resource "openstack_compute_instance_v2" "k8s_node_no_floating_ip" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " kube_node,k8s_cluster,no_floating, ${ var . supplementary_node_groups } "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
}
@ -605,11 +696,15 @@ resource "openstack_compute_instance_v2" "k8s_node_no_floating_ip" {
resource " openstack_networking_port_v2 " " k8s_nodes_port " {
for_each = var . number_of_k8s_nodes == 0 && var . number_of_k8s_nodes_no_floating_ip == 0 ? var . k8s_nodes : { }
name = " ${ var . cluster_name } -k8s-node- ${ each . key } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . worker_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " k8s_nodes " {
@ -648,7 +743,7 @@ resource "openstack_compute_instance_v2" "k8s_nodes" {
metadata = {
ssh_user = var . ssh_user
kubespray_groups = " kube_node,k8s_cluster,%{if each.value.floating_ip == false}no_floating,%{endif} ${ var . supplementary_node_groups } "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
@ -660,11 +755,15 @@ resource "openstack_compute_instance_v2" "k8s_nodes" {
resource " openstack_networking_port_v2 " " glusterfs_node_no_floating_ip_port " {
count = var . number_of_gfs_nodes_no_floating_ip
name = " ${ var . cluster_name } -gfs-node-nf- ${ count . index + 1 } "
network_id = " ${ data . openstack_networking_network_v2 . k8s_network . id } "
network_id = var . use_existing_network ? data . openstack_networking_network_v2 . k8s_network [ 0 ] . id : var . network_id
admin_state_up = " true "
port_security_enabled = var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . gfs_sec_groups : null
port_security_enabled = var . force_null_port_security ? null : var . port_security_enabled
security_group_ids = var . port_security_enabled ? local . gfs_sec_groups : null
no_security_groups = var . port_security_enabled ? null : false
depends_on = [
var . network_router_id
]
}
resource " openstack_compute_instance_v2 " " glusterfs_node_no_floating_ip " {
@ -701,7 +800,7 @@ resource "openstack_compute_instance_v2" "glusterfs_node_no_floating_ip" {
metadata = {
ssh_user = var . ssh_user_gfs
kubespray_groups = " gfs-cluster,network-storage,no_floating "
depends_on = var . network_id
depends_on = var . network_router_ id
use_access_ip = var . use_access_ip
}
}
@ -719,6 +818,12 @@ resource "openstack_networking_floatingip_associate_v2" "k8s_master" {
port_id = element ( openstack_networking_port_v2 . k8s_master_port . * . id , count . index )
}
resource " openstack_networking_floatingip_associate_v2 " " k8s_masters " {
for_each = var . number_of_k8s_masters == 0 && var . number_of_k8s_masters_no_etcd == 0 && var . number_of_k8s_masters_no_floating_ip == 0 && var . number_of_k8s_masters_no_floating_ip_no_etcd == 0 ? { for key , value in var . k8s_masters : key => value if value . floating_ip } : { }
floating_ip = var . k8s_masters_fips [ each . key ] . address
port_id = openstack_networking_port_v2 . k8s_masters_port [ each . key ] . id
}
resource " openstack_networking_floatingip_associate_v2 " " k8s_master_no_etcd " {
count = var . master_root_volume_size_in_gb == 0 ? var . number_of_k8s_masters_no_etcd : 0
floating_ip = var . k8s_master_no_etcd_fips [ count . index ]