DNS_ZONE_V2 GRAPH
SHOW CODE
module "network" {
  source = "../modules/network"
}

resource "opentelekomcloud_dns_zone_v2" "public_example_com" {
  name        = "public.examplecheck.com."
  email       = "public@examplecheck.com"
  description = "An example for public zone"
  ttl         = 3000
  type        = "public"
}

resource "opentelekomcloud_dns_zone_v2" "private_example_com" {
  name        = "private.examplecheck.com."
  email       = "private@examplecheck.com"
  description = "An example for private zone"
  ttl         = 3000
  type        = "private"
  router {
    router_id     = module.network.shared_subnet.vpc_id
    router_region = var.region
  }
}

resource "opentelekomcloud_dns_recordset_v2" "rs_example_com" {
  zone_id     = opentelekomcloud_dns_zone_v2.private_example_com.id
  name        = "test.private.examplecheck.com."
  description = "An example record set"
  ttl         = 3000
  type        = "A"
  records     = ["10.0.0.1"]
}

NGINX_APP_ON_COMPUTE_INSTANCE_V2 GRAPH
SHOW CODE
module "network" {
  source = "../modules/network"
}

resource "opentelekomcloud_compute_keypair_v2" "terraform" {
  name       = "terraform"
  public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAjpC1hwiOCCmKEWxJ4qzTTsJbKzndLotBCz5PcwtUnflmU+gHJtWMZKpuEGVi29h0A/+ydKek1O18k10Ff+4tyFjiHDQAnOfgWf7+b1yK+qDip3X1C0UPMbwHlTfSGWLGZqd9LvEFx9k3h/M+VtMvwR1lJ9LUyTAImnNjWG7TaIPmui30HvM2UiFEmqkr4ijq45MyX2+fLIePLRIF61p4whjHAQYufqyno3BS48icQb4p6iVEZPo4AE2o9oIyQvj2mx4dk5Y8CgSETOZTYDOR3rU2fZTRDRgPJDH9FWvQjF5tA0p3d9CoWWd2s6GKKbfoUIi8R/Db1BSPJwkqB"
}

resource "opentelekomcloud_networking_secgroup_rule_v2" "secgroup_rule_1" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  port_range_min    = 22
  port_range_max    = 22
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = module.network.default_security_group_id
}

resource "opentelekomcloud_networking_secgroup_rule_v2" "secgroup_rule_2" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  port_range_min    = 80
  port_range_max    = 80
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = module.network.default_security_group_id
}

resource "opentelekomcloud_networking_secgroup_rule_v2" "secgroup_rule_3" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "icmp"
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = module.network.default_security_group_id
}

resource "opentelekomcloud_networking_floatingip_v2" "fip_1" {
  pool = "admin_external_net"
}

resource "opentelekomcloud_networking_floatingip_associate_v2" "fip_associated_1" {
  floating_ip = opentelekomcloud_networking_floatingip_v2.fip_1.address
  port_id     = opentelekomcloud_networking_port_v2.port_1.id
}

resource "opentelekomcloud_networking_port_v2" "port_1" {
  admin_state_up = true
  fixed_ip {
    subnet_id  = module.network.shared_subnet.network_id
    ip_address = "10.0.0.5"
  }
  network_id = module.network.shared_subnet.vpc_id
}

resource "opentelekomcloud_compute_instance_v2" "instance_1" {
  name            = "terraform"
  image_name      = var.image
  flavor_id       = "s3.large.1"
  key_pair        = opentelekomcloud_compute_keypair_v2.terraform.name
  security_groups = [module.network.default_security_group_id]
  depends_on      = [ opentelekomcloud_networking_floatingip_associate_v2.fip_associated_1 ]

  network {
    port = opentelekomcloud_networking_port_v2.port_1.id
  }

  connection {
    user        = "linux"
    host        = opentelekomcloud_networking_floatingip_v2.fip_1.address
    private_key = <
AUTOSCALING_WITH_ALARM GRAPH
SHOW CODE
module "network" {
  source = "../modules/network"
}

resource "opentelekomcloud_networking_secgroup_rule_v2" "secgroup_rule_1" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  port_range_min    = 22
  port_range_max    = 22
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = module.network.default_security_group_id
}

resource "opentelekomcloud_networking_secgroup_rule_v2" "secgroup_rule_2" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  port_range_min    = 80
  port_range_max    = 80
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = module.network.default_security_group_id
}

resource "opentelekomcloud_as_group_v1" "as_group" {
  scaling_group_name       = "terraform"
  scaling_configuration_id = opentelekomcloud_as_configuration_v1.as_configuration.id
  desire_instance_number   = 2
  min_instance_number      = 0
  max_instance_number      = 3
  networks {
    id = module.network.shared_subnet.network_id
  }

  security_groups {
    id = module.network.default_security_group_id
  }
  vpc_id           = module.network.shared_subnet.vpc_id
  delete_publicip  = true
  delete_instances = "yes"
}

resource "opentelekomcloud_as_policy_v1" "as_policy" {
  scaling_policy_name = "terraform"
  scaling_group_id    = opentelekomcloud_as_group_v1.as_group.id
  scaling_policy_type = "ALARM"
  scaling_policy_action {
    operation       = "ADD"
    instance_number = 1
  }
  alarm_id = opentelekomcloud_ces_alarmrule.alarm_rule.id
}

data "opentelekomcloud_images_image_v2" "latest_image" {
  name        = var.image_name
  most_recent = true
}

resource "opentelekomcloud_as_configuration_v1" "as_configuration" {
  scaling_configuration_name = "terraform"
  instance_config  {
    flavor = var.flavor
    image  = data.opentelekomcloud_images_image_v2.latest_image.id
    disk {
      size        = 40
      volume_type = "SATA"
      disk_type = "SYS"
    }

    key_name  = var.keyname
    user_data = <> /home/user.txt
EOF
  }
}

resource "opentelekomcloud_ces_alarmrule" "alarm_rule" {
  alarm_action_enabled = "false"
  alarm_name           = "terraform"
  metric {
    namespace   = "SYS.AS"
    metric_name = "cpu_util"
    dimensions {
      name  = "AutoScalingGroup"
      value = opentelekomcloud_as_group_v1.as_group.id
    }
  }
  condition {
    period              = 300
    filter              = "average"
    comparison_operator = ">"
    value               = 80
    unit                = "%"
    count               = 2
  }
}

AUTOSCALING_WITH_ELB_V3 GRAPH
SHOW CODE
module "network" {
  source = "../modules/network"
}

resource "opentelekomcloud_lb_pool_v3" "pool_1" {
  name            = "pool_1"
  loadbalancer_id = opentelekomcloud_lb_loadbalancer_v3.lb_1.id
  lb_algorithm    = "ROUND_ROBIN"
  protocol        = "TCP"

  session_persistence {
    type                = "SOURCE_IP"
    persistence_timeout = "30"
  }
}

resource "opentelekomcloud_lb_loadbalancer_v3" "lb_1" {
  subnet_id   = module.network.shared_subnet.subnet_id
  network_ids = [module.network.shared_subnet.network_id]

  availability_zones = [var.az]
}

resource "opentelekomcloud_lb_listener_v3" "listener_1" {
  name            = "listener_1"
  description     = "some interesting description"
  loadbalancer_id = opentelekomcloud_lb_loadbalancer_v3.lb_1.id
  protocol        = "HTTP"
  protocol_port   = 8080

  advanced_forwarding = true
  sni_match_algo      = "wildcard"

  insert_headers {
    forwarded_host = true
  }

  ip_group {
    id     = opentelekomcloud_lb_ipgroup_v3.group_1.id
    enable = true
  }
}

resource "opentelekomcloud_lb_ipgroup_v3" "group_1" {
  name        = "group_1"
  description = "group description"

  ip_list {
    ip          = "192.168.0.10"
    description = "one"
  }
}

resource "opentelekomcloud_as_group_v1" "as_group_1" {
  scaling_group_name       = "as_group_example"
  scaling_configuration_id = opentelekomcloud_as_configuration_v1.as_config_1.id
  desire_instance_number   = 2
  min_instance_number      = 0
  max_instance_number      = 3
  networks {
    id = module.network.shared_subnet.network_id
  }
  security_groups {
    id = module.network.default_security_group_id
  }
  vpc_id = module.network.shared_subnet.vpc_id

  lbaas_listeners   {
    pool_id = opentelekomcloud_lb_pool_v3.pool_1.id
    protocol_port = opentelekomcloud_lb_listener_v3.listener_1.protocol_port
  }
  delete_publicip  = true
  delete_instances = "yes"
}

