Skip to content
Snippets Groups Projects
Commit afd3bef5 authored by Sebastian Rieger's avatar Sebastian Rieger
Browse files

removed old demo4 tf file, added terraform state stuff to .gitignore

parent 23f48f85
No related branches found
No related tags found
No related merge requests found
clouds.yaml
**/clouds.yaml
venv
**/terraform.exe
**/terraform.tfstate
**/terraform.tfstate.backup
**/.terraform.lock.hcl
**/.terraform
# 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
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment