Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Sample of in-place change

...

Code Block
# main.tf
locals {
  keypair_name       = "john-cloudy-publickey"
  virtual_image      = "ubuntu-24.04-20250604102601Ubuntu 22.04 NVIDIA_AI:q!"
  plan               = "vm.a6000.14"
  app_name           = "demo"
  instance_name      = "john-cloudy"
  instance_index     = 1
  private_networks   = ["private"]
  external_network   = "external"
  security_groups    = ["ssh"]
  instance_has_fip   = true
  extra_volume       = true
  extra_volume_size  = 512
  extra_volume2      = true
  extra_volume2_size = 512

  tags = {
    environment     = "production"
    owner           = "john-cloudy"
    deployment-tool = "terraform"
  }
}

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 1.53.0"
    }
  }
}

data "openstack_images_image_v2" "image" {
  name        = local.virtual_image
  most_recent = true
}

data "openstack_compute_flavor_v2" "flavor" {
  name = local.plan
}

module "instance" {
  source = "./ewc-tf-module-openstack-compute"

  app_name       = local.app_name
  instance_name  = local.instance_name
  instance_index = local.instance_index
  image_id       = data.openstack_images_image_v2.image.id
  flavor_id      = data.openstack_compute_flavor_v2.flavor.id
  keypair_name   = local.keypair_name

  networks = local.private_networks

  instance_has_fip = local.instance_has_fip

  extra_volume       = local.extra_volume
  extra_volume_size  = local.extra_volume_size
  extra_volume2      = local.extra_volume2
  extra_volume2_size = local.extra_volume2_size

  security_groups = local.security_groups

  external_network_name = local.external_network

  tags = local.tags
}

...

Tip

 The Terraform plan logs list resources which shall be updated in-place separately from those which will be newly added  or destroyed. The tilde character (~) is flags resources and attributes that trigger an in-place update, for . For example:

Code Block
Terraform will perform the following actions:

  # module.web_server.openstack_compute_instance_v2.instance will be updated in-place
  ~ resource "openstack_compute_instance_v2" "instance" {
        id                  = "552f77d0-dc87-4de8-bc58-93c0b324761a"
      ~ image_name          = "Ubuntu 22.04 NVIDIA_AI" -> "ubuntu-22.04-20250604054912"
       # (16 unchanged attributes hidden)


...

Code Block
# main.tf (no public internet, no 2nd extra volume)
locals {
  keypair_name       = "john-cloudy-publickey"
  virtual_image      = "ubuntu-24Ubuntu 22.04-20250604102601 NVIDIA_AI"
  plan               = "vm.a6000.14"
  app_name           = "demo"
  instance_name      = "john-cloudy"
  instance_index     = 1
  private_networks   = ["private"]
  external_network   = "external"
  ecurity_groups    = ["ssh"]
  instance_has_fip   = false
  extra_volume       = true
  extra_volume_size  = 512
  extra_volume2      = false
  extra_volume2_size = 512

  tags = {
    environment     = "production"
    owner           = "john-cloudy"
    deployment-tool = "terraform"
  }
}

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 1.53.0"
    }
  }
}

data "openstack_images_image_v2" "image" {
  name        = local.virtual_image
  most_recent = true
}

data "openstack_compute_flavor_v2" "flavor" {
  name = local.plan
}

module "instance" {
  source = "./ewc-tf-module-openstack-compute"

  app_name       = local.app_name
  instance_name  = local.instance_name
  instance_index = local.instance_index
  image_id       = data.openstack_images_image_v2.image.id
  flavor_id      = data.openstack_compute_flavor_v2.flavor.id
  keypair_name   = local.keypair_name

  networks = local.private_networks

  instance_has_fip = local.instance_has_fip

  extra_volume       = local.extra_volume
  extra_volume_size  = local.extra_volume_size
  extra_volume2      = local.extra_volume2
  extra_volume2_size = local.extra_volume2_size

  security_groups = local.security_groups

  external_network_name = local.external_network

  tags = local.tags
}

...