Skip to content

Conversation

@anton-sidelnikov
Copy link
Member

No description provided.

@atlantisotc
Copy link
Contributor

atlantisotc bot commented Oct 2, 2025

Ran Plan for project: multitenancy-dev dir: terraform-multitenancy/envs/eu-de/dev workspace: default

Show Output
data.opentelekomcloud_compute_availability_zones_v2.zones: Reading...
data.opentelekomcloud_compute_availability_zones_v2.zones: Read complete after 0s [id=3726637984]

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
 <= read (data resources)

Terraform will perform the following actions:

  # module.apigw.opentelekomcloud_apigw_api_publishment_v2.pub will be created
+ resource "opentelekomcloud_apigw_api_publishment_v2" "pub" {
      + api_id           = (known after apply)
      + api_name         = (known after apply)
      + environment_id   = "DEFAULT_ENVIRONMENT_RELEASE_ID"
      + environment_name = (known after apply)
      + gateway_id       = (known after apply)
      + history          = (known after apply)
      + id               = (known after apply)
      + publish_id       = (known after apply)
      + published_at     = (known after apply)
      + region           = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_api_v2.api will be created
+ resource "opentelekomcloud_apigw_api_v2" "api" {
      + cors                            = false
      + gateway_id                      = (known after apply)
      + group_id                        = (known after apply)
      + id                              = (known after apply)
      + match_mode                      = "EXACT"
      + name                            = "birthday-api"
      + region                          = (known after apply)
      + registered_at                   = (known after apply)
      + request_method                  = "ANY"
      + request_protocol                = "HTTPS"
      + request_uri                     = "/hello/{username}"
      + security_authentication_enabled = (known after apply)
      + security_authentication_type    = "NONE"
      + type                            = "Public"
      + updated_at                      = (known after apply)

      + func_graph {
          + function_urn    = (known after apply)
          + invocation_type = "sync"
          + network_type    = (known after apply)
          + timeout         = 5000
          + version         = "latest"
        }

      + request_params {
          + enumeration = (known after apply)
          + location    = "PATH"
          + name        = "username"
          + required    = true
          + type        = "STRING"
        }
    }

  # module.apigw.opentelekomcloud_apigw_gateway_v2.gw will be created
+ resource "opentelekomcloud_apigw_gateway_v2" "gw" {
      + availability_zones              = [
          + "eu-de-01",
        ]
      + bandwidth_size                  = 5
      + default_group_id                = (known after apply)
      + description                     = "Dedicated gateway for workshop"
      + enterprise_project_id           = (known after apply)
      + id                              = (known after apply)
      + ingress_bandwidth_charging_mode = "bandwidth"
      + ingress_bandwidth_size          = 5
      + loadbalancer_provider           = "elb"
      + maintain_begin                  = (known after apply)
      + maintain_end                    = (known after apply)
      + name                            = "workshop-gw"
      + private_egress_addresses        = (known after apply)
      + project_id                      = (known after apply)
      + public_egress_address           = (known after apply)
      + region                          = (known after apply)
      + security_group_id               = (known after apply)
      + spec_id                         = "BASIC"
      + status                          = (known after apply)
      + subnet_id                       = (known after apply)
      + supported_features              = (known after apply)
      + vpc_id                          = (known after apply)
      + vpc_ingress_address             = (known after apply)
      + vpcep_service_name              = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_group_v2.group will be created
+ resource "opentelekomcloud_apigw_group_v2" "group" {
      + id                = (known after apply)
      + instance_id       = (known after apply)
      + name              = "workshop-group"
      + region            = (known after apply)
      + registration_time = (known after apply)
      + updated_at        = (known after apply)
    }

  # module.function.opentelekomcloud_fgs_function_v2.this will be created
+ resource "opentelekomcloud_fgs_function_v2" "this" {
      + agency                  = "fg_agency"
      + allow_ephemeral_storage = (known after apply)
      + apig_route_enable       = (known after apply)
      + app                     = "default"
      + app_agency              = (known after apply)
      + code_filename           = (known after apply)
      + code_type               = "obs"
      + code_url                = (known after apply)
      + depend_list             = (known after apply)
      + description             = "FGS function for birthday API"
      + dns_list                = (known after apply)
      + enable_auth_in_header   = (known after apply)
      + ephemeral_storage       = (known after apply)
      + extend_config           = (known after apply)
      + functiongraph_version   = (known after apply)
      + gpu_type                = (known after apply)
      + handler                 = "handler.func_handler"
      + heartbeat_handler       = (known after apply)
      + id                      = (known after apply)
      + initializer_handler     = (known after apply)
      + initializer_timeout     = (known after apply)
      + is_stateful_function    = (known after apply)
      + log_group_id            = (known after apply)
      + log_group_name          = "fg-log-group"
      + log_topic_id            = (known after apply)
      + log_topic_name          = "fg-log-stream"
      + max_instance_num        = (known after apply)
      + memory_size             = 256
      + mount_user_group_id     = (known after apply)
      + mount_user_id           = (known after apply)
      + name                    = "birthday-api"
      + network_id              = (known after apply)
      + region                  = (known after apply)
      + runtime                 = "Python3.9"
      + timeout                 = 10
      + urn                     = (known after apply)
      + user_data               = (sensitive value)
      + version                 = (known after apply)
      + vpc_id                  = (known after apply)
    }

  # module.function.opentelekomcloud_lts_group_v2.group will be created
+ resource "opentelekomcloud_lts_group_v2" "group" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + group_name            = "fg-log-group"
      + id                    = (known after apply)
      + region                = (known after apply)
      + ttl_in_days           = 30
    }

  # module.function.opentelekomcloud_lts_stream_v2.stream will be created
+ resource "opentelekomcloud_lts_stream_v2" "stream" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + filter_count          = (known after apply)
      + group_id              = (known after apply)
      + id                    = (known after apply)
      + region                = (known after apply)
      + stream_name           = "fg-log-stream"
      + ttl_in_days           = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["0"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 443
      + port_range_min    = 443
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["1"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 80
      + port_range_min    = 80
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["2"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 8080
      + port_range_min    = 8080
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_v2.apigw will be created
+ resource "opentelekomcloud_networking_secgroup_v2" "apigw" {
      + description = "Allow necessary ports from everywhere"
      + id          = (known after apply)
      + name        = "workshop-apigw-sg"
      + region      = (known after apply)
      + tenant_id   = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_subnet_v1.subnet will be created
+ resource "opentelekomcloud_vpc_subnet_v1" "subnet" {
      + availability_zone = (known after apply)
      + cidr              = "10.10.1.0/24"
      + cidr_ipv6         = (known after apply)
      + dhcp_enable       = true
      + dns_list          = (known after apply)
      + gateway_ip        = "10.10.1.1"
      + gateway_ipv6      = (known after apply)
      + id                = (known after apply)
      + name              = "workshop-fgs-subnet"
      + network_id        = (known after apply)
      + primary_dns       = (known after apply)
      + region            = (known after apply)
      + secondary_dns     = (known after apply)
      + status            = (known after apply)
      + subnet_id         = (known after apply)
      + vpc_id            = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_v1.vpc will be created
+ resource "opentelekomcloud_vpc_v1" "vpc" {
      + cidr   = "10.10.0.0/16"
      + id     = (known after apply)
      + name   = "workshop-fgs-vpc"
      + region = (known after apply)
      + shared = (known after apply)
      + status = (known after apply)
    }

  # module.packager.data.archive_file.function_zip will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "archive_file" "function_zip" {
      + id                  = (known after apply)
      + output_base64sha256 = (known after apply)
      + output_base64sha512 = (known after apply)
      + output_md5          = (known after apply)
      + output_path         = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + output_sha          = (known after apply)
      + output_sha256       = (known after apply)
      + output_sha512       = (known after apply)
      + output_size         = (known after apply)
      + source_dir          = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function_pkg"
      + type                = "zip"
    }

  # module.packager.null_resource.build_function will be created
+ resource "null_resource" "build_function" {
      + id       = (known after apply)
      + triggers = {
          + "source_hash" = "696120c75625bfa1cf2a8509a52660a466ad2457e1abf25a88887f655a768464"
        }
    }

  # module.packager.opentelekomcloud_obs_bucket.bucket will be created
+ resource "opentelekomcloud_obs_bucket" "bucket" {
      + acl                = "private"
      + bucket             = "workshop-bucket"
      + bucket_domain_name = (known after apply)
      + bucket_version     = (known after apply)
      + force_destroy      = false
      + id                 = (known after apply)
      + region             = (known after apply)
      + storage_class      = "STANDARD"
      + user_domain_names  = (known after apply)
      + versioning         = false
    }

  # module.packager.opentelekomcloud_obs_bucket_object.object will be created
+ resource "opentelekomcloud_obs_bucket_object" "object" {
      + bucket        = "workshop-bucket"
      + etag          = (known after apply)
      + id            = (known after apply)
      + key           = (known after apply)
      + size          = (known after apply)
      + source        = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + storage_class = (known after apply)
      + version_id    = (known after apply)
    }

  # module.redis.opentelekomcloud_dcs_instance_v2.redis will be created
+ resource "opentelekomcloud_dcs_instance_v2" "redis" {
      + access_user                  = (known after apply)
      + availability_zones           = [
          + "eu-de-01",
        ]
      + bandwidth_info               = (known after apply)
      + cache_mode                   = (known after apply)
      + capacity                     = 0.125
      + cpu_type                     = (known after apply)
      + created_at                   = (known after apply)
      + description                  = (known after apply)
      + domain_name                  = (known after apply)
      + enable_whitelist             = (known after apply)
      + engine                       = "Redis"
      + engine_version               = "6.0"
      + flavor                       = "redis.ha.xu1.tiny.r2.128"
      + id                           = (known after apply)
      + launched_at                  = (known after apply)
      + maintain_begin               = "02:00:00"
      + maintain_end                 = "06:00:00"
      + max_memory                   = (known after apply)
      + name                         = "workshop-redis"
      + password                     = (sensitive value)
      + port                         = (known after apply)
      + private_ip                   = (known after apply)
      + product_type                 = (known after apply)
      + readonly_domain_name         = (known after apply)
      + region                       = (known after apply)
      + replica_count                = (known after apply)
      + security_group_name          = (known after apply)
      + sharding_count               = (known after apply)
      + ssl_enable                   = (known after apply)
      + status                       = (known after apply)
      + subnet_cidr                  = (known after apply)
      + subnet_id                    = (known after apply)
      + subnet_name                  = (known after apply)
      + transparent_client_ip_enable = (known after apply)
      + used_memory                  = (known after apply)
      + user_id                      = (known after apply)
      + user_name                    = (known after apply)
      + vpc_id                       = (known after apply)
      + vpc_name                     = (known after apply)
    }

Plan: 17 to add, 0 to change, 0 to destroy.

Changes to Outputs:
+ api_debug_domain = (known after apply)
+ function_urn     = (known after apply)
  • ▶️ To apply this plan, comment:
    atlantis apply -p multitenancy-dev
  • 🚮 To delete this plan and lock, click here
  • 🔁 To plan this project again, comment:
    atlantis plan -p multitenancy-dev

Plan: 17 to add, 0 to change, 0 to destroy.


  • ⏩ To apply all unapplied plans from this Pull Request, comment:
    atlantis apply
  • 🚮 To delete all plans and locks from this Pull Request, comment:
    atlantis unlock

@atlantisotc
Copy link
Contributor

atlantisotc bot commented Oct 2, 2025

Ran Plan for dir: terraform-multitenancy/envs/eu-de/dev workspace: default

Plan Error

Show Output
running 'sh -c' '/home/atlantis/.atlantis/bin/terraform1.7.5 init -input=false -upgrade' in '/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev': exit status 1

Initializing the backend...
Upgrading modules...
- apigw in ../../../modules/apigw
- function in ../../../modules/function
- networking in ../../../modules/networking
- packager in ../../../modules/packager
- redis in ../../../modules/redis
╷
│ Error: No valid credential sources found
│ 
│ Please see https://www.terraform.io/docs/language/settings/backends/s3.html
│ for more information about providing credentials.
│ 
│ Error: failed to refresh cached credentials, no EC2 IMDS role found,
│ operation error ec2imds: GetMetadata, access disabled to EC2 IMDS via
│ client option, or "AWS_EC2_METADATA_DISABLED" environment variable
│ 
╵


@atlantisotc
Copy link
Contributor

atlantisotc bot commented Oct 3, 2025

Ran Plan for project: multitenancy-dev dir: terraform-multitenancy/envs/eu-de/dev workspace: default

Show Output
data.opentelekomcloud_compute_availability_zones_v2.zones: Reading...
data.opentelekomcloud_compute_availability_zones_v2.zones: Read complete after 0s [id=3726637984]

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
 <= read (data resources)

Terraform will perform the following actions:

  # module.apigw.opentelekomcloud_apigw_api_publishment_v2.pub will be created
+ resource "opentelekomcloud_apigw_api_publishment_v2" "pub" {
      + api_id           = (known after apply)
      + api_name         = (known after apply)
      + environment_id   = "DEFAULT_ENVIRONMENT_RELEASE_ID"
      + environment_name = (known after apply)
      + gateway_id       = (known after apply)
      + history          = (known after apply)
      + id               = (known after apply)
      + publish_id       = (known after apply)
      + published_at     = (known after apply)
      + region           = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_api_v2.api will be created
+ resource "opentelekomcloud_apigw_api_v2" "api" {
      + cors                            = false
      + gateway_id                      = (known after apply)
      + group_id                        = (known after apply)
      + id                              = (known after apply)
      + match_mode                      = "EXACT"
      + name                            = "birthday-api"
      + region                          = (known after apply)
      + registered_at                   = (known after apply)
      + request_method                  = "ANY"
      + request_protocol                = "HTTPS"
      + request_uri                     = "/hello/{username}"
      + security_authentication_enabled = (known after apply)
      + security_authentication_type    = "NONE"
      + type                            = "Public"
      + updated_at                      = (known after apply)

      + func_graph {
          + function_urn    = (known after apply)
          + invocation_type = "sync"
          + network_type    = (known after apply)
          + timeout         = 5000
          + version         = "latest"
        }

      + request_params {
          + enumeration = (known after apply)
          + location    = "PATH"
          + name        = "username"
          + required    = true
          + type        = "STRING"
        }
    }

  # module.apigw.opentelekomcloud_apigw_gateway_v2.gw will be created
+ resource "opentelekomcloud_apigw_gateway_v2" "gw" {
      + availability_zones              = [
          + "eu-de-01",
        ]
      + bandwidth_size                  = 5
      + default_group_id                = (known after apply)
      + description                     = "Dedicated gateway for workshop"
      + enterprise_project_id           = (known after apply)
      + id                              = (known after apply)
      + ingress_bandwidth_charging_mode = "bandwidth"
      + ingress_bandwidth_size          = 5
      + loadbalancer_provider           = "elb"
      + maintain_begin                  = (known after apply)
      + maintain_end                    = (known after apply)
      + name                            = "workshop-gw"
      + private_egress_addresses        = (known after apply)
      + project_id                      = (known after apply)
      + public_egress_address           = (known after apply)
      + region                          = (known after apply)
      + security_group_id               = (known after apply)
      + spec_id                         = "BASIC"
      + status                          = (known after apply)
      + subnet_id                       = (known after apply)
      + supported_features              = (known after apply)
      + vpc_id                          = (known after apply)
      + vpc_ingress_address             = (known after apply)
      + vpcep_service_name              = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_group_v2.group will be created
+ resource "opentelekomcloud_apigw_group_v2" "group" {
      + id                = (known after apply)
      + instance_id       = (known after apply)
      + name              = "workshop-group"
      + region            = (known after apply)
      + registration_time = (known after apply)
      + updated_at        = (known after apply)
    }

  # module.function.opentelekomcloud_fgs_function_v2.this will be created
+ resource "opentelekomcloud_fgs_function_v2" "this" {
      + agency                  = "fg_agency"
      + allow_ephemeral_storage = (known after apply)
      + apig_route_enable       = (known after apply)
      + app                     = "default"
      + app_agency              = (known after apply)
      + code_filename           = (known after apply)
      + code_type               = "obs"
      + code_url                = (known after apply)
      + depend_list             = (known after apply)
      + description             = "FGS function for birthday API"
      + dns_list                = (known after apply)
      + enable_auth_in_header   = (known after apply)
      + ephemeral_storage       = (known after apply)
      + extend_config           = (known after apply)
      + functiongraph_version   = (known after apply)
      + gpu_type                = (known after apply)
      + handler                 = "handler.func_handler"
      + heartbeat_handler       = (known after apply)
      + id                      = (known after apply)
      + initializer_handler     = (known after apply)
      + initializer_timeout     = (known after apply)
      + is_stateful_function    = (known after apply)
      + log_group_id            = (known after apply)
      + log_group_name          = "fg-log-group"
      + log_topic_id            = (known after apply)
      + log_topic_name          = "fg-log-stream"
      + max_instance_num        = (known after apply)
      + memory_size             = 256
      + mount_user_group_id     = (known after apply)
      + mount_user_id           = (known after apply)
      + name                    = "birthday-api"
      + network_id              = (known after apply)
      + region                  = (known after apply)
      + runtime                 = "Python3.9"
      + timeout                 = 10
      + urn                     = (known after apply)
      + user_data               = (sensitive value)
      + version                 = (known after apply)
      + vpc_id                  = (known after apply)
    }

  # module.function.opentelekomcloud_lts_group_v2.group will be created
+ resource "opentelekomcloud_lts_group_v2" "group" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + group_name            = "fg-log-group"
      + id                    = (known after apply)
      + region                = (known after apply)
      + ttl_in_days           = 30
    }

  # module.function.opentelekomcloud_lts_stream_v2.stream will be created
+ resource "opentelekomcloud_lts_stream_v2" "stream" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + filter_count          = (known after apply)
      + group_id              = (known after apply)
      + id                    = (known after apply)
      + region                = (known after apply)
      + stream_name           = "fg-log-stream"
      + ttl_in_days           = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["0"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 443
      + port_range_min    = 443
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["1"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 80
      + port_range_min    = 80
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_v2.apigw will be created
+ resource "opentelekomcloud_networking_secgroup_v2" "apigw" {
      + description = "Allow necessary ports from everywhere"
      + id          = (known after apply)
      + name        = "workshop-apigw-sg"
      + region      = (known after apply)
      + tenant_id   = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_subnet_v1.subnet will be created
+ resource "opentelekomcloud_vpc_subnet_v1" "subnet" {
      + availability_zone = (known after apply)
      + cidr              = "10.10.1.0/24"
      + cidr_ipv6         = (known after apply)
      + dhcp_enable       = true
      + dns_list          = (known after apply)
      + gateway_ip        = "10.10.1.1"
      + gateway_ipv6      = (known after apply)
      + id                = (known after apply)
      + name              = "workshop-fgs-subnet"
      + network_id        = (known after apply)
      + primary_dns       = (known after apply)
      + region            = (known after apply)
      + secondary_dns     = (known after apply)
      + status            = (known after apply)
      + subnet_id         = (known after apply)
      + vpc_id            = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_v1.vpc will be created
+ resource "opentelekomcloud_vpc_v1" "vpc" {
      + cidr   = "10.10.0.0/16"
      + id     = (known after apply)
      + name   = "workshop-fgs-vpc"
      + region = (known after apply)
      + shared = (known after apply)
      + status = (known after apply)
    }

  # module.packager.data.archive_file.function_zip will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "archive_file" "function_zip" {
      + id                  = (known after apply)
      + output_base64sha256 = (known after apply)
      + output_base64sha512 = (known after apply)
      + output_md5          = (known after apply)
      + output_path         = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + output_sha          = (known after apply)
      + output_sha256       = (known after apply)
      + output_sha512       = (known after apply)
      + output_size         = (known after apply)
      + source_dir          = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function_pkg"
      + type                = "zip"
    }

  # module.packager.null_resource.build_function will be created
+ resource "null_resource" "build_function" {
      + id       = (known after apply)
      + triggers = {
          + "source_hash" = "696120c75625bfa1cf2a8509a52660a466ad2457e1abf25a88887f655a768464"
        }
    }

  # module.packager.opentelekomcloud_obs_bucket.bucket will be created
+ resource "opentelekomcloud_obs_bucket" "bucket" {
      + acl                = "private"
      + bucket             = "workshop-bucket"
      + bucket_domain_name = (known after apply)
      + bucket_version     = (known after apply)
      + force_destroy      = false
      + id                 = (known after apply)
      + region             = (known after apply)
      + storage_class      = "STANDARD"
      + user_domain_names  = (known after apply)
      + versioning         = false
    }

  # module.packager.opentelekomcloud_obs_bucket_object.object will be created
+ resource "opentelekomcloud_obs_bucket_object" "object" {
      + bucket        = "workshop-bucket"
      + etag          = (known after apply)
      + id            = (known after apply)
      + key           = (known after apply)
      + size          = (known after apply)
      + source        = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + storage_class = (known after apply)
      + version_id    = (known after apply)
    }

  # module.redis.opentelekomcloud_dcs_instance_v2.redis will be created
+ resource "opentelekomcloud_dcs_instance_v2" "redis" {
      + access_user                  = (known after apply)
      + availability_zones           = [
          + "eu-de-01",
        ]
      + bandwidth_info               = (known after apply)
      + cache_mode                   = (known after apply)
      + capacity                     = 0.125
      + cpu_type                     = (known after apply)
      + created_at                   = (known after apply)
      + description                  = (known after apply)
      + domain_name                  = (known after apply)
      + enable_whitelist             = (known after apply)
      + engine                       = "Redis"
      + engine_version               = "6.0"
      + flavor                       = "redis.ha.xu1.tiny.r2.128"
      + id                           = (known after apply)
      + launched_at                  = (known after apply)
      + maintain_begin               = "02:00:00"
      + maintain_end                 = "06:00:00"
      + max_memory                   = (known after apply)
      + name                         = "workshop-redis"
      + password                     = (sensitive value)
      + port                         = (known after apply)
      + private_ip                   = (known after apply)
      + product_type                 = (known after apply)
      + readonly_domain_name         = (known after apply)
      + region                       = (known after apply)
      + replica_count                = (known after apply)
      + security_group_name          = (known after apply)
      + sharding_count               = (known after apply)
      + ssl_enable                   = (known after apply)
      + status                       = (known after apply)
      + subnet_cidr                  = (known after apply)
      + subnet_id                    = (known after apply)
      + subnet_name                  = (known after apply)
      + transparent_client_ip_enable = (known after apply)
      + used_memory                  = (known after apply)
      + user_id                      = (known after apply)
      + user_name                    = (known after apply)
      + vpc_id                       = (known after apply)
      + vpc_name                     = (known after apply)
    }

Plan: 16 to add, 0 to change, 0 to destroy.

Changes to Outputs:
+ api_debug_domain = (known after apply)
+ function_urn     = (known after apply)
  • ▶️ To apply this plan, comment:
    atlantis apply -p multitenancy-dev
  • 🚮 To delete this plan and lock, click here
  • 🔁 To plan this project again, comment:
    atlantis plan -p multitenancy-dev

Plan: 16 to add, 0 to change, 0 to destroy.


  • ⏩ To apply all unapplied plans from this Pull Request, comment:
    atlantis apply
  • 🚮 To delete all plans and locks from this Pull Request, comment:
    atlantis unlock

@anton-sidelnikov anton-sidelnikov changed the title Test Remote backend example (OBS) Oct 3, 2025
@anton-sidelnikov
Copy link
Member Author

atlantis plan -p multitenancy-dev

@atlantisotc
Copy link
Contributor

atlantisotc bot commented Oct 6, 2025

Ran Plan for project: multitenancy-dev dir: terraform-multitenancy/envs/eu-de/dev workspace: default

Show Output
data.opentelekomcloud_compute_availability_zones_v2.zones: Reading...
data.opentelekomcloud_compute_availability_zones_v2.zones: Read complete after 0s [id=3726637984]

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
 <= read (data resources)

Terraform will perform the following actions:

  # module.apigw.opentelekomcloud_apigw_api_publishment_v2.pub will be created
+ resource "opentelekomcloud_apigw_api_publishment_v2" "pub" {
      + api_id           = (known after apply)
      + api_name         = (known after apply)
      + environment_id   = "DEFAULT_ENVIRONMENT_RELEASE_ID"
      + environment_name = (known after apply)
      + gateway_id       = (known after apply)
      + history          = (known after apply)
      + id               = (known after apply)
      + publish_id       = (known after apply)
      + published_at     = (known after apply)
      + region           = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_api_v2.api will be created
+ resource "opentelekomcloud_apigw_api_v2" "api" {
      + cors                            = false
      + gateway_id                      = (known after apply)
      + group_id                        = (known after apply)
      + id                              = (known after apply)
      + match_mode                      = "EXACT"
      + name                            = "birthday-api"
      + region                          = (known after apply)
      + registered_at                   = (known after apply)
      + request_method                  = "ANY"
      + request_protocol                = "HTTPS"
      + request_uri                     = "/hello/{username}"
      + security_authentication_enabled = (known after apply)
      + security_authentication_type    = "NONE"
      + type                            = "Public"
      + updated_at                      = (known after apply)

      + func_graph {
          + function_urn    = (known after apply)
          + invocation_type = "sync"
          + network_type    = (known after apply)
          + timeout         = 5000
          + version         = "latest"
        }

      + request_params {
          + enumeration = (known after apply)
          + location    = "PATH"
          + name        = "username"
          + required    = true
          + type        = "STRING"
        }
    }

  # module.apigw.opentelekomcloud_apigw_gateway_v2.gw will be created
+ resource "opentelekomcloud_apigw_gateway_v2" "gw" {
      + availability_zones              = [
          + "eu-de-01",
        ]
      + bandwidth_size                  = 5
      + default_group_id                = (known after apply)
      + description                     = "Dedicated gateway for workshop"
      + enterprise_project_id           = (known after apply)
      + id                              = (known after apply)
      + ingress_bandwidth_charging_mode = "bandwidth"
      + ingress_bandwidth_size          = 5
      + loadbalancer_provider           = "elb"
      + maintain_begin                  = (known after apply)
      + maintain_end                    = (known after apply)
      + name                            = "workshop-gw"
      + private_egress_addresses        = (known after apply)
      + project_id                      = (known after apply)
      + public_egress_address           = (known after apply)
      + region                          = (known after apply)
      + security_group_id               = (known after apply)
      + spec_id                         = "BASIC"
      + status                          = (known after apply)
      + subnet_id                       = (known after apply)
      + supported_features              = (known after apply)
      + vpc_id                          = (known after apply)
      + vpc_ingress_address             = (known after apply)
      + vpcep_service_name              = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_group_v2.group will be created
+ resource "opentelekomcloud_apigw_group_v2" "group" {
      + id                = (known after apply)
      + instance_id       = (known after apply)
      + name              = "workshop-group"
      + region            = (known after apply)
      + registration_time = (known after apply)
      + updated_at        = (known after apply)
    }

  # module.function.opentelekomcloud_fgs_function_v2.this will be created
+ resource "opentelekomcloud_fgs_function_v2" "this" {
      + agency                  = "fg_agency"
      + allow_ephemeral_storage = (known after apply)
      + apig_route_enable       = (known after apply)
      + app                     = "default"
      + app_agency              = (known after apply)
      + code_filename           = (known after apply)
      + code_type               = "obs"
      + code_url                = (known after apply)
      + depend_list             = (known after apply)
      + description             = "FGS function for birthday API"
      + dns_list                = (known after apply)
      + enable_auth_in_header   = (known after apply)
      + ephemeral_storage       = (known after apply)
      + extend_config           = (known after apply)
      + functiongraph_version   = (known after apply)
      + gpu_type                = (known after apply)
      + handler                 = "handler.func_handler"
      + heartbeat_handler       = (known after apply)
      + id                      = (known after apply)
      + initializer_handler     = (known after apply)
      + initializer_timeout     = (known after apply)
      + is_stateful_function    = (known after apply)
      + log_group_id            = (known after apply)
      + log_group_name          = "fg-log-group"
      + log_topic_id            = (known after apply)
      + log_topic_name          = "fg-log-stream"
      + max_instance_num        = (known after apply)
      + memory_size             = 256
      + mount_user_group_id     = (known after apply)
      + mount_user_id           = (known after apply)
      + name                    = "birthday-api"
      + network_id              = (known after apply)
      + region                  = (known after apply)
      + runtime                 = "Python3.9"
      + timeout                 = 10
      + urn                     = (known after apply)
      + user_data               = (sensitive value)
      + version                 = (known after apply)
      + vpc_id                  = (known after apply)
    }

  # module.function.opentelekomcloud_lts_group_v2.group will be created
+ resource "opentelekomcloud_lts_group_v2" "group" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + group_name            = "fg-log-group"
      + id                    = (known after apply)
      + region                = (known after apply)
      + ttl_in_days           = 30
    }

  # module.function.opentelekomcloud_lts_stream_v2.stream will be created
+ resource "opentelekomcloud_lts_stream_v2" "stream" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + filter_count          = (known after apply)
      + group_id              = (known after apply)
      + id                    = (known after apply)
      + region                = (known after apply)
      + stream_name           = "fg-log-stream"
      + ttl_in_days           = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["0"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 443
      + port_range_min    = 443
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["1"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 80
      + port_range_min    = 80
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_v2.apigw will be created
+ resource "opentelekomcloud_networking_secgroup_v2" "apigw" {
      + description = "Allow necessary ports from everywhere"
      + id          = (known after apply)
      + name        = "workshop-apigw-sg"
      + region      = (known after apply)
      + tenant_id   = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_subnet_v1.subnet will be created
+ resource "opentelekomcloud_vpc_subnet_v1" "subnet" {
      + availability_zone = (known after apply)
      + cidr              = "10.10.1.0/24"
      + cidr_ipv6         = (known after apply)
      + dhcp_enable       = true
      + dns_list          = (known after apply)
      + gateway_ip        = "10.10.1.1"
      + gateway_ipv6      = (known after apply)
      + id                = (known after apply)
      + name              = "workshop-fgs-subnet"
      + network_id        = (known after apply)
      + primary_dns       = (known after apply)
      + region            = (known after apply)
      + secondary_dns     = (known after apply)
      + status            = (known after apply)
      + subnet_id         = (known after apply)
      + vpc_id            = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_v1.vpc will be created
+ resource "opentelekomcloud_vpc_v1" "vpc" {
      + cidr   = "10.10.0.0/16"
      + id     = (known after apply)
      + name   = "workshop-fgs-vpc"
      + region = (known after apply)
      + shared = (known after apply)
      + status = (known after apply)
    }

  # module.packager.data.archive_file.function_zip will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "archive_file" "function_zip" {
      + id                  = (known after apply)
      + output_base64sha256 = (known after apply)
      + output_base64sha512 = (known after apply)
      + output_md5          = (known after apply)
      + output_path         = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + output_sha          = (known after apply)
      + output_sha256       = (known after apply)
      + output_sha512       = (known after apply)
      + output_size         = (known after apply)
      + source_dir          = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function_pkg"
      + type                = "zip"
    }

  # module.packager.null_resource.build_function will be created
+ resource "null_resource" "build_function" {
      + id       = (known after apply)
      + triggers = {
          + "source_hash" = "696120c75625bfa1cf2a8509a52660a466ad2457e1abf25a88887f655a768464"
        }
    }

  # module.packager.opentelekomcloud_obs_bucket.bucket will be created
+ resource "opentelekomcloud_obs_bucket" "bucket" {
      + acl                = "private"
      + bucket             = "workshop-bucket"
      + bucket_domain_name = (known after apply)
      + bucket_version     = (known after apply)
      + force_destroy      = false
      + id                 = (known after apply)
      + region             = (known after apply)
      + storage_class      = "STANDARD"
      + user_domain_names  = (known after apply)
      + versioning         = false
    }

  # module.packager.opentelekomcloud_obs_bucket_object.object will be created
+ resource "opentelekomcloud_obs_bucket_object" "object" {
      + bucket        = "workshop-bucket"
      + etag          = (known after apply)
      + id            = (known after apply)
      + key           = (known after apply)
      + size          = (known after apply)
      + source        = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + storage_class = (known after apply)
      + version_id    = (known after apply)
    }

  # module.redis.opentelekomcloud_dcs_instance_v2.redis will be created
+ resource "opentelekomcloud_dcs_instance_v2" "redis" {
      + access_user                  = (known after apply)
      + availability_zones           = [
          + "eu-de-01",
        ]
      + bandwidth_info               = (known after apply)
      + cache_mode                   = (known after apply)
      + capacity                     = 0.125
      + cpu_type                     = (known after apply)
      + created_at                   = (known after apply)
      + description                  = (known after apply)
      + domain_name                  = (known after apply)
      + enable_whitelist             = (known after apply)
      + engine                       = "Redis"
      + engine_version               = "6.0"
      + flavor                       = "redis.ha.xu1.tiny.r2.128"
      + id                           = (known after apply)
      + launched_at                  = (known after apply)
      + maintain_begin               = "02:00:00"
      + maintain_end                 = "06:00:00"
      + max_memory                   = (known after apply)
      + name                         = "workshop-redis"
      + password                     = (sensitive value)
      + port                         = (known after apply)
      + private_ip                   = (known after apply)
      + product_type                 = (known after apply)
      + readonly_domain_name         = (known after apply)
      + region                       = (known after apply)
      + replica_count                = (known after apply)
      + security_group_name          = (known after apply)
      + sharding_count               = (known after apply)
      + ssl_enable                   = (known after apply)
      + status                       = (known after apply)
      + subnet_cidr                  = (known after apply)
      + subnet_id                    = (known after apply)
      + subnet_name                  = (known after apply)
      + transparent_client_ip_enable = (known after apply)
      + used_memory                  = (known after apply)
      + user_id                      = (known after apply)
      + user_name                    = (known after apply)
      + vpc_id                       = (known after apply)
      + vpc_name                     = (known after apply)
    }

Plan: 16 to add, 0 to change, 0 to destroy.

Changes to Outputs:
+ api_debug_domain = (known after apply)
+ function_urn     = (known after apply)
  • ▶️ To apply this plan, comment:
    atlantis apply -p multitenancy-dev
  • 🚮 To delete this plan and lock, click here
  • 🔁 To plan this project again, comment:
    atlantis plan -p multitenancy-dev

Plan: 16 to add, 0 to change, 0 to destroy.


  • ⏩ To apply all unapplied plans from this Pull Request, comment:
    atlantis apply
  • 🚮 To delete all plans and locks from this Pull Request, comment:
    atlantis unlock

@anton-sidelnikov
Copy link
Member Author

atlantis plan -p multitenancy-dev

@atlantisotc
Copy link
Contributor

atlantisotc bot commented Oct 8, 2025

Ran Plan for dir: terraform-multitenancy/envs/eu-de/dev workspace: default

Plan Error

Show Output
running 'sh -c' '/home/atlantis/.atlantis/bin/terraform1.7.5 plan -input=false -refresh -out "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/multitenancy-dev-default.tfplan"' in '/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev': exit status 1
module.packager.null_resource.build_function: Refreshing state... [id=9071456461591152008]
module.packager.data.archive_file.function_zip: Reading...
module.networking.opentelekomcloud_vpc_v1.vpc: Refreshing state... [id=c835ec22-ac2a-4a40-9c07-5e9e90052b4f]
data.opentelekomcloud_compute_availability_zones_v2.zones: Reading...
module.networking.opentelekomcloud_networking_secgroup_v2.apigw: Refreshing state... [id=e4d747ed-6f12-4e5b-aeac-e5d2278463ee]
module.packager.opentelekomcloud_obs_bucket.bucket: Refreshing state... [id=workshop-bucket]
module.function.opentelekomcloud_lts_group_v2.group: Refreshing state... [id=1f9ce181-29e7-4a8b-94a1-81edd43acffa]
module.networking.opentelekomcloud_vpc_subnet_v1.subnet: Refreshing state... [id=0c561875-13fb-4c7a-bb72-407baf44aa52]
module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["1"]: Refreshing state... [id=b0787297-f837-4647-96ff-aa3aae5c458e]
module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["0"]: Refreshing state... [id=ac357fb9-4298-42e9-bc4b-33c58252bcb2]
data.opentelekomcloud_compute_availability_zones_v2.zones: Read complete after 0s [id=3726637984]
module.apigw.opentelekomcloud_apigw_gateway_v2.gw: Refreshing state... [id=dac468b60d104438a7164323a75be477]
module.redis.opentelekomcloud_dcs_instance_v2.redis: Refreshing state... [id=6a78e11e-f821-4d73-bc6f-ed175b411d0f]
module.apigw.opentelekomcloud_apigw_group_v2.group: Refreshing state... [id=781550b8784a470e8cb755623c2756b6]

Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the
last "terraform apply" which may have affected this plan:

  # module.apigw.opentelekomcloud_apigw_gateway_v2.gw has been deleted
  - resource "opentelekomcloud_apigw_gateway_v2" "gw" {
      - id                              = "dac468b60d104438a7164323a75be477" -> null
        name                            = "workshop-gw"
        # (20 unchanged attributes hidden)
    }

  # module.networking.opentelekomcloud_networking_secgroup_v2.apigw has been deleted
  - resource "opentelekomcloud_networking_secgroup_v2" "apigw" {
      - id          = "e4d747ed-6f12-4e5b-aeac-e5d2278463ee" -> null
        name        = "workshop-apigw-sg"
        # (3 unchanged attributes hidden)
    }

  # module.networking.opentelekomcloud_vpc_subnet_v1.subnet has been deleted
  - resource "opentelekomcloud_vpc_subnet_v1" "subnet" {
      - id            = "0c561875-13fb-4c7a-bb72-407baf44aa52" -> null
        name          = "workshop-fgs-subnet"
        # (12 unchanged attributes hidden)
    }

  # module.networking.opentelekomcloud_vpc_v1.vpc has been deleted
  - resource "opentelekomcloud_vpc_v1" "vpc" {
      - id     = "c835ec22-ac2a-4a40-9c07-5e9e90052b4f" -> null
        name   = "workshop-fgs-vpc"
        # (4 unchanged attributes hidden)
    }

  # module.redis.opentelekomcloud_dcs_instance_v2.redis has been deleted
  - resource "opentelekomcloud_dcs_instance_v2" "redis" {
      - id                           = "6a78e11e-f821-4d73-bc6f-ed175b411d0f" -> null
      - name                         = "workshop-redis" -> null
      - private_ip                   = "10.10.1.4" -> null
        # (33 unchanged attributes hidden)
    }


Unless you have made equivalent changes to your configuration, or ignored the
relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create

Terraform planned the following actions, but then encountered a problem:

  # module.apigw.opentelekomcloud_apigw_gateway_v2.gw will be created
  + resource "opentelekomcloud_apigw_gateway_v2" "gw" {
      + availability_zones              = [
          + "eu-de-01",
        ]
      + bandwidth_size                  = 5
      + default_group_id                = (known after apply)
      + description                     = "Dedicated gateway for workshop"
      + enterprise_project_id           = (known after apply)
      + id                              = (known after apply)
      + ingress_bandwidth_charging_mode = "bandwidth"
      + ingress_bandwidth_size          = 5
      + loadbalancer_provider           = "elb"
      + maintain_begin                  = (known after apply)
      + maintain_end                    = (known after apply)
      + name                            = "workshop-gw"
      + private_egress_addresses        = (known after apply)
      + project_id                      = (known after apply)
      + public_egress_address           = (known after apply)
      + region                          = (known after apply)
      + security_group_id               = (known after apply)
      + spec_id                         = "BASIC"
      + status                          = (known after apply)
      + subnet_id                       = (known after apply)
      + supported_features              = (known after apply)
      + vpc_id                          = (known after apply)
      + vpc_ingress_address             = (known after apply)
      + vpcep_service_name              = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["0"] will be created
  + resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 443
      + port_range_min    = 443
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["1"] will be created
  + resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 80
      + port_range_min    = 80
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_v2.apigw will be created
  + resource "opentelekomcloud_networking_secgroup_v2" "apigw" {
      + description = "Allow necessary ports from everywhere"
      + id          = (known after apply)
      + name        = "workshop-apigw-sg"
      + region      = (known after apply)
      + tenant_id   = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_subnet_v1.subnet will be created
  + resource "opentelekomcloud_vpc_subnet_v1" "subnet" {
      + availability_zone = (known after apply)
      + cidr              = "10.10.1.0/24"
      + cidr_ipv6         = (known after apply)
      + dhcp_enable       = true
      + dns_list          = (known after apply)
      + gateway_ip        = "10.10.1.1"
      + gateway_ipv6      = (known after apply)
      + id                = (known after apply)
      + name              = "workshop-fgs-subnet"
      + network_id        = (known after apply)
      + primary_dns       = (known after apply)
      + region            = (known after apply)
      + secondary_dns     = (known after apply)
      + status            = (known after apply)
      + subnet_id         = (known after apply)
      + vpc_id            = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_v1.vpc will be created
  + resource "opentelekomcloud_vpc_v1" "vpc" {
      + cidr   = "10.10.0.0/16"
      + id     = (known after apply)
      + name   = "workshop-fgs-vpc"
      + region = (known after apply)
      + shared = (known after apply)
      + status = (known after apply)
    }

  # module.redis.opentelekomcloud_dcs_instance_v2.redis will be created
  + resource "opentelekomcloud_dcs_instance_v2" "redis" {
      + access_user                  = (known after apply)
      + availability_zones           = [
          + "eu-de-01",
        ]
      + bandwidth_info               = (known after apply)
      + cache_mode                   = (known after apply)
      + capacity                     = 0.125
      + cpu_type                     = (known after apply)
      + created_at                   = (known after apply)
      + description                  = (known after apply)
      + domain_name                  = (known after apply)
      + enable_whitelist             = (known after apply)
      + engine                       = "Redis"
      + engine_version               = "6.0"
      + flavor                       = "redis.ha.xu1.tiny.r2.128"
      + id                           = (known after apply)
      + launched_at                  = (known after apply)
      + maintain_begin               = "02:00:00"
      + maintain_end                 = "06:00:00"
      + max_memory                   = (known after apply)
      + name                         = "workshop-redis"
      + password                     = (sensitive value)
      + port                         = (known after apply)
      + private_ip                   = (known after apply)
      + product_type                 = (known after apply)
      + readonly_domain_name         = (known after apply)
      + region                       = (known after apply)
      + replica_count                = (known after apply)
      + security_group_name          = (known after apply)
      + sharding_count               = (known after apply)
      + ssl_enable                   = (known after apply)
      + status                       = (known after apply)
      + subnet_cidr                  = (known after apply)
      + subnet_id                    = (known after apply)
      + subnet_name                  = (known after apply)
      + transparent_client_ip_enable = (known after apply)
      + used_memory                  = (known after apply)
      + user_id                      = (known after apply)
      + user_name                    = (known after apply)
      + vpc_id                       = (known after apply)
      + vpc_name                     = (known after apply)
    }

Plan: 7 to add, 0 to change, 0 to destroy.
╷
│ Error: dedicated group: Bad request with: [GET https://apig.eu-de.otc.t-systems.com/v2/d11e011510434273a96fc831d777698b/apigw/instances/dac468b60d104438a7164323a75be477/api-groups/781550b8784a470e8cb755623c2756b6], error message: {"error_code":"APIG.1136","error_msg":"No permissions to perform operations on this instance"}
│ 
│   with module.apigw.opentelekomcloud_apigw_group_v2.group,
│   on ../../../modules/apigw/main.tf line 16, in resource "opentelekomcloud_apigw_group_v2" "group":
│   16: resource "opentelekomcloud_apigw_group_v2" "group" {
│ 
╵
╷
│ Error: unable to find OpenTelekomCloud LTS v2 log group by its ID (1f9ce181-29e7-4a8b-94a1-81edd43acffa): %!s(<nil>)
│ 
│   with module.function.opentelekomcloud_lts_group_v2.group,
│   on ../../../modules/function/main.tf line 31, in resource "opentelekomcloud_lts_group_v2" "group":
│   31: resource "opentelekomcloud_lts_group_v2" "group" {
│ 
╵
╷
│ Error: Archive creation error
│ 
│   with module.packager.data.archive_file.function_zip,
│   on ../../../modules/packager/main.tf line 44, in data "archive_file" "function_zip":
│   44: data "archive_file" "function_zip" {
│ 
│ error creating archive: error archiving directory: could not archive
│ missing directory:
│ /home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function_pkg
╵


@anton-sidelnikov
Copy link
Member Author

atlantis plan -p multitenancy-dev

@atlantisotc
Copy link
Contributor

atlantisotc bot commented Oct 8, 2025

Ran Plan for dir: terraform-multitenancy/envs/eu-de/dev workspace: default

Plan Error

Show Output
running 'sh -c' '/home/atlantis/.atlantis/bin/terraform1.7.5 init -input=false -upgrade' in '/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev': exit status 1

Initializing the backend...
Upgrading modules...
- apigw in ../../../modules/apigw
- function in ../../../modules/function
- networking in ../../../modules/networking
- packager in ../../../modules/packager
- redis in ../../../modules/redis
╷
│ Error: Failed to get existing workspaces: Unable to list objects in S3 bucket "otc-tfstate-workshop" with prefix "env:/": operation error S3: ListObjectsV2, https response error StatusCode: 403, RequestID: 00000199C3F3F35E41CC67A46462B164, HostID: 36AAAQAAEAABAAAQAAEAABAAAQAAEAABAAAaI=AAAAAAAAAAAAAAAAAAAAAAAAAA, api error InvalidAccessKeyId: The AWS Access Key Id you provided may has expired.
│ 
│ 
╵


@anton-sidelnikov
Copy link
Member Author

atlantis plan -p multitenancy-dev

@atlantisotc
Copy link
Contributor

atlantisotc bot commented Oct 8, 2025

Ran Plan for project: multitenancy-dev dir: terraform-multitenancy/envs/eu-de/dev workspace: default

Show Output
data.opentelekomcloud_compute_availability_zones_v2.zones: Reading...
data.opentelekomcloud_compute_availability_zones_v2.zones: Read complete after 0s [id=3726637984]

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
 <= read (data resources)

Terraform will perform the following actions:

  # module.apigw.opentelekomcloud_apigw_api_publishment_v2.pub will be created
+ resource "opentelekomcloud_apigw_api_publishment_v2" "pub" {
      + api_id           = (known after apply)
      + api_name         = (known after apply)
      + environment_id   = "DEFAULT_ENVIRONMENT_RELEASE_ID"
      + environment_name = (known after apply)
      + gateway_id       = (known after apply)
      + history          = (known after apply)
      + id               = (known after apply)
      + publish_id       = (known after apply)
      + published_at     = (known after apply)
      + region           = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_api_v2.api will be created
+ resource "opentelekomcloud_apigw_api_v2" "api" {
      + cors                            = false
      + gateway_id                      = (known after apply)
      + group_id                        = (known after apply)
      + id                              = (known after apply)
      + match_mode                      = "EXACT"
      + name                            = "birthday-api"
      + region                          = (known after apply)
      + registered_at                   = (known after apply)
      + request_method                  = "ANY"
      + request_protocol                = "HTTPS"
      + request_uri                     = "/hello/{username}"
      + security_authentication_enabled = (known after apply)
      + security_authentication_type    = "NONE"
      + type                            = "Public"
      + updated_at                      = (known after apply)

      + func_graph {
          + function_urn    = (known after apply)
          + invocation_type = "sync"
          + network_type    = (known after apply)
          + timeout         = 5000
          + version         = "latest"
        }

      + request_params {
          + enumeration = (known after apply)
          + location    = "PATH"
          + name        = "username"
          + required    = true
          + type        = "STRING"
        }
    }

  # module.apigw.opentelekomcloud_apigw_gateway_v2.gw will be created
+ resource "opentelekomcloud_apigw_gateway_v2" "gw" {
      + availability_zones              = [
          + "eu-de-01",
        ]
      + bandwidth_size                  = 5
      + default_group_id                = (known after apply)
      + description                     = "Dedicated gateway for workshop"
      + enterprise_project_id           = (known after apply)
      + id                              = (known after apply)
      + ingress_bandwidth_charging_mode = "bandwidth"
      + ingress_bandwidth_size          = 5
      + loadbalancer_provider           = "elb"
      + maintain_begin                  = (known after apply)
      + maintain_end                    = (known after apply)
      + name                            = "workshop-gw"
      + private_egress_addresses        = (known after apply)
      + project_id                      = (known after apply)
      + public_egress_address           = (known after apply)
      + region                          = (known after apply)
      + security_group_id               = (known after apply)
      + spec_id                         = "BASIC"
      + status                          = (known after apply)
      + subnet_id                       = (known after apply)
      + supported_features              = (known after apply)
      + vpc_id                          = (known after apply)
      + vpc_ingress_address             = (known after apply)
      + vpcep_service_name              = (known after apply)
    }

  # module.apigw.opentelekomcloud_apigw_group_v2.group will be created
+ resource "opentelekomcloud_apigw_group_v2" "group" {
      + id                = (known after apply)
      + instance_id       = (known after apply)
      + name              = "workshop-group"
      + region            = (known after apply)
      + registration_time = (known after apply)
      + updated_at        = (known after apply)
    }

  # module.function.opentelekomcloud_fgs_function_v2.this will be created
+ resource "opentelekomcloud_fgs_function_v2" "this" {
      + agency                  = "fg_agency"
      + allow_ephemeral_storage = (known after apply)
      + apig_route_enable       = (known after apply)
      + app                     = "default"
      + app_agency              = (known after apply)
      + code_filename           = (known after apply)
      + code_type               = "obs"
      + code_url                = (known after apply)
      + depend_list             = (known after apply)
      + description             = "FGS function for birthday API"
      + dns_list                = (known after apply)
      + enable_auth_in_header   = (known after apply)
      + ephemeral_storage       = (known after apply)
      + extend_config           = (known after apply)
      + functiongraph_version   = (known after apply)
      + gpu_type                = (known after apply)
      + handler                 = "handler.func_handler"
      + heartbeat_handler       = (known after apply)
      + id                      = (known after apply)
      + initializer_handler     = (known after apply)
      + initializer_timeout     = (known after apply)
      + is_stateful_function    = (known after apply)
      + log_group_id            = (known after apply)
      + log_group_name          = "fg-log-group"
      + log_topic_id            = (known after apply)
      + log_topic_name          = "fg-log-stream"
      + max_instance_num        = (known after apply)
      + memory_size             = 256
      + mount_user_group_id     = (known after apply)
      + mount_user_id           = (known after apply)
      + name                    = "birthday-api"
      + network_id              = (known after apply)
      + region                  = (known after apply)
      + runtime                 = "Python3.9"
      + timeout                 = 10
      + urn                     = (known after apply)
      + user_data               = (sensitive value)
      + version                 = (known after apply)
      + vpc_id                  = (known after apply)
    }

  # module.function.opentelekomcloud_lts_group_v2.group will be created
+ resource "opentelekomcloud_lts_group_v2" "group" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + group_name            = "fg-log-group"
      + id                    = (known after apply)
      + region                = (known after apply)
      + ttl_in_days           = 30
    }

  # module.function.opentelekomcloud_lts_stream_v2.stream will be created
+ resource "opentelekomcloud_lts_stream_v2" "stream" {
      + created_at            = (known after apply)
      + enterprise_project_id = (known after apply)
      + filter_count          = (known after apply)
      + group_id              = (known after apply)
      + id                    = (known after apply)
      + region                = (known after apply)
      + stream_name           = "fg-log-stream"
      + ttl_in_days           = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["0"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 443
      + port_range_min    = 443
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_rule_v2.rules["1"] will be created
+ resource "opentelekomcloud_networking_secgroup_rule_v2" "rules" {
      + direction         = "ingress"
      + ethertype         = "IPv4"
      + id                = (known after apply)
      + port_range_max    = 80
      + port_range_min    = 80
      + protocol          = "tcp"
      + region            = (known after apply)
      + remote_group_id   = (known after apply)
      + remote_ip_prefix  = "0.0.0.0/0"
      + security_group_id = (known after apply)
      + tenant_id         = (known after apply)
    }

  # module.networking.opentelekomcloud_networking_secgroup_v2.apigw will be created
+ resource "opentelekomcloud_networking_secgroup_v2" "apigw" {
      + description = "Allow necessary ports from everywhere"
      + id          = (known after apply)
      + name        = "workshop-apigw-sg"
      + region      = (known after apply)
      + tenant_id   = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_subnet_v1.subnet will be created
+ resource "opentelekomcloud_vpc_subnet_v1" "subnet" {
      + availability_zone = (known after apply)
      + cidr              = "10.10.1.0/24"
      + cidr_ipv6         = (known after apply)
      + dhcp_enable       = true
      + dns_list          = (known after apply)
      + gateway_ip        = "10.10.1.1"
      + gateway_ipv6      = (known after apply)
      + id                = (known after apply)
      + name              = "workshop-fgs-subnet"
      + network_id        = (known after apply)
      + primary_dns       = (known after apply)
      + region            = (known after apply)
      + secondary_dns     = (known after apply)
      + status            = (known after apply)
      + subnet_id         = (known after apply)
      + vpc_id            = (known after apply)
    }

  # module.networking.opentelekomcloud_vpc_v1.vpc will be created
+ resource "opentelekomcloud_vpc_v1" "vpc" {
      + cidr   = "10.10.0.0/16"
      + id     = (known after apply)
      + name   = "workshop-fgs-vpc"
      + region = (known after apply)
      + shared = (known after apply)
      + status = (known after apply)
    }

  # module.packager.data.archive_file.function_zip will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "archive_file" "function_zip" {
      + id                  = (known after apply)
      + output_base64sha256 = (known after apply)
      + output_base64sha512 = (known after apply)
      + output_md5          = (known after apply)
      + output_path         = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + output_sha          = (known after apply)
      + output_sha256       = (known after apply)
      + output_sha512       = (known after apply)
      + output_size         = (known after apply)
      + source_dir          = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function_pkg"
      + type                = "zip"
    }

  # module.packager.null_resource.build_function will be created
+ resource "null_resource" "build_function" {
      + id       = (known after apply)
      + triggers = {
          + "source_hash" = "696120c75625bfa1cf2a8509a52660a466ad2457e1abf25a88887f655a768464"
        }
    }

  # module.packager.opentelekomcloud_obs_bucket.bucket will be created
+ resource "opentelekomcloud_obs_bucket" "bucket" {
      + acl                = "private"
      + bucket             = "workshop-bucket"
      + bucket_domain_name = (known after apply)
      + bucket_version     = (known after apply)
      + force_destroy      = false
      + id                 = (known after apply)
      + region             = (known after apply)
      + storage_class      = "STANDARD"
      + user_domain_names  = (known after apply)
      + versioning         = false
    }

  # module.packager.opentelekomcloud_obs_bucket_object.object will be created
+ resource "opentelekomcloud_obs_bucket_object" "object" {
      + bucket        = "workshop-bucket"
      + etag          = (known after apply)
      + id            = (known after apply)
      + key           = (known after apply)
      + size          = (known after apply)
      + source        = "/home/atlantis/.atlantis/repos/opentelekomcloud-community/terraform-workshop/5/default/terraform-multitenancy/envs/eu-de/dev/build/function.zip"
      + storage_class = (known after apply)
      + version_id    = (known after apply)
    }

  # module.redis.opentelekomcloud_dcs_instance_v2.redis will be created
+ resource "opentelekomcloud_dcs_instance_v2" "redis" {
      + access_user                  = (known after apply)
      + availability_zones           = [
          + "eu-de-01",
        ]
      + bandwidth_info               = (known after apply)
      + cache_mode                   = (known after apply)
      + capacity                     = 0.125
      + cpu_type                     = (known after apply)
      + created_at                   = (known after apply)
      + description                  = (known after apply)
      + domain_name                  = (known after apply)
      + enable_whitelist             = (known after apply)
      + engine                       = "Redis"
      + engine_version               = "6.0"
      + flavor                       = "redis.ha.xu1.tiny.r2.128"
      + id                           = (known after apply)
      + launched_at                  = (known after apply)
      + maintain_begin               = "02:00:00"
      + maintain_end                 = "06:00:00"
      + max_memory                   = (known after apply)
      + name                         = "workshop-redis"
      + password                     = (sensitive value)
      + port                         = (known after apply)
      + private_ip                   = (known after apply)
      + product_type                 = (known after apply)
      + readonly_domain_name         = (known after apply)
      + region                       = (known after apply)
      + replica_count                = (known after apply)
      + security_group_name          = (known after apply)
      + sharding_count               = (known after apply)
      + ssl_enable                   = (known after apply)
      + status                       = (known after apply)
      + subnet_cidr                  = (known after apply)
      + subnet_id                    = (known after apply)
      + subnet_name                  = (known after apply)
      + transparent_client_ip_enable = (known after apply)
      + used_memory                  = (known after apply)
      + user_id                      = (known after apply)
      + user_name                    = (known after apply)
      + vpc_id                       = (known after apply)
      + vpc_name                     = (known after apply)
    }

Plan: 16 to add, 0 to change, 0 to destroy.

Changes to Outputs:
+ api_debug_domain = (known after apply)
+ function_urn     = (known after apply)
  • ▶️ To apply this plan, comment:
    atlantis apply -p multitenancy-dev
  • 🚮 To delete this plan and lock, click here
  • 🔁 To plan this project again, comment:
    atlantis plan -p multitenancy-dev

Plan: 16 to add, 0 to change, 0 to destroy.


  • ⏩ To apply all unapplied plans from this Pull Request, comment:
    atlantis apply
  • 🚮 To delete all plans and locks from this Pull Request, comment:
    atlantis unlock

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants