diff --git a/openstack-tf/d4s-dev/geoserver_new/.terraform.lock.hcl b/openstack-tf/d4s-dev/geoserver_new/.terraform.lock.hcl new file mode 100644 index 0000000..95c8b6a --- /dev/null +++ b/openstack-tf/d4s-dev/geoserver_new/.terraform.lock.hcl @@ -0,0 +1,24 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/terraform-provider-openstack/openstack" { + version = "1.53.0" + constraints = "~> 1.53.0" + hashes = [ + "h1:YLGvYkSuagyP5orUTyKNK+JhzS17EFTUDpZ5R5/fFv4=", + "zh:09da7ca98ffd3de7b9ce36c4c13446212a6e763ba1162be71b50f95d453cb68e", + "zh:14041bcbb87312411d88612056ed185650bfd01284b8ea0761ce8105a331708e", + "zh:35bf4c788fdbc17c8e40ebc7b33c7de4b45a2fa2efaa657b10f0e3bd37c9627f", + "zh:46ede8ef4cfa12d654c538afc1e1ec34a1f3e8eb4e986ee23dceae398b7176a6", + "zh:59675734990dab1e8d87997853ea75e8104bba730b3f5a7146ac735540c9d6bf", + "zh:6de52428849806498670e827b54810be7510a2a79449602c1aede4235a0ec036", + "zh:78b2a20601272afceffac8f8ca78a6b647b84196c0dd8dc710fae297f6be15a4", + "zh:7c41ed3a4fac09677e676ecf9f9edd1e38eef449e656cb01a848d2c799c6de8f", + "zh:852800228f4118a4aa6cfaa4468b851247cbed6f037fd204f08de69eb1edc149", + "zh:86d618e7f9a07d978b8bc4b190be350a00de64ec535f9c8f5dfe133542a55483", + "zh:963a9e72b66d8bcf43de9b14a674ae3ca3719ce2f829217f7a65b66fc3773397", + "zh:a8e72ab67795071bda61f99a6de3d2d40122fb51971768fd75e1324abe874ced", + "zh:ce1890cf3af17d569af3bc7673cec0a8f78e6f5d701767593f3d29c551f44848", + "zh:e6f1b96eb684f527a47f71923f268c86a36d7894751b31ee9e726d7502a639cd", + ] +} diff --git a/openstack-tf/d4s-dev/geoserver_new/main.tf b/openstack-tf/d4s-dev/geoserver_new/main.tf new file mode 100644 index 0000000..65d6a74 --- /dev/null +++ b/openstack-tf/d4s-dev/geoserver_new/main.tf @@ -0,0 +1,124 @@ +# Define required providers +terraform { + required_version = ">= 0.14.0" + required_providers { + openstack = { + source = "terraform-provider-openstack/openstack" + version = "~> 1.53.0" + } + } +} + +data "terraform_remote_state" "privnet_dns_router" { + backend = "local" + + config = { + path = "../project-setup/terraform.tfstate" + } +} + +module "geo_service" { + + source = "../../modules/geo_services" + + # Here, you can overwrite the openstack_vm_data_scripts to run for ubuntuXYZ.sh + # user_data_var_file = { + # user_data_file = "../../openstack_vm_data_scripts/ubuntu2204.sh" + # } + + geo_service_instances_map = { + geona = { + name = "geoserver-geona", + description = "Geoserver geona instance", + flavor = "m1.xlarge", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-geona_data_volume", + vol_data_size = "50" + }, + esquiline = { + name = "geoserver-esquiline", + description = "Geoserver esquiline instance", + flavor = "m2.small", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-esquiline_data_volume", + vol_data_size = "20" + }, + ariadne = { + name = "geoserver-ariadne", + description = "Geoserver ariadne instance", + flavor = "m2.small", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-ariadne_data_volume", + vol_data_size = "20" + }, + grsf = { + name = "geoserver-grsf", + description = "Geoserver grsf instance", + flavor = "m1.large", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-grsf_data_volume", + vol_data_size = "40" + }, + protectedareaimpactmaps = { + name = "geoserver-protectedareaimpactmaps", + description = "Geoserver protectedareaimpactmaps instance", + flavor = "c1.large", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-protectedareaimpactmaps_data_volume", + vol_data_size = "70" + } + sdi-lab = { + name = "geoserver-sdi-lab", + description = "Geoserver sdi-lab instance", + flavor = "m1.large", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-sdi-lab_data_volume", + vol_data_size = "100" + } + tunaatlas = { + name = "geoserver-tunaatlas", + description = "Geoserver tunaatlas instance", + flavor = "m1.large", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-tunaatlas_data_volume", + vol_data_size = "60" + } + wecafc-firms = { + name = "geoserver-wecafc-firms", + description = "Geoserver wecafc-firms instance", + flavor = "m1.large", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-wecafc-firms_data_volume", + vol_data_size = "40" + } + aquacultureatlas = { + name = "geoserver-aquacultureatlas", + description = "Geoserver aquacultureatlas instance", + flavor = "m1.large", + networks = ["d4s-dev-cloud-main", "postgresql-srv-net"], + security_groups = ["default", "http and https from the load balancers"], + block_device_uuid = "7ed6a2cd-2b07-482e-8ce4-f018dff16c89" #ubuntu_18_04.uuid of DEV + vol_data_name = "geoserver-aquacultureatlas_data_volume", + vol_data_size = "50" + } + + } + + +} diff --git a/openstack-tf/d4s-dev/geoserver_new/provider.tf b/openstack-tf/d4s-dev/geoserver_new/provider.tf new file mode 100644 index 0000000..fa7a121 --- /dev/null +++ b/openstack-tf/d4s-dev/geoserver_new/provider.tf @@ -0,0 +1,3 @@ +provider "openstack" { + cloud = "d4s-dev" +} diff --git a/openstack-tf/modules/geo_services/.terraform.lock.hcl b/openstack-tf/modules/geo_services/.terraform.lock.hcl new file mode 100644 index 0000000..95c8b6a --- /dev/null +++ b/openstack-tf/modules/geo_services/.terraform.lock.hcl @@ -0,0 +1,24 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/terraform-provider-openstack/openstack" { + version = "1.53.0" + constraints = "~> 1.53.0" + hashes = [ + "h1:YLGvYkSuagyP5orUTyKNK+JhzS17EFTUDpZ5R5/fFv4=", + "zh:09da7ca98ffd3de7b9ce36c4c13446212a6e763ba1162be71b50f95d453cb68e", + "zh:14041bcbb87312411d88612056ed185650bfd01284b8ea0761ce8105a331708e", + "zh:35bf4c788fdbc17c8e40ebc7b33c7de4b45a2fa2efaa657b10f0e3bd37c9627f", + "zh:46ede8ef4cfa12d654c538afc1e1ec34a1f3e8eb4e986ee23dceae398b7176a6", + "zh:59675734990dab1e8d87997853ea75e8104bba730b3f5a7146ac735540c9d6bf", + "zh:6de52428849806498670e827b54810be7510a2a79449602c1aede4235a0ec036", + "zh:78b2a20601272afceffac8f8ca78a6b647b84196c0dd8dc710fae297f6be15a4", + "zh:7c41ed3a4fac09677e676ecf9f9edd1e38eef449e656cb01a848d2c799c6de8f", + "zh:852800228f4118a4aa6cfaa4468b851247cbed6f037fd204f08de69eb1edc149", + "zh:86d618e7f9a07d978b8bc4b190be350a00de64ec535f9c8f5dfe133542a55483", + "zh:963a9e72b66d8bcf43de9b14a674ae3ca3719ce2f829217f7a65b66fc3773397", + "zh:a8e72ab67795071bda61f99a6de3d2d40122fb51971768fd75e1324abe874ced", + "zh:ce1890cf3af17d569af3bc7673cec0a8f78e6f5d701767593f3d29c551f44848", + "zh:e6f1b96eb684f527a47f71923f268c86a36d7894751b31ee9e726d7502a639cd", + ] +} diff --git a/openstack-tf/modules/geo_services/geo_service.tf b/openstack-tf/modules/geo_services/geo_service.tf new file mode 100644 index 0000000..63e22d6 --- /dev/null +++ b/openstack-tf/modules/geo_services/geo_service.tf @@ -0,0 +1,49 @@ +module "ssh_settings" { + source = "../../modules/ssh-key-ref" +} + +module "common_variables" { + source = "../../modules/common_variables" +} + +# Geo_Service attached volume - used for 'external volume' +resource "openstack_blockstorage_volume_v3" "geo_service_data_volume" { + for_each = var.geo_service_instances_map + name = each.value.vol_data_name + size = each.value.vol_data_size +} + +# Geo_Service instance +resource "openstack_compute_instance_v2" "geo_service" { + for_each = var.geo_service_instances_map + name = each.value.name + availability_zone_hints = module.common_variables.availability_zone_no_gpu_name + flavor_name = each.value.flavor + key_pair = module.ssh_settings.ssh_key_name + security_groups = each.value.security_groups + block_device { + uuid = each.value.block_device_uuid + source_type = "image" + volume_size = 10 + boot_index = 0 + destination_type = "volume" + delete_on_termination = false + } + dynamic "network" { + for_each = each.value.networks + content { + name = network.value + } + } + user_data = file("${var.user_data_var_file.user_data_file}") #default is 18.04 +} + + +# Attach the additional volume +resource "openstack_compute_volume_attach_v2" "geo_service_data_attach_vol" { + for_each = var.geo_service_instances_map + instance_id = openstack_compute_instance_v2.geo_service[each.key].id + volume_id = openstack_blockstorage_volume_v3.geo_service_data_volume[each.key].id + device = var.geo_instance_basic_data.vol_data_device + depends_on = [openstack_compute_instance_v2.geo_service] +} diff --git a/openstack-tf/modules/geo_services/inputs.tf b/openstack-tf/modules/geo_services/inputs.tf new file mode 100644 index 0000000..df29485 --- /dev/null +++ b/openstack-tf/modules/geo_services/inputs.tf @@ -0,0 +1,33 @@ + +#Default geoserver vol_data_device +variable "geo_instance_basic_data" { + type = map(string) + default = { + vol_data_device = "/dev/vdb" + } +} + +variable "user_data_var_file" { + type = map(string) + default = { + user_data_file = "../../openstack_vm_data_scripts/ubuntu1804.sh" + } +} + +#Default geo_service_instances_map is EMPTY. Override it to create a proper geoserver plan +variable "geo_service_instances_map" { + type = map(object({ + name = string + description = string + flavor = string + networks = list(string) + security_groups = list(string) + block_device_uuid = string + vol_data_name = string + vol_data_size = string + })) + default = { + geoserver = { name = "", description = "", flavor = "", networks = [], security_groups = [], block_device_uuid = "", vol_data_name = "", vol_data_size = "" } + } + +} diff --git a/openstack-tf/modules/geo_services/outputs.tf b/openstack-tf/modules/geo_services/outputs.tf new file mode 100644 index 0000000..a030e92 --- /dev/null +++ b/openstack-tf/modules/geo_services/outputs.tf @@ -0,0 +1,13 @@ +output "smartgears_service_instances_map" { + value = var.geo_service_instances_map +} + +output "geo_instance_basic_data" { + value = var.geo_instance_basic_data +} + +output "user_data_var_file" { + value = var.user_data_var_file +} + + diff --git a/openstack-tf/modules/geo_services/terraform-provider.tf b/openstack-tf/modules/geo_services/terraform-provider.tf new file mode 100644 index 0000000..a931880 --- /dev/null +++ b/openstack-tf/modules/geo_services/terraform-provider.tf @@ -0,0 +1,11 @@ +# Define required providers +terraform { + required_version = ">= 0.14.0" + required_providers { + openstack = { + source = "terraform-provider-openstack/openstack" + version = "~> 1.53.0" + } + } +} +