provider "openstack" {
cloud = "lab-admin"
use_octavia = true
}
# data "template_file" "user_data" {
# template = file("user-data.txt")
# }
data "template_file" "user_data" {
template = < /tmp/debug
EOF
}
variable "http_instance_names" {
type = set(string)
default = ["www1", "www2"]
}
resource "openstack_compute_instance_v2" "http" {
for_each = var.http_instance_names
name = each.key
#name = "www${count.index + 1}"
#count = 2
image_name = "Ubuntu 20.04 minimal"
flavor_name = "m1.small"
key_pair = "lab-key"
security_groups = ["default"]
user_data = data.template_file.user_data.rendered
network {
name = "demo-net"
}
}
data "openstack_networking_network_v2" "network_1" {
name = "demo-net"
}
data "openstack_networking_subnet_v2" "subnet_1" {
name = "demo-subnet"
network_id = data.openstack_networking_network_v2.network_1.id
}
# Create loadbalancer
resource "openstack_lb_loadbalancer_v2" "http" {
name = "demo-lb1"
vip_subnet_id = data.openstack_networking_subnet_v2.subnet_1.id
}
# Create listener
resource "openstack_lb_listener_v2" "http" {
name = "demo-lb1-http-listener"
protocol = "TCP"
protocol_port = 80
loadbalancer_id = openstack_lb_loadbalancer_v2.http.id
#depends_on = [openstack_lb_loadbalancer_v2.http]
insert_headers = {
X-Forwarded-For = "true"
X-Forwarded-Proto = "true"
}
}
# Create pool
resource "openstack_lb_pool_v2" "http" {
name = "demo-lb1-http-pool1"
protocol = "TCP"
lb_method = "ROUND_ROBIN"
listener_id = openstack_lb_listener_v2.http.id
#depends_on = [openstack_lb_listener_v2.http]
}
# Add member to pool
resource "openstack_lb_member_v2" "http1" {
for_each = var.http_instance_names
address = openstack_compute_instance_v2.http[each.key].access_ip_v4
protocol_port = 80
pool_id = openstack_lb_pool_v2.http.id
subnet_id = data.openstack_networking_subnet_v2.subnet_1.id
#depends_on = [openstack_lb_pool_v2.http]
}
# Get floating IP
resource "openstack_networking_floatingip_v2" "floatingip_1" {
pool = "public"
}
# Associate floating IP to LoadBalancer
resource "openstack_networking_floatingip_associate_v2" "floatip_1" {
floating_ip = openstack_networking_floatingip_v2.floatingip_1.address
port_id = openstack_lb_loadbalancer_v2.http.vip_port_id
}
output "LoadBalancer_IP" {
value = "http://${openstack_networking_floatingip_v2.floatingip_1.address}"
}TERMINATED_HTTPS loadbalancer