diff --git a/.gitignore b/.gitignore
index 44c6b32078d99346b3aae78fcd611b8269b83f10..1c777edeecac7cd13294d18e665f32de6260e1b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,8 @@
 clouds.yaml
 **/clouds.yaml
+venv
+**/terraform.exe
+**/terraform.tfstate
+**/terraform.tfstate.backup
+**/.terraform.lock.hcl
+**/.terraform
diff --git a/terraform/lab4-scale-out-lb/demo4-scale-out-lb.tf b/terraform/lab4-scale-out-lb/demo4-scale-out-lb.tf
deleted file mode 100644
index 6e3a9e4b28ae783fb447c006cb35e9c7b7d9e8e8..0000000000000000000000000000000000000000
--- a/terraform/lab4-scale-out-lb/demo4-scale-out-lb.tf
+++ /dev/null
@@ -1,353 +0,0 @@
-# Define CloudComp group number
-variable "group_number" {
-  type = string
-  default = "30"
-}
-
-# Define OpenStack credentials, project config etc.
-locals {
-  auth_url      = "https://private-cloud.informatik.hs-fulda.de:5000/v3"
-  user_name     = "CloudComp${var.group_number}"
-  user_password = "demo"
-  tenant_name   = "CloudComp${var.group_number}"
-  network_name  = "CloudComp${var.group_number}-net"
-  image_name    = "Ubuntu 18.04 - Bionic Beaver - 64-bit - Cloud Based Image"
-  flavor_name   = "m1.small"
-  region_name   = "RegionOne"
-}
-
-# Define OpenStack provider
-terraform {
-required_version = ">= 0.14.0"
-  required_providers {
-    openstack = {
-      source  = "terraform-provider-openstack/openstack"
-      version = ">= 1.40.0"
-    }
-  }
-}
-
-# Configure the OpenStack Provider
-provider "openstack" {
-  user_name   = local.user_name
-  tenant_name = local.tenant_name
-  password    = local.user_password
-  auth_url    = local.auth_url
-  region      = local.region_name
-  use_octavia = true
-}
-
-# import keypair
-resource "openstack_compute_keypair_v2" "terraform-keypair" {
-  name       = "my-terraform-pubkey"
-  #public_key = file("~/.ssh/id_rsa.pub")
-}
-
-# create api security group
-resource "openstack_networking_secgroup_v2" "terraform-secgroup-api" {
-  name        = "my-terraform-secgroup-api"
-  description = "for API services only"
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-api-rule-http" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 80
-  port_range_max    = 80
-  #remote_ip_prefix  = "0.0.0.0/0"
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-api.id
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-api-rule-ssh" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 22
-  port_range_max    = 22
-  #remote_ip_prefix  = "0.0.0.0/0"
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-api.id
-}
-
-# create worker security group
-resource "openstack_networking_secgroup_v2" "terraform-secgroup-worker" {
-  name        = "my-terraform-secgroup-worker"
-  description = "for services that run on a worker node"
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-worker-rule-ssh" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 22
-  port_range_max    = 22
-  #remote_ip_prefix  = "0.0.0.0/0"
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-worker.id
-}
-
-resource "openstack_networking_secgroup_v2" "terraform-secgroup-control" {
-  name        = "my-terraform-secgroup-control"
-  description = "for services that run on a control node"
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-control-rule-ssh" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 22
-  port_range_max    = 22
-  #remote_ip_prefix  = "0.0.0.0/0"
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-control.id
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-control-rule-http" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 80
-  port_range_max    = 80
-  #remote_ip_prefix  = "0.0.0.0/0"
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-control.id
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-control-rule-rabbitmq" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 5672
-  port_range_max    = 5672
-  remote_group_id   = openstack_networking_secgroup_v2.terraform-secgroup-worker.id
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-control.id
-}
-
-# create services security group
-resource "openstack_networking_secgroup_v2" "terraform-secgroup-services" {
-  name        = "my-terraform-secgroup-services"
-  description = "for DB and AMQP services only"
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-services-rule-ssh" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 22
-  port_range_max    = 22
-  #remote_ip_prefix  = "0.0.0.0/0"
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-services.id
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-services-rule-http" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 80
-  port_range_max    = 80
-  #remote_ip_prefix  = "0.0.0.0/0"
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-services.id
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-services-rule-mysql-api" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 3306
-  port_range_max    = 3306
-  remote_group_id   = openstack_networking_secgroup_v2.terraform-secgroup-api.id
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-services.id
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-services-rule-rabbitmq-worker" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 5672
-  port_range_max    = 5672
-  remote_group_id   = openstack_networking_secgroup_v2.terraform-secgroup-worker.id
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-services.id
-}
-
-resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-services-rule-rabbitmq-api" {
-  direction         = "ingress"
-  ethertype         = "IPv4"
-  protocol          = "tcp"
-  port_range_min    = 5672
-  port_range_max    = 5672
-  remote_group_id   = openstack_networking_secgroup_v2.terraform-secgroup-api.id
-  security_group_id = openstack_networking_secgroup_v2.terraform-secgroup-services.id
-}
-
-
-###########################################################################
-#
-# create app-services instance
-#
-###########################################################################
-resource "openstack_compute_instance_v2" "terraform-instance-app-services" {
-  name              = "my-terraform-app-services"
-  image_name        = local.image_name
-  flavor_name       = local.flavor_name
-  key_pair          = openstack_compute_keypair_v2.terraform-keypair.name
-  security_groups   = [openstack_networking_secgroup_v2.terraform-secgroup-services.name]
-
-  network {
-    name = local.network_name
-  }
-
-  user_data = <<-EOF
-    #!/usr/bin/env bash
-    curl -L -s https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/faafo/contrib/install.sh | bash -s -- \
-      -i database -i messaging
-    rabbitmqctl add_user faafo guest
-    rabbitmqctl set_user_tags faafo administrator
-    rabbitmqctl set_permissions -p / faafo ".*" ".*" ".*"
-  EOF
-}
-
-###########################################################################
-#
-# create app-api instances
-#
-###########################################################################
-resource "openstack_compute_instance_v2" "terraform-instance-app-api-1" {
-  name              = "my-terraform-app-api-1"
-  image_name        = local.image_name
-  flavor_name       = local.flavor_name
-  key_pair          = openstack_compute_keypair_v2.terraform-keypair.name
-  security_groups   = [openstack_networking_secgroup_v2.terraform-secgroup-api.name]
-
-  network {
-    name = local.network_name
-  }
-
-  user_data = <<-EOF
-    #!/usr/bin/env bash
-    curl -L -s https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/faafo/contrib/install.sh | bash -s -- \
-        -i faafo -r api -m 'amqp://faafo:guest@${openstack_compute_instance_v2.terraform-instance-app-services.access_ip_v4}:5672/' \
-        -d 'mysql+pymysql://faafo:password@${openstack_compute_instance_v2.terraform-instance-app-services.access_ip_v4}:3306/faafo'
-  EOF
-}
-
-resource "openstack_compute_instance_v2" "terraform-instance-app-api-2" {
-  name            = "my-terraform-app-api-2"
-  image_name      = local.image_name
-  flavor_name     = local.flavor_name
-  key_pair        = openstack_compute_keypair_v2.terraform-keypair.name
-  security_groups = [openstack_networking_secgroup_v2.terraform-secgroup-api.id]
-
-  network {
-    name = local.network_name
-  }
-
-  user_data = <<-EOF
-    #!/usr/bin/env bash
-    curl -L -s https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/faafo/contrib/install.sh | bash -s -- \
-        -i faafo -r api -m 'amqp://faafo:guest@${openstack_compute_instance_v2.terraform-instance-app-services.access_ip_v4}:5672/' \
-        -d 'mysql+pymysql://faafo:password@${openstack_compute_instance_v2.terraform-instance-app-services.access_ip_v4}:3306/faafo'
-  EOF
-}
-
-###########################################################################
-#
-# create worker instances
-#
-###########################################################################
-resource "openstack_compute_instance_v2" "terraform-instance-app-worker-1" {
-  name            = "my-terraform-app-worker-1"
-  image_name      = local.image_name
-  flavor_name     = local.flavor_name
-  key_pair        = openstack_compute_keypair_v2.terraform-keypair.name
-  security_groups = [openstack_networking_secgroup_v2.terraform-secgroup-worker.id]
-
-  network {
-    name = local.network_name
-  }
-
-  user_data = <<-EOF
-    #!/usr/bin/env bash
-    curl -L -s https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/faafo/contrib/install.sh | bash -s -- \
-        -i faafo -r worker -e 'http://${openstack_compute_instance_v2.terraform-instance-app-api-1.access_ip_v4}' -m 'amqp://faafo:guest@${openstack_compute_instance_v2.terraform-instance-app-services.access_ip_v4}:5672/'
-  EOF
-}
-
-resource "openstack_compute_instance_v2" "terraform-instance-app-worker-2" {
-  name            = "my-terraform-app-worker-2"
-  image_name      = local.image_name
-  flavor_name     = local.flavor_name
-  key_pair        = openstack_compute_keypair_v2.terraform-keypair.name
-  security_groups = [openstack_networking_secgroup_v2.terraform-secgroup-worker.id]
-
-  network {
-    name = local.network_name
-  }
-
-  user_data = <<-EOF
-    #!/usr/bin/env bash
-    curl -L -s https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/faafo/contrib/install.sh | bash -s -- \
-        -i faafo -r worker -e 'http://${openstack_compute_instance_v2.terraform-instance-app-api-1.access_ip_v4}' -m 'amqp://faafo:guest@${openstack_compute_instance_v2.terraform-instance-app-services.access_ip_v4}:5672/'
-  EOF
-}
-
-###########################################################################
-#
-# create load balancer
-#
-###########################################################################
-data "openstack_networking_network_v2" "network_1" {
-  name = local.network_name
-}
-
-resource "openstack_lb_loadbalancer_v2" "lb_1" {
-  vip_subnet_id = data.openstack_networking_network_v2.network_1.subnets[0]
-}
-
-resource "openstack_lb_listener_v2" "listener_1" {
-  protocol        = "HTTP"
-  protocol_port   = 80
-  loadbalancer_id = openstack_lb_loadbalancer_v2.lb_1.id
-  connection_limit = 1024
-}
-
-resource "openstack_lb_pool_v2" "pool_1" {
-  protocol    = "HTTP"
-  lb_method   = "ROUND_ROBIN"
-  listener_id = openstack_lb_listener_v2.listener_1.id
-}
-
-resource "openstack_lb_members_v2" "members_1" {
-  pool_id = openstack_lb_pool_v2.pool_1.id
-
-  member {
-    address       = openstack_compute_instance_v2.terraform-instance-app-api-1.access_ip_v4
-    protocol_port = 80
-  }
-
-  member {
-    address       = openstack_compute_instance_v2.terraform-instance-app-api-2.access_ip_v4
-    protocol_port = 80
-  }
-}
-
-resource "openstack_lb_monitor_v2" "monitor_1" {
-  pool_id        = openstack_lb_pool_v2.pool_1.id
-  type           = "HTTP"
-  delay          = 5
-  timeout        = 5
-  max_retries    = 3
-  http_method    = "GET"
-  url_path       = "/"
-  expected_codes = 200
-}
-
-###########################################################################
-#
-# assign floating ip to load balancer
-#
-###########################################################################
-resource "openstack_networking_floatingip_v2" "fip_1" {
-  pool    = "public1"
-  port_id = openstack_lb_loadbalancer_v2.lb_1.vip_port_id
-}
-
-output "loadbalancer_vip_addr" {
-  value = openstack_networking_floatingip_v2.fip_1
-}