resource "opentelekomcloud_as_policy_v1" "policy_example" {
  scaling_policy_name = "policy_example"
  scaling_group_id    = opentelekomcloud_as_group_v1.as_group_1.id
  scaling_policy_type = "RECURRENCE"
  scaling_policy_action {
    operation = "ADD"
  }
  scheduled_policy {
    launch_time     = "07:00"
    recurrence_type = "Daily"
    end_time        = "2024-12-30T12:00Z"
  }
}

resource "opentelekomcloud_as_configuration_v1" "as_config_1" {
  scaling_configuration_name = "config_example"
  instance_config {
    flavor = var.flavor
    image  = var.image_id
    disk {
      size        = 40
      volume_type = "SATA"
      disk_type   = "SYS"
    }
    key_name  = var.keyname
    user_data = < /tmp/four
# ...
EOF
  }
}

ELB_V3 GRAPH
SHOW CODE
module "network" {
  source = "../modules/network"
}

resource "opentelekomcloud_lb_loadbalancer_v3" "loadbalancer" {
  router_id   = module.network.shared_subnet.vpc_id
  network_ids = [module.network.shared_subnet.network_id]

  availability_zones = ["eu-de-01"]
}

resource "opentelekomcloud_lb_ipgroup_v3" "group_1" {
  name        = "group_1"
  description = "some interesting description 1"

  ip_list {
    ip          = "192.168.10.10"
    description = "first"
  }
  depends_on = [opentelekomcloud_lb_loadbalancer_v3.loadbalancer]
}

resource "opentelekomcloud_lb_listener_v3" "listener" {
  loadbalancer_id     = opentelekomcloud_lb_loadbalancer_v3.loadbalancer.id
  protocol            = "HTTP"
  protocol_port       = 8080
  advanced_forwarding = true
  sni_match_algo      = "wildcard"

  insert_headers {
    forwarded_host = true
  }

  ip_group {
    id     = opentelekomcloud_lb_ipgroup_v3.group_1.id
    enable = true
  }
  depends_on = [
    opentelekomcloud_lb_loadbalancer_v3.loadbalancer,
    opentelekomcloud_lb_ipgroup_v3.group_1
  ]
}

resource "opentelekomcloud_lb_pool_v3" "pool" {
  loadbalancer_id = opentelekomcloud_lb_loadbalancer_v3.loadbalancer.id
  lb_algorithm    = "ROUND_ROBIN"
  protocol        = "HTTP"

  depends_on = [opentelekomcloud_lb_listener_v3.listener]
}

resource "opentelekomcloud_lb_policy_v3" "policy" {
  name             = "policy_updated"
  description      = "some interesting description"
  action           = "REDIRECT_TO_POOL"
  listener_id      = opentelekomcloud_lb_listener_v3.listener.id
  redirect_pool_id = opentelekomcloud_lb_pool_v3.pool.id
  position         = 37

  depends_on = [opentelekomcloud_lb_listener_v3.listener]
}

resource "opentelekomcloud_lb_rule_v3" "rule" {
  type         = "PATH"
  compare_type = "EQUAL_TO"
  value        = "/test"
  policy_id    = opentelekomcloud_lb_policy_v3.policy.id

  conditions {
    value = "/home"
  }
  depends_on = [opentelekomcloud_lb_listener_v3.listener]
}

RDS_INSTANCE_V3 GRAPH
SHOW CODE
module "network" {
  source = "../modules/network"
}

resource "opentelekomcloud_rds_instance_v3" "instance" {
  name              = "tf_rds_instance_1"
  availability_zone = [var.az]
  db {
    password = "Postgres!120521"
    type     = "PostgreSQL"
    version  = "10"
    port     = "8635"
  }
  security_group_id = module.network.default_security_group_id
  subnet_id         = module.network.shared_subnet.network_id
  vpc_id            = module.network.shared_subnet.vpc_id
  volume {
    type = "COMMON"
    size = 40
  }
  flavor = "rds.pg.c2.large"
  backup_strategy {
    start_time = "08:00-09:00"
    keep_days  = 0
  }
  tags = {
    muh = "value-create"
    kuh = "value-create"
  }
  lower_case_table_names = "0"
}