Refactor of some modules.

This commit is contained in:
Andrea Dell'Amico 2026-08-11 18:36:21 +02:00
parent e22d4e61a8
commit 6ea6fa5478
Signed by: adellam
GPG Key ID: 147ABE6CEB9E20FF
10 changed files with 115 additions and 77 deletions

View File

@ -30,11 +30,11 @@ variable "prometheus_server_data" {
variable "shared_postgresql_server_data" { variable "shared_postgresql_server_data" {
type = map(string) type = map(string)
default = { default = {
name = "shared-postgresql-server" name = "shared-postgresql-server"
flavor = "m1.large" flavor = "m1.large"
vol_data_name = "shared-postgresql-data" vol_data_name = "shared-postgresql-data"
vol_data_size = "100" vol_data_size = "100"
vol_data_device = "/dev/vdb" vol_data_device = "/dev/vdb"
network_name = "postgresql-srv-net" network_name = "postgresql-srv-net"
network_description = "Network used to communicate with the shared postgresql service" network_description = "Network used to communicate with the shared postgresql service"
network_cidr = "192.168.0.0/22" network_cidr = "192.168.0.0/22"
@ -48,15 +48,15 @@ variable "shared_postgresql_server_data" {
variable "haproxy_l7_data" { variable "haproxy_l7_data" {
type = map(string) type = map(string)
default = { default = {
name = "main-haproxy-l7" name = "main-haproxy-l7"
haproxy_1 = "haproxy-l7-1" haproxy_1 = "haproxy-l7-1"
haproxy_2 = "haproxy-l7-2" haproxy_2 = "haproxy-l7-2"
flavor = "m1.medium" flavor = "m1.medium"
vm_count = "2" vm_count = "2"
haproxy1_server_ip = "192.168.253.5" haproxy1_server_ip = "192.168.253.5"
haproxy2_server_ip = "192.168.253.6" haproxy2_server_ip = "192.168.253.6"
haproxy1_cidr = "192.168.253.5/24" haproxy1_cidr = "192.168.253.5/24"
haproxy2_cidr = "192.168.253.6/24" haproxy2_cidr = "192.168.253.6/24"
} }
} }
@ -79,20 +79,20 @@ variable "main_octavia_lb_flavor" {
variable "octavia_information" { variable "octavia_information" {
type = map(string) type = map(string)
default = { default = {
main_lb_name = var.main_octavia_lb_name main_lb_name = var.main_octavia_lb_name
main_lb_description = var.main_octavia_lb_description main_lb_description = var.main_octavia_lb_description
octavia_flavor = var.main_octavia_lb_flavor octavia_flavor = var.main_octavia_lb_flavor
octavia_flavor_id = "394988b5-6603-4a1e-a939-8e177c6681c7" octavia_flavor_id = "394988b5-6603-4a1e-a939-8e177c6681c7"
main_lb_hostname = var.main_octavia_lb_hostname main_lb_hostname = var.main_octavia_lb_hostname
network_name = "octavia-main-haproxy-net" network_name = "octavia-main-haproxy-net"
network_description = "Network that veicolates the traffic from Octavia and the main load balancer" network_description = "Network that veicolates the traffic from Octavia and the main load balancer"
subnet_name = "octavia-main-haproxy-net" subnet_name = "octavia-main-haproxy-net"
subnet_description = "Network that veicolates the traffic from Octavia and the main load balancer" subnet_description = "Network that veicolates the traffic from Octavia and the main load balancer"
subnet_cidr = "192.168.253.0/24" subnet_cidr = "192.168.253.0/24"
gateway_ip = "192.168.253.1" gateway_ip = "192.168.253.1"
allocation_pool_start = "192.168.253.100" allocation_pool_start = "192.168.253.100"
allocation_pool_end = "192.168.253.254" allocation_pool_end = "192.168.253.254"
external_router_name = "octavia_main_lb_router" external_router_name = "octavia_main_lb_router"
external_router_description = "Octavia Main LB router" external_router_description = "Octavia Main LB router"
} }
} }

View File

@ -2,27 +2,27 @@
# Create the netework and subnet used to make Octavia and HAPROXY communicate # Create the netework and subnet used to make Octavia and HAPROXY communicate
resource "openstack_networking_network_v2" "octavia-private-network" { resource "openstack_networking_network_v2" "octavia-private-network" {
name = var.octavia_information.network_name name = var.octavia_information.network_name
admin_state_up = "true" admin_state_up = "true"
external = "false" external = "false"
description = var.octavia_information.network_description description = var.octavia_information.network_description
dns_domain = data.terraform_remote_state.privnet_dns_router.outputs.dns_zone.name dns_domain = data.terraform_remote_state.privnet_dns_router.outputs.dns_zone.name
mtu = module.labs_common_variables.mtu_size mtu = module.labs_common_variables.mtu_size
port_security_enabled = true port_security_enabled = true
shared = false shared = false
region = module.labs_common_variables.main_region region = module.labs_common_variables.main_region
# tenant_id = data.terraform_remote_state.privnet_dns_router.outputs.os_project_data.id # tenant_id = data.terraform_remote_state.privnet_dns_router.outputs.os_project_data.id
} }
resource "openstack_networking_subnet_v2" "octavia-private-subnet" { resource "openstack_networking_subnet_v2" "octavia-private-subnet" {
name = var.octavia_information.subnet_name name = var.octavia_information.subnet_name
description = var.octavia_information.subnet_description description = var.octavia_information.subnet_description
network_id = openstack_networking_network_v2.octavia-private-network.id network_id = openstack_networking_network_v2.octavia-private-network.id
cidr = var.octavia_information.subnet_cidr cidr = var.octavia_information.subnet_cidr
gateway_ip = var.octavia_information.gateway_ip gateway_ip = var.octavia_information.gateway_ip
dns_nameservers = module.labs_common_variables.resolvers_ip dns_nameservers = module.labs_common_variables.resolvers_ip
ip_version = 4 ip_version = 4
enable_dhcp = true enable_dhcp = true
# tenant_id = data.terraform_remote_state.privnet_dns_router.outputs.os_project_data.id # tenant_id = data.terraform_remote_state.privnet_dns_router.outputs.os_project_data.id
allocation_pool { allocation_pool {
start = var.octavia_information.allocation_pool_start start = var.octavia_information.allocation_pool_start
@ -32,11 +32,11 @@ resource "openstack_networking_subnet_v2" "octavia-private-subnet" {
resource "openstack_networking_router_v2" "octavia-external-router" { resource "openstack_networking_router_v2" "octavia-external-router" {
name = var.octavia_information.external_router_name name = var.octavia_information.external_router_name
description = var.octavia_information.external_router_description description = var.octavia_information.external_router_description
external_network_id = module.labs_common_variables.external_network.id external_network_id = module.labs_common_variables.external_network.id
# tenant_id = data.terraform_remote_state.privnet_dns_router.outputs.os_project_data.id # tenant_id = data.terraform_remote_state.privnet_dns_router.outputs.os_project_data.id
enable_snat = true enable_snat = true
vendor_options { vendor_options {
set_router_gateway_after_create = true set_router_gateway_after_create = true
} }
} }

View File

@ -236,11 +236,11 @@ resource "openstack_compute_volume_attach_v2" "swarm_nfs_data_attach_vol" {
# #
# Swarm load balancer. L4, backed by Octavia # Swarm load balancer. L4, backed by Octavia
resource "openstack_lb_loadbalancer_v2" "swarm_lb" { resource "openstack_lb_loadbalancer_v2" "swarm_lb" {
vip_subnet_id = var.main_private_subnet_id vip_subnet_id = var.main_private_subnet_id
name = var.octavia_swarm_data.swarm_lb_name name = var.octavia_swarm_data.swarm_lb_name
description = var.octavia_swarm_data.swarm_lb_description description = var.octavia_swarm_data.swarm_lb_description
flavor_id = var.octavia_swarm_data.octavia_flavor_id flavor_id = var.octavia_swarm_data.octavia_flavor_id
vip_address = var.octavia_swarm_data.swarm_octavia_main_ip vip_address = var.octavia_swarm_data.swarm_octavia_main_ip
# availability_zone = var.availability_zones_names.availability_zone_no_gpu # availability_zone = var.availability_zones_names.availability_zone_no_gpu
loadbalancer_provider = "amphora" loadbalancer_provider = "amphora"
} }

View File

@ -58,8 +58,8 @@ variable "ubuntu_2404" {
variable "centos_7" { variable "centos_7" {
type = map(string) type = map(string)
default = { default = {
name = "CentOS-7" name = "CentOS-7"
uuid = "f0187a99-64f6-462a-ab5f-ef52fe62f2ca" uuid = "f0187a99-64f6-462a-ab5f-ef52fe62f2ca"
user_data_file = "../../s2i2s_openstack_vm_data_scripts/el.sh" user_data_file = "../../s2i2s_openstack_vm_data_scripts/el.sh"
} }
} }

View File

@ -1,35 +1,35 @@
resource "openstack_dns_zone_v2" "primary_project_dns_zone" { resource "openstack_dns_zone_v2" "primary_project_dns_zone" {
name = var.dns_zone.zone_name name = var.dns_zone.zone_name
email = var.dns_zone.email email = var.dns_zone.email
description = var.dns_zone.description description = var.dns_zone.description
project_id = var.os_project_data.id project_id = var.os_project_data.id
ttl = var.dns_zone.ttl ttl = var.dns_zone.ttl
type = "PRIMARY" type = "PRIMARY"
} }
resource "openstack_networking_network_v2" "main-private-network" { resource "openstack_networking_network_v2" "main-private-network" {
name = var.main_private_network.name name = var.main_private_network.name
admin_state_up = "true" admin_state_up = "true"
external = "false" external = "false"
description = var.main_private_network.description description = var.main_private_network.description
dns_domain = var.dns_zone.zone_name dns_domain = var.dns_zone.zone_name
mtu = module.labs_common_variables.mtu_size mtu = module.labs_common_variables.mtu_size
port_security_enabled = true port_security_enabled = true
shared = false shared = false
region = module.labs_common_variables.main_region region = module.labs_common_variables.main_region
tenant_id = var.os_project_data.id tenant_id = var.os_project_data.id
} }
resource "openstack_networking_subnet_v2" "main-private-subnet" { resource "openstack_networking_subnet_v2" "main-private-subnet" {
name = var.main_private_subnet.name name = var.main_private_subnet.name
description = var.main_private_subnet.description description = var.main_private_subnet.description
network_id = openstack_networking_network_v2.main-private-network.id network_id = openstack_networking_network_v2.main-private-network.id
cidr = var.main_private_subnet.cidr cidr = var.main_private_subnet.cidr
gateway_ip = var.main_private_subnet.gateway_ip gateway_ip = var.main_private_subnet.gateway_ip
dns_nameservers = module.labs_common_variables.resolvers_ip dns_nameservers = module.labs_common_variables.resolvers_ip
ip_version = 4 ip_version = 4
enable_dhcp = true enable_dhcp = true
tenant_id = var.os_project_data.id tenant_id = var.os_project_data.id
allocation_pool { allocation_pool {
start = var.main_private_subnet.allocation_start start = var.main_private_subnet.allocation_start
end = var.main_private_subnet.allocation_end end = var.main_private_subnet.allocation_end
@ -38,11 +38,11 @@ resource "openstack_networking_subnet_v2" "main-private-subnet" {
resource "openstack_networking_router_v2" "external-router" { resource "openstack_networking_router_v2" "external-router" {
name = var.external_router.name name = var.external_router.name
description = var.external_router.description description = var.external_router.description
external_network_id = module.labs_common_variables.external_network.id external_network_id = module.labs_common_variables.external_network.id
tenant_id = var.os_project_data.id tenant_id = var.os_project_data.id
enable_snat = true enable_snat = true
vendor_options { vendor_options {
set_router_gateway_after_create = true set_router_gateway_after_create = true
} }
} }
@ -64,7 +64,7 @@ resource "openstack_networking_secgroup_v2" "default" {
count = var.create_default_security_group ? 1 : 0 count = var.create_default_security_group ? 1 : 0
name = module.labs_common_variables.default_security_group_name name = module.labs_common_variables.default_security_group_name
delete_default_rules = "true" delete_default_rules = "true"
tenant_id = var.os_project_data.id tenant_id = var.os_project_data.id
description = "Default security group with rules that allow ssh access from the ISTI networks, http, https" description = "Default security group with rules that allow ssh access from the ISTI networks, http, https"
} }

View File

@ -1,6 +1,6 @@
# Define required providers # Define required providers
terraform { terraform {
required_version = ">= 0.14.0" required_version = ">= 0.14.0"
required_providers { required_providers {
openstack = { openstack = {
source = "terraform-provider-openstack/openstack" source = "terraform-provider-openstack/openstack"

View File

@ -2,7 +2,7 @@ variable "os_project_data" {
type = map(string) type = map(string)
default = { default = {
name = "" name = ""
id = "" id = ""
} }
} }

View File

@ -1,6 +1,6 @@
# Define required providers # Define required providers
terraform { terraform {
required_version = ">= 0.14.0" required_version = ">= 0.14.0"
required_providers { required_providers {
openstack = { openstack = {
source = "terraform-provider-openstack/openstack" source = "terraform-provider-openstack/openstack"

View File

@ -37,3 +37,12 @@ output "haproxy_l7_data" {
output "prometheus_server_data" { output "prometheus_server_data" {
value = var.prometheus_server_data value = var.prometheus_server_data
} }
# Derived from the address plan, so that the addresses are declared once
output "keycloak_ip" {
value = [var.basic_services_ip.keycloak_1, var.basic_services_ip.keycloak_2]
}
output "git_ssh_data" {
value = var.git_ssh_data
}

View File

@ -17,11 +17,11 @@ variable "networks_list" {
variable "shared_postgresql_server_data" { variable "shared_postgresql_server_data" {
type = map(string) type = map(string)
default = { default = {
name = "shared-postgresql-server" name = "shared-postgresql-server"
flavor = "m1.large" flavor = "m1.large"
vol_data_name = "shared-postgresql-data" vol_data_name = "shared-postgresql-data"
vol_data_size = "100" vol_data_size = "100"
vol_data_device = "/dev/vdb" vol_data_device = "/dev/vdb"
network_name = "postgresql-srv-net" network_name = "postgresql-srv-net"
network_description = "Network used to communicate with the shared postgresql service" network_description = "Network used to communicate with the shared postgresql service"
network_cidr = "192.168.0.0/22" network_cidr = "192.168.0.0/22"
@ -32,6 +32,24 @@ variable "shared_postgresql_server_data" {
} }
} }
# Git over SSH, published by the load balancers instead of a floating IP on the
# forgejo VM:
#
# client -> Octavia TCP 22 -> HAPROXY L7 tcp 2222 -> forgejo 2222
#
# The public port stays 22, so the clone URLs need no port. The HAPROXY L7 hosts
# cannot listen on 22 either, sshd is there
variable "git_ssh_data" {
type = object({
public_port = number
haproxy_bind_port = number
})
default = {
public_port = 22
haproxy_bind_port = 2222
}
}
variable "basic_services_ip" { variable "basic_services_ip" {
type = map(string) type = map(string)
default = { default = {
@ -47,6 +65,17 @@ variable "basic_services_ip" {
haproxy_l7_2_cidr = "10.10.0.12/32" haproxy_l7_2_cidr = "10.10.0.12/32"
octavia_main = "10.10.0.20" octavia_main = "10.10.0.20"
octavia_main_cidr = "10.10.0.20/32" octavia_main_cidr = "10.10.0.20/32"
# Services deployed by their own workspaces. The sizing of each one is a
# default of its module, under ../../modules; the addresses live here so
# that the whole plan is visible in one place
postgresql = "10.10.0.162"
postgresql_cidr = "10.10.0.162/32"
keycloak_1 = "10.10.0.163"
keycloak_1_cidr = "10.10.0.163/32"
keycloak_2 = "10.10.0.164"
keycloak_2_cidr = "10.10.0.164/32"
forgejo = "10.10.0.165"
forgejo_cidr = "10.10.0.165/32"
} }
} }