From 9f1a34a266068b93a193b592b54b64703dfb74fc Mon Sep 17 00:00:00 2001 From: Andrea Dell'Amico Date: Tue, 11 Aug 2026 18:34:29 +0200 Subject: [PATCH] Postgresql instance in the s2i2s project. --- modules/postgresql/outputs.tf | 59 +++++ modules/postgresql/postgresql.tf | 252 +++++++++++++++++++++ modules/postgresql/terraform-provider.tf | 10 + modules/postgresql/variables-postgresql.tf | 117 ++++++++++ s2i2s/postgresql/README.md | 55 +++++ s2i2s/postgresql/main.tf | 90 ++++++++ s2i2s/postgresql/outputs.tf | 64 ++++++ s2i2s/postgresql/provider.tf | 14 ++ s2i2s/postgresql/terraform.tfstate | 1 + 9 files changed, 662 insertions(+) create mode 100644 modules/postgresql/outputs.tf create mode 100644 modules/postgresql/postgresql.tf create mode 100644 modules/postgresql/terraform-provider.tf create mode 100644 modules/postgresql/variables-postgresql.tf create mode 100644 s2i2s/postgresql/README.md create mode 100644 s2i2s/postgresql/main.tf create mode 100644 s2i2s/postgresql/outputs.tf create mode 100644 s2i2s/postgresql/provider.tf create mode 100644 s2i2s/postgresql/terraform.tfstate diff --git a/modules/postgresql/outputs.tf b/modules/postgresql/outputs.tf new file mode 100644 index 0000000..f9c4289 --- /dev/null +++ b/modules/postgresql/outputs.tf @@ -0,0 +1,59 @@ +output "postgresql_data" { + description = "The input data, re-exported for the dependent workspaces" + value = var.postgresql_data +} + +output "postgresql_server_id" { + value = openstack_compute_instance_v2.postgresql_server.id +} + +output "postgresql_server_name" { + value = openstack_compute_instance_v2.postgresql_server.name +} + +# Addresses +output "postgresql_main_ip" { + description = "Address on the main private network, used by ansible and by the monitoring" + value = var.postgresql_main_ip +} + +output "postgresql_server_ip" { + description = "Address the service listens on" + value = var.postgresql_data.server_ip +} + +output "postgresql_port" { + value = var.postgresql_data.port +} + +# Dedicated network, needed by every workspace that runs a client of the service +output "postgresql_network" { + value = openstack_networking_network_v2.postgresql_net +} + +output "postgresql_network_id" { + value = openstack_networking_network_v2.postgresql_net.id +} + +output "postgresql_subnet" { + value = openstack_networking_subnet_v2.postgresql_subnet +} + +output "postgresql_subnet_id" { + value = openstack_networking_subnet_v2.postgresql_subnet.id +} + +# Security groups +output "postgresql_access_security_group_id" { + description = "Security group of the server port" + value = openstack_networking_secgroup_v2.postgresql_access.id +} + +output "postgresql_client_access_security_group_id" { + description = "Security group to put on the port that a client has in the dedicated network" + value = openstack_networking_secgroup_v2.postgresql_client_access.id +} + +output "postgresql_client_access_security_group_name" { + value = openstack_networking_secgroup_v2.postgresql_client_access.name +} diff --git a/modules/postgresql/postgresql.tf b/modules/postgresql/postgresql.tf new file mode 100644 index 0000000..8ca12c4 --- /dev/null +++ b/modules/postgresql/postgresql.tf @@ -0,0 +1,252 @@ +# +# Dedicated network of the PostgreSQL service. +# No gateway: it carries database traffic only, the instances reach the rest of +# the world through their port on the main private network. +# +resource "openstack_networking_network_v2" "postgresql_net" { + name = var.postgresql_data.network_name + description = var.postgresql_data.network_description + admin_state_up = "true" + external = "false" + dns_domain = var.dns_zone_name + mtu = var.mtu_size + port_security_enabled = true + shared = false + region = var.main_region +} + +resource "openstack_networking_subnet_v2" "postgresql_subnet" { + name = var.postgresql_data.subnet_name + description = var.postgresql_data.subnet_description + network_id = openstack_networking_network_v2.postgresql_net.id + cidr = var.postgresql_data.network_cidr + dns_nameservers = var.resolvers_ip + ip_version = 4 + enable_dhcp = true + no_gateway = true + allocation_pool { + start = var.postgresql_data.allocation_pool_start + end = var.postgresql_data.allocation_pool_end + } +} + +# +# Security group of the server: the service is reachable only from the +# dedicated network, and only on its port +# +resource "openstack_networking_secgroup_v2" "postgresql_access" { + name = "access_to_the_postgresql_service" + delete_default_rules = "true" + description = "Access to the PostgreSQL service through the dedicated network" +} + +resource "openstack_networking_secgroup_rule_v2" "postgresql_ingress" { + security_group_id = openstack_networking_secgroup_v2.postgresql_access.id + description = "Connections to port ${var.postgresql_data.port} from the ${var.postgresql_data.network_cidr} network" + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = var.postgresql_data.port + port_range_max = var.postgresql_data.port + remote_ip_prefix = var.postgresql_data.network_cidr +} + +resource "openstack_networking_secgroup_rule_v2" "postgresql_ingress_icmp" { + security_group_id = openstack_networking_secgroup_v2.postgresql_access.id + description = "ICMP from the dedicated network" + direction = "ingress" + ethertype = "IPv4" + protocol = "icmp" + remote_ip_prefix = var.postgresql_data.network_cidr +} + +# The port of the server has no default egress rule (delete_default_rules), so +# the answers and DHCP have to be allowed explicitly +resource "openstack_networking_secgroup_rule_v2" "postgresql_egress" { + security_group_id = openstack_networking_secgroup_v2.postgresql_access.id + description = "Egress traffic on the dedicated network" + direction = "egress" + ethertype = "IPv4" + remote_ip_prefix = var.postgresql_data.network_cidr +} + +resource "openstack_networking_secgroup_rule_v2" "postgresql_egress_bootps" { + security_group_id = openstack_networking_secgroup_v2.postgresql_access.id + description = "DHCP requests on the dedicated network" + direction = "egress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 67 + port_range_max = 67 +} + +resource "openstack_networking_secgroup_rule_v2" "postgresql_ingress_bootpc" { + security_group_id = openstack_networking_secgroup_v2.postgresql_access.id + description = "DHCP answers on the dedicated network" + direction = "ingress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 68 + port_range_max = 68 +} + +# +# Security group of the clients: it goes on the port that every client of the +# database has on the dedicated network +# +resource "openstack_networking_secgroup_v2" "postgresql_client_access" { + name = "vm_access_to_the_postgresql_service" + delete_default_rules = "true" + description = "Access to the PostgreSQL service from the port of a VM in the dedicated network" +} + +resource "openstack_networking_secgroup_rule_v2" "client_egress_postgresql" { + security_group_id = openstack_networking_secgroup_v2.postgresql_client_access.id + description = "Connections to port ${var.postgresql_data.port} of the PostgreSQL server" + direction = "egress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = var.postgresql_data.port + port_range_max = var.postgresql_data.port + remote_ip_prefix = var.postgresql_data.server_cidr +} + +resource "openstack_networking_secgroup_rule_v2" "client_egress_icmp" { + security_group_id = openstack_networking_secgroup_v2.postgresql_client_access.id + description = "ICMP to the PostgreSQL server" + direction = "egress" + ethertype = "IPv4" + protocol = "icmp" + remote_ip_prefix = var.postgresql_data.server_cidr +} + +resource "openstack_networking_secgroup_rule_v2" "client_egress_bootps" { + security_group_id = openstack_networking_secgroup_v2.postgresql_client_access.id + description = "DHCP requests on the dedicated network" + direction = "egress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 67 + port_range_max = 67 +} + +resource "openstack_networking_secgroup_rule_v2" "client_ingress_bootpc" { + security_group_id = openstack_networking_secgroup_v2.postgresql_client_access.id + description = "DHCP answers on the dedicated network" + direction = "ingress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 68 + port_range_max = 68 +} + +# +# Volumes: data and WAL on separate SSD backed volumes +# +resource "openstack_blockstorage_volume_v3" "postgresql_data_vol" { + name = var.postgresql_data.vol_data_name + description = "PostgreSQL data directory" + size = var.postgresql_data.vol_data_size + volume_type = var.postgresql_data.volume_type + enable_online_resize = true +} + +resource "openstack_blockstorage_volume_v3" "postgresql_wal_vol" { + name = var.postgresql_data.vol_wal_name + description = "PostgreSQL write ahead log" + size = var.postgresql_data.vol_wal_size + volume_type = var.postgresql_data.volume_type + enable_online_resize = true +} + +# +# Ports. They are defined outside the instance so that the addresses and the +# security groups do not depend on the life cycle of the VM +# +resource "openstack_networking_port_v2" "postgresql_main_port" { + name = "${var.postgresql_data.name}-main-port" + description = "Administration port of the PostgreSQL server on the main private network" + admin_state_up = true + network_id = var.main_private_network_id + security_group_ids = [var.default_security_group_id] + fixed_ip { + subnet_id = var.main_private_subnet_id + ip_address = var.postgresql_main_ip + } +} + +resource "openstack_networking_port_v2" "postgresql_service_port" { + name = "${var.postgresql_data.name}-service-port" + description = "Service port of the PostgreSQL server on the dedicated network" + admin_state_up = true + network_id = openstack_networking_network_v2.postgresql_net.id + security_group_ids = [openstack_networking_secgroup_v2.postgresql_access.id] + fixed_ip { + subnet_id = openstack_networking_subnet_v2.postgresql_subnet.id + ip_address = var.postgresql_data.server_ip + } +} + +# +# Instance +# +resource "openstack_compute_instance_v2" "postgresql_server" { + name = var.postgresql_data.name + availability_zone_hints = var.availability_zone + flavor_name = var.postgresql_data.flavor + key_pair = var.ssh_key_name + + block_device { + uuid = var.image.uuid + source_type = "image" + volume_size = var.postgresql_data.boot_vol_size + boot_index = 0 + destination_type = "volume" + delete_on_termination = false + } + + network { + port = openstack_networking_port_v2.postgresql_main_port.id + } + + network { + port = openstack_networking_port_v2.postgresql_service_port.id + } + + user_data = file(var.image.user_data_file) + + # Do not replace the instance when the ssh key or the user data change + lifecycle { + ignore_changes = [ + key_pair, user_data, network + ] + } +} + +resource "openstack_compute_volume_attach_v2" "postgresql_data_attach" { + instance_id = openstack_compute_instance_v2.postgresql_server.id + volume_id = openstack_blockstorage_volume_v3.postgresql_data_vol.id + device = var.postgresql_data.vol_data_device +} + +resource "openstack_compute_volume_attach_v2" "postgresql_wal_attach" { + instance_id = openstack_compute_instance_v2.postgresql_server.id + volume_id = openstack_blockstorage_volume_v3.postgresql_wal_vol.id + device = var.postgresql_data.vol_wal_device + # The devices are assigned in order, so the WAL volume is attached after the + # data one + depends_on = [openstack_compute_volume_attach_v2.postgresql_data_attach] +} + +# +# Optional A record on the main network address +# +resource "openstack_dns_recordset_v2" "postgresql_recordset" { + count = length(var.postgresql_recordset_name) > 0 ? 1 : 0 + zone_id = var.dns_zone_id + name = var.postgresql_recordset_name + description = "Address of the PostgreSQL server on the main private network" + ttl = 8600 + type = "A" + records = [var.postgresql_main_ip] +} diff --git a/modules/postgresql/terraform-provider.tf b/modules/postgresql/terraform-provider.tf new file mode 100644 index 0000000..31f07e2 --- /dev/null +++ b/modules/postgresql/terraform-provider.tf @@ -0,0 +1,10 @@ +# Define required providers +terraform { + required_version = ">= 0.14.0" + required_providers { + openstack = { + source = "terraform-provider-openstack/openstack" + version = ">= 2.0.0" + } + } +} diff --git a/modules/postgresql/variables-postgresql.tf b/modules/postgresql/variables-postgresql.tf new file mode 100644 index 0000000..7dab962 --- /dev/null +++ b/modules/postgresql/variables-postgresql.tf @@ -0,0 +1,117 @@ +# +# PostgreSQL server on a dedicated network. +# +# The module creates the dedicated network and subnet, the security groups, the +# data and WAL volumes, the two ports (main network and dedicated network) and +# the instance. Nothing is read from another state here: the caller passes in +# everything that comes from the other workspaces. +# +# Sizing and dedicated network belong to the service, so they have defaults +# here. The address on the main private network does not: it is part of the +# address plan of the project, and it is passed in by the caller. +# + +variable "postgresql_data" { + description = "Instance, volumes and dedicated network of the PostgreSQL server" + type = object({ + name = optional(string, "postgresql") + description = optional(string, "PostgreSQL server") + flavor = optional(string, "m1.large") + boot_vol_size = optional(number, 20) + # Address on the dedicated network, the only one the service listens on + server_ip = optional(string, "192.168.0.5") + server_cidr = optional(string, "192.168.0.5/32") + # Dedicated network and subnet + network_name = optional(string, "postgresql-srv-net") + network_description = optional(string, "Network used to communicate with the postgresql service") + subnet_name = optional(string, "postgresql-srv-subnet") + subnet_description = optional(string, "Subnet used to connect to the postgresql service") + network_cidr = optional(string, "192.168.0.0/22") + allocation_pool_start = optional(string, "192.168.0.100") + allocation_pool_end = optional(string, "192.168.3.254") + # Port the service listens on + port = optional(number, 5432) + # Data and WAL volumes. m1.large is RAM 8 - VCPUs 4 + vol_data_name = optional(string, "postgresql-data") + vol_data_size = optional(number, 100) + vol_data_device = optional(string, "/dev/vdb") + vol_wal_name = optional(string, "postgresql-wal") + vol_wal_size = optional(number, 100) + vol_wal_device = optional(string, "/dev/vdc") + volume_type = optional(string, "CephSSD") + }) + default = {} +} + +# Part of the address plan of the project: no default on purpose +variable "postgresql_main_ip" { + type = string + description = "Address of the server on the main private network, used for the administration (ansible, monitoring, backups)" +} + +# Data that comes from the network/DNS and project setup workspaces +variable "main_private_network_id" { + type = string + description = "ID of the main private network of the project" +} + +variable "main_private_subnet_id" { + type = string + description = "ID of the main private subnet of the project" +} + +variable "default_security_group_id" { + type = string + description = "ID of the 'default_for_all' security group of the project" +} + +variable "dns_zone_name" { + type = string + description = "Name of the DNS zone of the project, with the trailing dot" +} + +variable "resolvers_ip" { + type = list(string) + description = "DNS resolvers configured on the dedicated subnet" +} + +variable "mtu_size" { + type = number + description = "MTU of the dedicated network" +} + +variable "main_region" { + type = string + description = "OpenStack region of the dedicated network" +} + +variable "availability_zone" { + type = string + description = "Availability zone hint of the instance" +} + +variable "image" { + description = "Image of the instance: uuid and cloud-init user data file" + type = object({ + uuid = string + user_data_file = string + }) +} + +variable "ssh_key_name" { + type = string + description = "Name of the SSH key pair injected by cloud-init" +} + +# Optional DNS record, useful when the service has to be reached by name +variable "dns_zone_id" { + type = string + default = "" + description = "ID of the DNS zone. Required when postgresql_recordset_name is set" +} + +variable "postgresql_recordset_name" { + type = string + default = "" + description = "Name of an A record pointing to the main network address, with the trailing dot. Empty means no record" +} diff --git a/s2i2s/postgresql/README.md b/s2i2s/postgresql/README.md new file mode 100644 index 0000000..15b61fd --- /dev/null +++ b/s2i2s/postgresql/README.md @@ -0,0 +1,55 @@ +# PostgreSQL server of the S2I2S project + +One VM, `m1.large` (RAM 8 - VCPUs 4), Ubuntu 24.04, 20 GB of root disk, with +**two interfaces**: + +| Interface | Address | Use | +|---|---|---| +| main private network | `10.10.0.162` | administration: ansible, monitoring, backups | +| `postgresql-srv-net` (created here) | `192.168.0.5` | the only address the database listens on | + +and **two SSD volumes of 100 GB** (`CephSSD`): `/dev/vdb` for the data +directory, `/dev/vdc` for the write ahead log. + +The dedicated network is `192.168.0.0/22`, no gateway, DHCP pool +`192.168.0.100 - 192.168.3.254`. The addresses match what the ansible playbooks +already expect (`postgresql_production_host` and +`shared_postgresql_server_public` in `group_vars/openstack_s2i2s` of +`infrastructure-playbooks`). + +Two security groups are created: + +* `access_to_the_postgresql_service` — on the server port: ingress on 5432 and + ICMP from `192.168.0.0/22` only; +* `vm_access_to_the_postgresql_service` — to be put on the port that **every + client** has in the dedicated network: egress to `192.168.0.5/32:5432` plus + ICMP and DHCP. Its ID is an output of this workspace, used for instance by + `s2i2s/keycloak`. + +The resources, the sizing and the dedicated network are in +[`../../modules/postgresql`](../../modules/postgresql), as defaults of +`postgresql_data`: override them in the module call to change them. The only +thing this workspace decides is the address on the main private network, which +comes from the address plan in [`../variables`](../variables) +(`basic_services_ip.postgresql`). + +## Order of the applies + +``` +main_net_dns_router -> project-setup -> postgresql +``` + +This workspace reads the state of the first two. + +```bash +tofu init +tofu plan -out=postgresql.plan +tofu apply postgresql.plan +``` + +After the apply, regenerate the ansible inventory in +`infrastructure-playbooks`, which reads this state: + +```bash +ansible-playbook tofu-inventory.yml --diff +``` diff --git a/s2i2s/postgresql/main.tf b/s2i2s/postgresql/main.tf new file mode 100644 index 0000000..5a4ebb9 --- /dev/null +++ b/s2i2s/postgresql/main.tf @@ -0,0 +1,90 @@ +# PostgreSQL server of the S2I2S OpenStack project. +# +# One VM with two interfaces: +# - the main private network (10.10.0.162), used by ansible, the monitoring +# and the backups; +# - a dedicated network (192.168.0.0/22, address 192.168.0.5) created here, +# which is the only one the database listens on. Every client needs a port +# in that network carrying the 'vm_access_to_the_postgresql_service' +# security group, exported by this workspace. +# +# Two SSD volumes, 100 GB each: the data directory and the write ahead log. +# +# Apply order: main_net_dns_router -> project-setup -> this one. + +# Network, DNS zone and images +data "terraform_remote_state" "privnet_dns_router" { + backend = "local" + config = { + path = "../main_net_dns_router/terraform.tfstate" + } +} + +# Security groups of the project (the 'default_for_all' one is needed here) +data "terraform_remote_state" "project_setup" { + backend = "local" + config = { + path = "../project-setup/terraform.tfstate" + } +} + +module "labs_common_variables" { + source = "../../modules/labs_common_variables" +} + +module "project_variables" { + source = "../variables" +} + +module "ssh_settings" { + source = "../../modules/ssh-key-ref" +} + +locals { + # From the network/DNS state + dns_zone = data.terraform_remote_state.privnet_dns_router.outputs.dns_zone + dns_zone_id = data.terraform_remote_state.privnet_dns_router.outputs.dns_zone_id + main_private_network_id = data.terraform_remote_state.privnet_dns_router.outputs.main_private_network_id + main_private_subnet_id = data.terraform_remote_state.privnet_dns_router.outputs.main_subnet_network_id + + # From the project setup state + default_security_group_id = data.terraform_remote_state.project_setup.outputs.default_security_group_id + + # From the common and project variables + availability_zone = module.labs_common_variables.availability_zones_names.availability_zone_no_gpu + ubuntu_2404 = module.labs_common_variables.ubuntu_2404 + ubuntu2404_data_file = module.labs_common_variables.ubuntu2404_data_file + resolvers_ip = module.labs_common_variables.resolvers_ip + mtu_size = module.labs_common_variables.mtu_size + main_region = module.labs_common_variables.main_region + basic_services_ip = module.project_variables.basic_services_ip +} + +module "postgresql" { + source = "../../modules/postgresql" + + # Address plan of the project. The sizing and the dedicated network come from + # the module defaults + postgresql_main_ip = local.basic_services_ip.postgresql + + main_private_network_id = local.main_private_network_id + main_private_subnet_id = local.main_private_subnet_id + default_security_group_id = local.default_security_group_id + + dns_zone_name = local.dns_zone.name + resolvers_ip = local.resolvers_ip + mtu_size = local.mtu_size + main_region = local.main_region + + availability_zone = local.availability_zone + image = { + uuid = local.ubuntu_2404.uuid + user_data_file = local.ubuntu2404_data_file + } + ssh_key_name = module.ssh_settings.ssh_key_name + + # A record on the main network address, so that the clients and the playbooks + # can use the name instead of the address + dns_zone_id = local.dns_zone_id + postgresql_recordset_name = "postgresql.${local.dns_zone.name}" +} diff --git a/s2i2s/postgresql/outputs.tf b/s2i2s/postgresql/outputs.tf new file mode 100644 index 0000000..f9ba201 --- /dev/null +++ b/s2i2s/postgresql/outputs.tf @@ -0,0 +1,64 @@ +# Instance +output "postgresql_server_id" { + value = module.postgresql.postgresql_server_id +} + +output "postgresql_server_name" { + value = module.postgresql.postgresql_server_name +} + +output "postgresql_server_data" { + value = module.postgresql.postgresql_data +} + +# Addresses +output "postgresql_main_ip" { + description = "Address on the main private network. Used by the ansible inventory" + value = module.postgresql.postgresql_main_ip +} + +output "postgresql_server_ip" { + description = "Address the service listens on" + value = module.postgresql.postgresql_server_ip +} + +output "postgresql_port" { + value = module.postgresql.postgresql_port +} + +# Dedicated network. Every workspace that deploys a client of the database +# needs these +output "postgresql_network" { + value = module.postgresql.postgresql_network +} + +output "postgresql_network_id" { + value = module.postgresql.postgresql_network_id +} + +output "postgresql_subnet" { + value = module.postgresql.postgresql_subnet +} + +output "postgresql_subnet_id" { + value = module.postgresql.postgresql_subnet_id +} + +output "postgresql_access_security_group_id" { + value = module.postgresql.postgresql_access_security_group_id +} + +output "postgresql_client_access_security_group_id" { + description = "To be added to the port that a client has in the dedicated network" + value = module.postgresql.postgresql_client_access_security_group_id +} + +output "postgresql_client_access_security_group_name" { + value = module.postgresql.postgresql_client_access_security_group_name +} + +# Re-exported for convenience of the dependent workspaces and of the ansible +# inventory generator +output "dns_zone" { + value = local.dns_zone +} diff --git a/s2i2s/postgresql/provider.tf b/s2i2s/postgresql/provider.tf new file mode 100644 index 0000000..a890a41 --- /dev/null +++ b/s2i2s/postgresql/provider.tf @@ -0,0 +1,14 @@ +# Define required providers +terraform { + required_version = ">= 0.14.0" + required_providers { + openstack = { + source = "terraform-provider-openstack/openstack" + version = ">= 2.0.0" + } + } +} + +provider "openstack" { + cloud = "s2i2s" +} diff --git a/s2i2s/postgresql/terraform.tfstate b/s2i2s/postgresql/terraform.tfstate new file mode 100644 index 0000000..c817e76 --- /dev/null +++ b/s2i2s/postgresql/terraform.tfstate @@ -0,0 +1 @@ +{"version":4,"terraform_version":"1.11.6","serial":3,"lineage":"de1b1d3d-9399-3658-7800-997367c90ac6","outputs":{"dns_zone":{"value":{"attributes":{},"description":"DNS primary zone for the S2I2S project","disable_status_check":false,"email":"postmaster@isti.cnr.it","id":"e826e777-0196-4f63-b2a9-df07f70e618f","masters":[],"name":"s2i2s.cloud.isti.cnr.it.","project_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","region":"isti_area_pi_1","timeouts":null,"ttl":8600,"type":"PRIMARY","value_specs":null},"type":["object",{"attributes":["map","string"],"description":"string","disable_status_check":"bool","email":"string","id":"string","masters":["set","string"],"name":"string","project_id":"string","region":"string","timeouts":["object",{"create":"string","delete":"string","update":"string"}],"ttl":"number","type":"string","value_specs":["map","string"]}]},"postgresql_access_security_group_id":{"value":"d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8","type":"string"},"postgresql_client_access_security_group_id":{"value":"09df1cb3-0654-47a0-be50-55bb79b011c9","type":"string"},"postgresql_client_access_security_group_name":{"value":"vm_access_to_the_postgresql_service","type":"string"},"postgresql_main_ip":{"value":"10.10.0.162","type":"string"},"postgresql_network":{"value":{"admin_state_up":true,"all_tags":[],"availability_zone_hints":[],"description":"Network used to communicate with the postgresql service","dns_domain":"s2i2s.cloud.isti.cnr.it.","external":false,"id":"2b4f3653-5016-427f-9ae2-31144f691a93","mtu":8942,"name":"postgresql-srv-net","port_security_enabled":true,"qos_policy_id":"","region":"isti_area_pi_1","segments":[],"shared":false,"tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"transparent_vlan":false,"value_specs":null},"type":["object",{"admin_state_up":"bool","all_tags":["set","string"],"availability_zone_hints":["set","string"],"description":"string","dns_domain":"string","external":"bool","id":"string","mtu":"number","name":"string","port_security_enabled":"bool","qos_policy_id":"string","region":"string","segments":["set",["object",{"network_type":"string","physical_network":"string","segmentation_id":"number"}]],"shared":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"create":"string","delete":"string"}],"transparent_vlan":"bool","value_specs":["map","string"]}]},"postgresql_network_id":{"value":"2b4f3653-5016-427f-9ae2-31144f691a93","type":"string"},"postgresql_port":{"value":5432,"type":"number"},"postgresql_server_data":{"value":{"allocation_pool_end":"192.168.3.254","allocation_pool_start":"192.168.0.100","boot_vol_size":20,"description":"PostgreSQL server","flavor":"m1.large","name":"postgresql","network_cidr":"192.168.0.0/22","network_description":"Network used to communicate with the postgresql service","network_name":"postgresql-srv-net","port":5432,"server_cidr":"192.168.0.5/32","server_ip":"192.168.0.5","subnet_description":"Subnet used to connect to the postgresql service","subnet_name":"postgresql-srv-subnet","vol_data_device":"/dev/vdb","vol_data_name":"postgresql-data","vol_data_size":100,"vol_wal_device":"/dev/vdc","vol_wal_name":"postgresql-wal","vol_wal_size":100,"volume_type":"CephSSD"},"type":["object",{"allocation_pool_end":"string","allocation_pool_start":"string","boot_vol_size":"number","description":"string","flavor":"string","name":"string","network_cidr":"string","network_description":"string","network_name":"string","port":"number","server_cidr":"string","server_ip":"string","subnet_description":"string","subnet_name":"string","vol_data_device":"string","vol_data_name":"string","vol_data_size":"number","vol_wal_device":"string","vol_wal_name":"string","vol_wal_size":"number","volume_type":"string"}]},"postgresql_server_id":{"value":"1078fcff-0eee-48a7-b061-a2ceaedc844c","type":"string"},"postgresql_server_ip":{"value":"192.168.0.5","type":"string"},"postgresql_server_name":{"value":"postgresql","type":"string"},"postgresql_subnet":{"value":{"all_tags":[],"allocation_pool":[{"end":"192.168.3.254","start":"192.168.0.100"}],"cidr":"192.168.0.0/22","description":"Subnet used to connect to the postgresql service","dns_nameservers":["146.48.29.97","146.48.29.98","146.48.29.99"],"dns_publish_fixed_ip":false,"enable_dhcp":true,"gateway_ip":"","id":"228da08f-2b49-4d76-bec4-abab0510f275","ip_version":4,"ipv6_address_mode":"","ipv6_ra_mode":"","name":"postgresql-srv-subnet","network_id":"2b4f3653-5016-427f-9ae2-31144f691a93","no_gateway":true,"prefix_length":null,"region":"isti_area_pi_1","segment_id":"","service_types":[],"subnetpool_id":"","tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"value_specs":null},"type":["object",{"all_tags":["set","string"],"allocation_pool":["set",["object",{"end":"string","start":"string"}]],"cidr":"string","description":"string","dns_nameservers":["list","string"],"dns_publish_fixed_ip":"bool","enable_dhcp":"bool","gateway_ip":"string","id":"string","ip_version":"number","ipv6_address_mode":"string","ipv6_ra_mode":"string","name":"string","network_id":"string","no_gateway":"bool","prefix_length":"number","region":"string","segment_id":"string","service_types":["list","string"],"subnetpool_id":"string","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"create":"string","delete":"string"}],"value_specs":["map","string"]}]},"postgresql_subnet_id":{"value":"228da08f-2b49-4d76-bec4-abab0510f275","type":"string"}},"resources":[{"mode":"data","type":"terraform_remote_state","name":"privnet_dns_router","provider":"provider[\"terraform.io/builtin/terraform\"]","instances":[{"schema_version":0,"attributes":{"backend":"local","config":{"value":{"path":"../main_net_dns_router/terraform.tfstate"},"type":["object",{"path":"string"}]},"defaults":null,"outputs":{"value":{"almalinux_9":{"name":"AlmaLinux-9.8 20260526","user_data_file":"../../s2i2s_openstack_vm_data_scripts/almalinux9.sh","uuid":"172f1c52-fa06-4d7d-9db7-0735ab6ef403"},"availability_zone_no_gpu_name":"cnr-isti-nova-a","availability_zone_with_gpu_name":"cnr-isti-nova-gpu-a","availability_zones_names":{"availability_zone_no_gpu":"cnr-isti-nova-a","availability_zone_with_gpu":"cnr-isti-nova-gpu-a"},"centos_7":{"name":"CentOS-7","user_data_file":"../../s2i2s_openstack_vm_data_scripts/el.sh","uuid":"f0187a99-64f6-462a-ab5f-ef52fe62f2ca"},"default_security_group_name":"default_for_all","dns_zone":{"attributes":{},"description":"DNS primary zone for the S2I2S project","disable_status_check":false,"email":"postmaster@isti.cnr.it","id":"e826e777-0196-4f63-b2a9-df07f70e618f","masters":[],"name":"s2i2s.cloud.isti.cnr.it.","project_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","region":"isti_area_pi_1","timeouts":null,"ttl":8600,"type":"PRIMARY","value_specs":null},"dns_zone_id":"e826e777-0196-4f63-b2a9-df07f70e618f","el7_data_file":"../../s2i2s_openstack_vm_data_scripts/el.sh","external_gateway_ip":[{"ip_address":"146.48.30.6","subnet_id":"57f87509-4016-46fb-b8c3-25fca7f72ccb"}],"external_network":{"id":"1d2ff137-6ff7-4017-be2b-0d6c4af2353b","name":"external-network"},"external_network_id":"1d2ff137-6ff7-4017-be2b-0d6c4af2353b","flavor_list":{"c1_large":"c1.large","c1_medium":"c1.medium","c1_small":"c1.small","c2_large":"c2.large","m1_large":"m1.large","m1_medium":"m1.medium","m1_xlarge":"m1.xlarge","m1_xxl":"m1.xxl","m2_large":"m2.large","m2_medium":"m2.medium","m2_small":"m2.small","m3_large":"m3.large"},"floating_ip_pools":{"main_public_ip_pool":"external-network"},"main_private_network":{"admin_state_up":true,"all_tags":[],"availability_zone_hints":[],"description":"S2I2S private network (use this as the main network)","dns_domain":"s2i2s.cloud.isti.cnr.it.","external":false,"id":"f371c239-6d5d-4ac8-a17e-af607752d82c","mtu":8942,"name":"s2i2s-proj-main","port_security_enabled":true,"qos_policy_id":"","region":"isti_area_pi_1","segments":[{"network_type":"geneve","physical_network":"","segmentation_id":47850}],"shared":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"transparent_vlan":false,"value_specs":null},"main_private_network_id":"f371c239-6d5d-4ac8-a17e-af607752d82c","main_region":"isti_area_pi_1","main_subnet_network":{"all_tags":[],"allocation_pool":[{"end":"10.10.7.254","start":"10.10.1.1"}],"cidr":"10.10.0.0/21","description":"S2I2S main private subnet","dns_nameservers":["146.48.29.97","146.48.29.98","146.48.29.99"],"dns_publish_fixed_ip":false,"enable_dhcp":true,"gateway_ip":"10.10.0.1","id":"19c649ee-96ea-438b-ac0c-512afdf5046d","ip_version":4,"ipv6_address_mode":"","ipv6_ra_mode":"","name":"s2i2s-proj-main-subnet","network_id":"f371c239-6d5d-4ac8-a17e-af607752d82c","no_gateway":false,"prefix_length":null,"region":"isti_area_pi_1","segment_id":"","service_types":[],"subnetpool_id":"","tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"value_specs":null},"main_subnet_network_id":"19c649ee-96ea-438b-ac0c-512afdf5046d","mtu_size":8942,"os_project_data":{"id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","name":"s2i2s-proj-cloud"},"policy_list":{"affinity":"affinity","anti_affinity":"anti-affinity","soft_affinity":"soft-affinity","soft_anti_affinity":"soft-anti-affinity"},"resolvers_ip":["146.48.29.97","146.48.29.98","146.48.29.99"],"ssh_sources":{"d4s_vpn_1_cidr":"146.48.122.27/32","d4s_vpn_2_cidr":"146.48.122.49/32","infrascience_net_cidr":"146.48.122.0/23","isti_net_cidr":"146.48.80.0/21","isti_vpn_gw1":"146.48.80.101/32","isti_vpn_gw2":"146.48.80.102/32","isti_vpn_gw3":"146.48.80.103/32","s2i2s_net_cidr":"146.48.28.0/22","s2i2s_vpn_1_cidr":"146.48.28.10/32","s2i2s_vpn_2_cidr":"146.48.28.11/32","shell_d4s_cidr":"146.48.122.95/32"},"ubuntu2204_data_file":"../../s2i2s_openstack_vm_data_scripts/ubuntu2204.sh","ubuntu_2204":{"name":"Ubuntu-Jammy-22.04","user_data_file":"../../s2i2s_openstack_vm_data_scripts/ubuntu2204.sh","uuid":"54768889-8556-4be4-a2eb-82a4d9b34627"}},"type":["object",{"almalinux_9":["map","string"],"availability_zone_no_gpu_name":"string","availability_zone_with_gpu_name":"string","availability_zones_names":["map","string"],"centos_7":["map","string"],"default_security_group_name":"string","dns_zone":["object",{"attributes":["map","string"],"description":"string","disable_status_check":"bool","email":"string","id":"string","masters":["set","string"],"name":"string","project_id":"string","region":"string","timeouts":["object",{"create":"string","delete":"string","update":"string"}],"ttl":"number","type":"string","value_specs":["map","string"]}],"dns_zone_id":"string","el7_data_file":"string","external_gateway_ip":["list",["object",{"ip_address":"string","subnet_id":"string"}]],"external_network":["map","string"],"external_network_id":"string","flavor_list":["map","string"],"floating_ip_pools":["map","string"],"main_private_network":["object",{"admin_state_up":"bool","all_tags":["set","string"],"availability_zone_hints":["set","string"],"description":"string","dns_domain":"string","external":"bool","id":"string","mtu":"number","name":"string","port_security_enabled":"bool","qos_policy_id":"string","region":"string","segments":["set",["object",{"network_type":"string","physical_network":"string","segmentation_id":"number"}]],"shared":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"create":"string","delete":"string"}],"transparent_vlan":"bool","value_specs":["map","string"]}],"main_private_network_id":"string","main_region":"string","main_subnet_network":["object",{"all_tags":["set","string"],"allocation_pool":["set",["object",{"end":"string","start":"string"}]],"cidr":"string","description":"string","dns_nameservers":["list","string"],"dns_publish_fixed_ip":"bool","enable_dhcp":"bool","gateway_ip":"string","id":"string","ip_version":"number","ipv6_address_mode":"string","ipv6_ra_mode":"string","name":"string","network_id":"string","no_gateway":"bool","prefix_length":"number","region":"string","segment_id":"string","service_types":["list","string"],"subnetpool_id":"string","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"create":"string","delete":"string"}],"value_specs":["map","string"]}],"main_subnet_network_id":"string","mtu_size":"number","os_project_data":["map","string"],"policy_list":["map","string"],"resolvers_ip":["list","string"],"ssh_sources":["map","string"],"ubuntu2204_data_file":"string","ubuntu_2204":["map","string"]}]},"workspace":null},"sensitive_attributes":[]}]},{"mode":"data","type":"terraform_remote_state","name":"project_setup","provider":"provider[\"terraform.io/builtin/terraform\"]","instances":[{"schema_version":0,"attributes":{"backend":"local","config":{"value":{"path":"../project-setup/terraform.tfstate"},"type":["object",{"path":"string"}]},"defaults":null,"outputs":{"value":{"access_to_the_jump_proxy":{"all_tags":[],"delete_default_rules":true,"description":"Security group that allows SSH access to the jump node from a limited set of sources","id":"4c6b6683-77fa-4d1a-8ba2-41acf10a12ba","name":"ssh_access_to_the_jump_node","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"acme_challenge_hostname":"_acme-challenge.s2i2s.cloud.isti.cnr.it.","availability_zones_names":{"availability_zone_no_gpu":"cnr-isti-nova-a","availability_zone_with_gpu":"cnr-isti-nova-gpu-a"},"basic_services_ip":{"ca":"10.10.0.4","ca_cidr":"10.10.0.4/32","forgejo":"10.10.0.165","forgejo_cidr":"10.10.0.165/32","haproxy_l7_1":"10.10.0.11","haproxy_l7_1_cidr":"10.10.0.11/32","haproxy_l7_2":"10.10.0.12","haproxy_l7_2_cidr":"10.10.0.12/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","octavia_main":"10.10.0.20","octavia_main_cidr":"10.10.0.20/32","postgresql":"10.10.0.162","postgresql_cidr":"10.10.0.162/32","prometheus":"10.10.0.10","prometheus_cidr":"10.10.0.10/32","ssh_jump":"10.10.0.5","ssh_jump_cidr":"10.10.0.5/32"},"debugging":{"all_tags":[],"delete_default_rules":true,"description":"Security group that allows web app debugging via tunnel from the ssh jump node","id":"6c21f51b-9cad-4051-99b6-221bed658a83","name":"debugging_from_jump_node","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"default_security_group":{"all_tags":[],"delete_default_rules":true,"description":"Default security group with rules for ssh access via jump proxy, prometheus scraping","id":"1ec8a419-f9cf-473f-a022-6499d67d57b8","name":"default_for_all","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"default_security_group_id":"1ec8a419-f9cf-473f-a022-6499d67d57b8","default_security_group_name":"default_for_all","dns_zone":{"attributes":{},"description":"DNS primary zone for the S2I2S project","disable_status_check":false,"email":"postmaster@isti.cnr.it","id":"e826e777-0196-4f63-b2a9-df07f70e618f","masters":[],"name":"s2i2s.cloud.isti.cnr.it.","project_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","region":"isti_area_pi_1","timeouts":null,"ttl":8600,"type":"PRIMARY","value_specs":null},"dns_zone_id":"e826e777-0196-4f63-b2a9-df07f70e618f","floating_ip_pools":{"main_public_ip_pool":"external-network"},"haproxy_l7_data":{"flavor":"m1.medium","name":"main-haproxy-l7","vm_count":"2"},"internal_ca_data":{"flavor":"m1.small","name":"ca"},"internal_ca_id":"286b7a4d-33c6-451f-9019-d9fd79265181","main_haproxy_l7_ids":["b42a0e99-6172-4a5d-886c-c0fb016da60e","b770644a-5c39-4db2-8811-fb62751bd789"],"main_haproxy_l7_ip":["10.10.0.11","10.10.0.12"],"main_lb_to_haproxy_l7_security_group":{"all_tags":[],"delete_default_rules":true,"description":"Traffic coming from the main L4 lb (OVN provider, client IP is preserved) directed to the haproxy l7 servers","id":"613cacac-ac46-46ab-ba7a-d66f61cce84d","name":"traffic_from_main_lb_to_haproxy_l7","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"main_loadbalancer_hostname":"main-lb.s2i2s.cloud.isti.cnr.it.","main_loadbalancer_id":"44dbe548-a436-4816-927a-2912f443b50f","main_loadbalancer_ip":"10.10.0.20","main_loadbalancer_public_ip":"146.48.30.30","main_private_network":{"admin_state_up":true,"all_tags":[],"availability_zone_hints":[],"description":"S2I2S private network (use this as the main network)","dns_domain":"s2i2s.cloud.isti.cnr.it.","external":false,"id":"f371c239-6d5d-4ac8-a17e-af607752d82c","mtu":8942,"name":"s2i2s-proj-main","port_security_enabled":true,"qos_policy_id":"","region":"isti_area_pi_1","segments":[{"network_type":"geneve","physical_network":"","segmentation_id":47850}],"shared":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"transparent_vlan":false,"value_specs":null},"main_private_subnet":{"all_tags":[],"allocation_pool":[{"end":"10.10.7.254","start":"10.10.1.1"}],"cidr":"10.10.0.0/21","description":"S2I2S main private subnet","dns_nameservers":["146.48.29.97","146.48.29.98","146.48.29.99"],"dns_publish_fixed_ip":false,"enable_dhcp":true,"gateway_ip":"10.10.0.1","id":"19c649ee-96ea-438b-ac0c-512afdf5046d","ip_version":4,"ipv6_address_mode":"","ipv6_ra_mode":"","name":"s2i2s-proj-main-subnet","network_id":"f371c239-6d5d-4ac8-a17e-af607752d82c","no_gateway":false,"prefix_length":null,"region":"isti_area_pi_1","segment_id":"","service_types":[],"subnetpool_id":"","tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"value_specs":null},"main_region":"isti_area_pi_1","main_subnet_network_id":"19c649ee-96ea-438b-ac0c-512afdf5046d","mtu_size":8942,"os_project_data":{"id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","name":"s2i2s-proj-cloud"},"prometheus_access_from_grafana":{"all_tags":[],"delete_default_rules":true,"description":"The public grafana server must be able to get data from Prometheus","id":"48e9366f-23a8-47df-abcd-66f84d4af395","name":"prometheus_access_from_grafana","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"prometheus_hostname":"prometheus.s2i2s.cloud.isti.cnr.it.","prometheus_public_ip":"146.48.31.67","prometheus_server_data":{"flavor":"m1.medium","name":"prometheus","public_grafana_server_cidr":"146.48.28.103/32","vol_data_device":"/dev/vdb","vol_data_name":"prometheus-data","vol_data_size":"100"},"prometheus_server_id":"d2a37e7c-3eaa-4929-b70d-cfb55416d8bc","public_web":{"all_tags":[],"delete_default_rules":true,"description":"Security group that allows HTTPS and HTTP from everywhere, for the services that are not behind any load balancer","id":"31140e64-667a-4044-b388-79afcc6bcb69","name":"public_web_service","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"resolvers_ip":["146.48.29.97","146.48.29.98","146.48.29.99"],"restricted_web":{"all_tags":[],"delete_default_rules":true,"description":"Security group that restricts HTTPS sources to the VPN nodes and shell.d4science.org. HTTP is open to all, because letsencrypt","id":"359d7ae7-cdff-47c2-bf69-7d423860d2d2","name":"restricted_web_service","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"ssh_jump_proxy":{"flavor":"m2.small","name":"ssh-jump-proxy"},"ssh_jump_proxy_hostname":"ssh-jump-proxy.s2i2s.cloud.isti.cnr.it.","ssh_jump_proxy_id":"6aed1634-ec4e-43b0-a8c6-2da42a27ad25","ssh_jump_proxy_public_ip":"146.48.31.105","ssh_sources":{"d4s_vpn_1_cidr":"146.48.122.27/32","d4s_vpn_2_cidr":"146.48.122.49/32","infrascience_net_cidr":"146.48.122.0/23","isti_net_cidr":"146.48.80.0/21","isti_vpn_gw1":"146.48.80.101/32","isti_vpn_gw2":"146.48.80.102/32","isti_vpn_gw3":"146.48.80.103/32","s2i2s_net_cidr":"146.48.28.0/22","s2i2s_vpn_1_cidr":"146.48.28.10/32","s2i2s_vpn_2_cidr":"146.48.28.11/32","shell_d4s_cidr":"146.48.122.95/32"},"traffic_from_main_haproxy":{"all_tags":[],"delete_default_rules":true,"description":"Allow traffic from the main L7 HAPROXY load balancers","id":"56ba7585-659a-49ac-8d8e-c85ebcb1179f","name":"traffic_from_the_main_load_balancers","region":"isti_area_pi_1","stateful":false,"tags":[],"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"ubuntu2204_data_file":"../../s2i2s_openstack_vm_data_scripts/ubuntu2204.sh","ubuntu2404_data_file":"../../s2i2s_openstack_vm_data_scripts/ubuntu2404.sh","ubuntu_2204":{"name":"Ubuntu-Jammy-22.04","user_data_file":"../../s2i2s_openstack_vm_data_scripts/ubuntu2204.sh","uuid":"54768889-8556-4be4-a2eb-82a4d9b34627"},"ubuntu_2404":{"name":"Ubuntu-Noble-24.04.img","user_data_file":"../../s2i2s_openstack_vm_data_scripts/ubuntu2404.sh","uuid":"fc3f705d-3cf5-4866-8ef6-ff6e2cdd4075"}},"type":["object",{"access_to_the_jump_proxy":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"acme_challenge_hostname":"string","availability_zones_names":["map","string"],"basic_services_ip":["map","string"],"debugging":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"default_security_group":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"default_security_group_id":"string","default_security_group_name":"string","dns_zone":["object",{"attributes":["map","string"],"description":"string","disable_status_check":"bool","email":"string","id":"string","masters":["set","string"],"name":"string","project_id":"string","region":"string","timeouts":["object",{"create":"string","delete":"string","update":"string"}],"ttl":"number","type":"string","value_specs":["map","string"]}],"dns_zone_id":"string","floating_ip_pools":["map","string"],"haproxy_l7_data":["map","string"],"internal_ca_data":["map","string"],"internal_ca_id":"string","main_haproxy_l7_ids":["tuple",["string","string"]],"main_haproxy_l7_ip":["list","string"],"main_lb_to_haproxy_l7_security_group":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"main_loadbalancer_hostname":"string","main_loadbalancer_id":"string","main_loadbalancer_ip":"string","main_loadbalancer_public_ip":"string","main_private_network":["object",{"admin_state_up":"bool","all_tags":["set","string"],"availability_zone_hints":["set","string"],"description":"string","dns_domain":"string","external":"bool","id":"string","mtu":"number","name":"string","port_security_enabled":"bool","qos_policy_id":"string","region":"string","segments":["set",["object",{"network_type":"string","physical_network":"string","segmentation_id":"number"}]],"shared":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"create":"string","delete":"string"}],"transparent_vlan":"bool","value_specs":["map","string"]}],"main_private_subnet":["object",{"all_tags":["set","string"],"allocation_pool":["set",["object",{"end":"string","start":"string"}]],"cidr":"string","description":"string","dns_nameservers":["list","string"],"dns_publish_fixed_ip":"bool","enable_dhcp":"bool","gateway_ip":"string","id":"string","ip_version":"number","ipv6_address_mode":"string","ipv6_ra_mode":"string","name":"string","network_id":"string","no_gateway":"bool","prefix_length":"number","region":"string","segment_id":"string","service_types":["list","string"],"subnetpool_id":"string","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"create":"string","delete":"string"}],"value_specs":["map","string"]}],"main_region":"string","main_subnet_network_id":"string","mtu_size":"number","os_project_data":["map","string"],"prometheus_access_from_grafana":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"prometheus_hostname":"string","prometheus_public_ip":"string","prometheus_server_data":["map","string"],"prometheus_server_id":"string","public_web":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"resolvers_ip":["list","string"],"restricted_web":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"ssh_jump_proxy":["map","string"],"ssh_jump_proxy_hostname":"string","ssh_jump_proxy_id":"string","ssh_jump_proxy_public_ip":"string","ssh_sources":["map","string"],"traffic_from_main_haproxy":["object",{"all_tags":["set","string"],"delete_default_rules":"bool","description":"string","id":"string","name":"string","region":"string","stateful":"bool","tags":["set","string"],"tenant_id":"string","timeouts":["object",{"delete":"string"}]}],"ubuntu2204_data_file":"string","ubuntu2404_data_file":"string","ubuntu_2204":["map","string"],"ubuntu_2404":["map","string"]}]},"workspace":null},"sensitive_attributes":[]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_blockstorage_volume_v3","name":"postgresql_data_vol","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"attachment":[],"availability_zone":"nova","backup_id":"","consistency_group_id":null,"description":"PostgreSQL data directory","enable_online_resize":true,"id":"4791f6e7-ba22-460a-a1ee-9a1aa48373da","image_id":null,"metadata":{},"name":"postgresql-data","region":"isti_area_pi_1","scheduler_hints":[],"size":100,"snapshot_id":"","source_replica":null,"source_vol_id":"","timeouts":null,"volume_retype_policy":"never","volume_type":"CephSSD"},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0="}]},{"module":"module.postgresql","mode":"managed","type":"openstack_blockstorage_volume_v3","name":"postgresql_wal_vol","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"attachment":[],"availability_zone":"nova","backup_id":"","consistency_group_id":null,"description":"PostgreSQL write ahead log","enable_online_resize":true,"id":"71f2b8cc-7a1b-4983-ae62-84dd562f0e6c","image_id":null,"metadata":{},"name":"postgresql-wal","region":"isti_area_pi_1","scheduler_hints":[],"size":100,"snapshot_id":"","source_replica":null,"source_vol_id":"","timeouts":null,"volume_retype_policy":"never","volume_type":"CephSSD"},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0="}]},{"module":"module.postgresql","mode":"managed","type":"openstack_compute_instance_v2","name":"postgresql_server","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"access_ip_v4":"10.10.0.162","access_ip_v6":"","admin_pass":null,"all_metadata":{},"all_tags":[],"availability_zone":"cnr-isti-nova-a","availability_zone_hints":"cnr-isti-nova-a","block_device":[{"boot_index":0,"delete_on_termination":false,"destination_type":"volume","device_type":"","disk_bus":"","guest_format":"","multiattach":false,"source_type":"image","uuid":"fc3f705d-3cf5-4866-8ef6-ff6e2cdd4075","volume_size":20,"volume_type":""}],"config_drive":null,"created":"2026-08-11 15:43:42 +0000 UTC","flavor_id":"9","flavor_name":"m1.large","force_delete":false,"hypervisor_hostname":"","id":"1078fcff-0eee-48a7-b061-a2ceaedc844c","image_id":"Attempt to boot from volume - no image supplied","image_name":null,"key_pair":"adellam","metadata":null,"name":"postgresql","network":[{"access_network":false,"fixed_ip_v4":"10.10.0.162","fixed_ip_v6":"","mac":"fa:16:3e:55:cb:a3","name":"s2i2s-proj-main","port":"59e7f753-f4b5-453a-ab6e-6c318fdfb005","uuid":"f371c239-6d5d-4ac8-a17e-af607752d82c"},{"access_network":false,"fixed_ip_v4":"192.168.0.5","fixed_ip_v6":"","mac":"fa:16:3e:91:f5:79","name":"postgresql-srv-net","port":"c84112f1-6c1b-4ff8-869a-aaf802d7e73e","uuid":"2b4f3653-5016-427f-9ae2-31144f691a93"}],"network_mode":null,"personality":[],"power_state":"active","region":"isti_area_pi_1","scheduler_hints":[],"security_groups":["access_to_the_postgresql_service","default_for_all"],"stop_before_destroy":false,"tags":null,"timeouts":null,"updated":"2026-08-11 15:44:25 +0000 UTC","user_data":"164cdf695f3b4a01a2f8b9dc0af2f87629bd89a7","vendor_options":[]},"sensitive_attributes":[[{"type":"get_attr","value":"admin_pass"}]],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInVwZGF0ZSI6MTgwMDAwMDAwMDAwMH19","dependencies":["data.terraform_remote_state.privnet_dns_router","data.terraform_remote_state.project_setup","module.postgresql.openstack_networking_network_v2.postgresql_net","module.postgresql.openstack_networking_port_v2.postgresql_main_port","module.postgresql.openstack_networking_port_v2.postgresql_service_port","module.postgresql.openstack_networking_secgroup_v2.postgresql_access","module.postgresql.openstack_networking_subnet_v2.postgresql_subnet"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_compute_volume_attach_v2","name":"postgresql_data_attach","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"device":"/dev/vdb","id":"1078fcff-0eee-48a7-b061-a2ceaedc844c/4791f6e7-ba22-460a-a1ee-9a1aa48373da","instance_id":"1078fcff-0eee-48a7-b061-a2ceaedc844c","multiattach":null,"region":"isti_area_pi_1","tag":null,"timeouts":null,"vendor_options":[],"volume_id":"4791f6e7-ba22-460a-a1ee-9a1aa48373da"},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0=","dependencies":["data.terraform_remote_state.privnet_dns_router","data.terraform_remote_state.project_setup","module.postgresql.openstack_blockstorage_volume_v3.postgresql_data_vol","module.postgresql.openstack_compute_instance_v2.postgresql_server","module.postgresql.openstack_networking_network_v2.postgresql_net","module.postgresql.openstack_networking_port_v2.postgresql_main_port","module.postgresql.openstack_networking_port_v2.postgresql_service_port","module.postgresql.openstack_networking_secgroup_v2.postgresql_access","module.postgresql.openstack_networking_subnet_v2.postgresql_subnet"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_compute_volume_attach_v2","name":"postgresql_wal_attach","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"device":"/dev/vdc","id":"1078fcff-0eee-48a7-b061-a2ceaedc844c/71f2b8cc-7a1b-4983-ae62-84dd562f0e6c","instance_id":"1078fcff-0eee-48a7-b061-a2ceaedc844c","multiattach":null,"region":"isti_area_pi_1","tag":null,"timeouts":null,"vendor_options":[],"volume_id":"71f2b8cc-7a1b-4983-ae62-84dd562f0e6c"},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0=","dependencies":["data.terraform_remote_state.privnet_dns_router","data.terraform_remote_state.project_setup","module.postgresql.openstack_blockstorage_volume_v3.postgresql_data_vol","module.postgresql.openstack_blockstorage_volume_v3.postgresql_wal_vol","module.postgresql.openstack_compute_instance_v2.postgresql_server","module.postgresql.openstack_compute_volume_attach_v2.postgresql_data_attach","module.postgresql.openstack_networking_network_v2.postgresql_net","module.postgresql.openstack_networking_port_v2.postgresql_main_port","module.postgresql.openstack_networking_port_v2.postgresql_service_port","module.postgresql.openstack_networking_secgroup_v2.postgresql_access","module.postgresql.openstack_networking_subnet_v2.postgresql_subnet"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_dns_recordset_v2","name":"postgresql_recordset","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"index_key":0,"schema_version":0,"attributes":{"description":"Address of the PostgreSQL server on the main private network","disable_status_check":false,"id":"e826e777-0196-4f63-b2a9-df07f70e618f/f182c646-bc17-4c62-85b1-30dac79d3f72","name":"postgresql.s2i2s.cloud.isti.cnr.it.","project_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","records":["10.10.0.162"],"region":"isti_area_pi_1","timeouts":null,"ttl":8600,"type":"A","value_specs":null,"zone_id":"e826e777-0196-4f63-b2a9-df07f70e618f"},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH19","dependencies":["data.terraform_remote_state.privnet_dns_router"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_network_v2","name":"postgresql_net","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"admin_state_up":true,"all_tags":[],"availability_zone_hints":[],"description":"Network used to communicate with the postgresql service","dns_domain":"s2i2s.cloud.isti.cnr.it.","external":false,"id":"2b4f3653-5016-427f-9ae2-31144f691a93","mtu":8942,"name":"postgresql-srv-net","port_security_enabled":true,"qos_policy_id":"","region":"isti_area_pi_1","segments":[],"shared":false,"tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"transparent_vlan":false,"value_specs":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0=","dependencies":["data.terraform_remote_state.privnet_dns_router"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_port_v2","name":"postgresql_main_port","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"admin_state_up":true,"all_fixed_ips":["10.10.0.162"],"all_security_group_ids":["1ec8a419-f9cf-473f-a022-6499d67d57b8"],"all_tags":[],"allowed_address_pairs":[],"binding":[{"host_id":"","profile":"","vif_details":{},"vif_type":"","vnic_type":"normal"}],"description":"Administration port of the PostgreSQL server on the main private network","device_id":"","device_owner":"","dns_assignment":[{"fqdn":"host-10-10-0-162.internal-cloud.isti.cnr.it.","hostname":"host-10-10-0-162","ip_address":"10.10.0.162"}],"dns_name":"","extra_dhcp_option":[],"fixed_ip":[{"ip_address":"10.10.0.162","subnet_id":"19c649ee-96ea-438b-ac0c-512afdf5046d"}],"id":"59e7f753-f4b5-453a-ab6e-6c318fdfb005","mac_address":"fa:16:3e:55:cb:a3","name":"postgresql-main-port","network_id":"f371c239-6d5d-4ac8-a17e-af607752d82c","no_fixed_ip":null,"no_security_groups":null,"port_security_enabled":true,"qos_policy_id":"","region":"isti_area_pi_1","security_group_ids":["1ec8a419-f9cf-473f-a022-6499d67d57b8"],"tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"value_specs":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0=","dependencies":["data.terraform_remote_state.privnet_dns_router","data.terraform_remote_state.project_setup"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_port_v2","name":"postgresql_service_port","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"admin_state_up":true,"all_fixed_ips":["192.168.0.5"],"all_security_group_ids":["d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8"],"all_tags":[],"allowed_address_pairs":[],"binding":[{"host_id":"","profile":"","vif_details":{},"vif_type":"","vnic_type":"normal"}],"description":"Service port of the PostgreSQL server on the dedicated network","device_id":"","device_owner":"","dns_assignment":[{"fqdn":"host-192-168-0-5.internal-cloud.isti.cnr.it.","hostname":"host-192-168-0-5","ip_address":"192.168.0.5"}],"dns_name":"","extra_dhcp_option":[],"fixed_ip":[{"ip_address":"192.168.0.5","subnet_id":"228da08f-2b49-4d76-bec4-abab0510f275"}],"id":"c84112f1-6c1b-4ff8-869a-aaf802d7e73e","mac_address":"fa:16:3e:91:f5:79","name":"postgresql-service-port","network_id":"2b4f3653-5016-427f-9ae2-31144f691a93","no_fixed_ip":null,"no_security_groups":null,"port_security_enabled":true,"qos_policy_id":"","region":"isti_area_pi_1","security_group_ids":["d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8"],"tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"value_specs":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0=","dependencies":["data.terraform_remote_state.privnet_dns_router","module.postgresql.openstack_networking_network_v2.postgresql_net","module.postgresql.openstack_networking_secgroup_v2.postgresql_access","module.postgresql.openstack_networking_subnet_v2.postgresql_subnet"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"client_egress_bootps","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"DHCP requests on the dedicated network","direction":"egress","ethertype":"IPv4","id":"ef82cbd7-690a-424b-b334-7b88aea7fd54","port_range_max":67,"port_range_min":67,"protocol":"udp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"","security_group_id":"09df1cb3-0654-47a0-be50-55bb79b011c9","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_client_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"client_egress_icmp","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"ICMP to the PostgreSQL server","direction":"egress","ethertype":"IPv4","id":"1ff0ace1-0c92-43e3-a006-5e47ef006f9a","port_range_max":0,"port_range_min":0,"protocol":"icmp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"192.168.0.5/32","security_group_id":"09df1cb3-0654-47a0-be50-55bb79b011c9","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_client_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"client_egress_postgresql","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"Connections to port 5432 of the PostgreSQL server","direction":"egress","ethertype":"IPv4","id":"fbd06def-5750-4d1d-a054-1c3e33623d5a","port_range_max":5432,"port_range_min":5432,"protocol":"tcp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"192.168.0.5/32","security_group_id":"09df1cb3-0654-47a0-be50-55bb79b011c9","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_client_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"client_ingress_bootpc","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"DHCP answers on the dedicated network","direction":"ingress","ethertype":"IPv4","id":"c65cf276-2522-451c-a11d-16e3f7619bd4","port_range_max":68,"port_range_min":68,"protocol":"udp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"","security_group_id":"09df1cb3-0654-47a0-be50-55bb79b011c9","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_client_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"postgresql_egress","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"Egress traffic on the dedicated network","direction":"egress","ethertype":"IPv4","id":"4728b03a-21c4-4484-86e7-d77e34b1795e","port_range_max":0,"port_range_min":0,"protocol":"","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"192.168.0.0/22","security_group_id":"d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"postgresql_egress_bootps","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"DHCP requests on the dedicated network","direction":"egress","ethertype":"IPv4","id":"9375992b-795c-42a0-93bb-a57caf45f501","port_range_max":67,"port_range_min":67,"protocol":"udp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"","security_group_id":"d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"postgresql_ingress","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"Connections to port 5432 from the 192.168.0.0/22 network","direction":"ingress","ethertype":"IPv4","id":"cfb5b2c4-c3b7-46a3-ac4d-3e1390708954","port_range_max":5432,"port_range_min":5432,"protocol":"tcp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"192.168.0.0/22","security_group_id":"d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"postgresql_ingress_bootpc","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"DHCP answers on the dedicated network","direction":"ingress","ethertype":"IPv4","id":"cf3020b2-92c7-4e11-9d64-0eaf5f44d020","port_range_max":68,"port_range_min":68,"protocol":"udp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"","security_group_id":"d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_rule_v2","name":"postgresql_ingress_icmp","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"description":"ICMP from the dedicated network","direction":"ingress","ethertype":"IPv4","id":"e5c53b33-4a37-474b-9fba-278b71adef38","port_range_max":0,"port_range_min":0,"protocol":"icmp","region":"isti_area_pi_1","remote_address_group_id":"","remote_group_id":"","remote_ip_prefix":"192.168.0.0/22","security_group_id":"d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8","tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ==","dependencies":["module.postgresql.openstack_networking_secgroup_v2.postgresql_access"]}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_v2","name":"postgresql_access","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"all_tags":[],"delete_default_rules":true,"description":"Access to the PostgreSQL service through the dedicated network","id":"d23b5c1b-ec2f-4dd3-9f1d-b4936d4e45b8","name":"access_to_the_postgresql_service","region":"isti_area_pi_1","stateful":false,"tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ=="}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_secgroup_v2","name":"postgresql_client_access","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"all_tags":[],"delete_default_rules":true,"description":"Access to the PostgreSQL service from the port of a VM in the dedicated network","id":"09df1cb3-0654-47a0-be50-55bb79b011c9","name":"vm_access_to_the_postgresql_service","region":"isti_area_pi_1","stateful":false,"tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjo2MDAwMDAwMDAwMDB9fQ=="}]},{"module":"module.postgresql","mode":"managed","type":"openstack_networking_subnet_v2","name":"postgresql_subnet","provider":"provider[\"registry.opentofu.org/terraform-provider-openstack/openstack\"]","instances":[{"schema_version":0,"attributes":{"all_tags":[],"allocation_pool":[{"end":"192.168.3.254","start":"192.168.0.100"}],"cidr":"192.168.0.0/22","description":"Subnet used to connect to the postgresql service","dns_nameservers":["146.48.29.97","146.48.29.98","146.48.29.99"],"dns_publish_fixed_ip":false,"enable_dhcp":true,"gateway_ip":"","id":"228da08f-2b49-4d76-bec4-abab0510f275","ip_version":4,"ipv6_address_mode":"","ipv6_ra_mode":"","name":"postgresql-srv-subnet","network_id":"2b4f3653-5016-427f-9ae2-31144f691a93","no_gateway":true,"prefix_length":null,"region":"isti_area_pi_1","segment_id":"","service_types":[],"subnetpool_id":"","tags":null,"tenant_id":"d0dcc2b7f3004c9a81b87ab60ec3c0d3","timeouts":null,"value_specs":null},"sensitive_attributes":[],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0=","dependencies":["data.terraform_remote_state.privnet_dns_router","module.postgresql.openstack_networking_network_v2.postgresql_net"]}]}],"check_results":null}